3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php class FV_Player_Email_Subscription { public function __construct() { add_action( 'admin_init', array($this, 'init_options') ); add_action( 'admin_init', array($this, 'admin__add_meta_boxes') ); add_filter( 'fv_flowplayer_popup_html', array($this, 'popup_html') ); add_filter( 'fv_player_conf_defaults', array($this, 'conf_defaults') ); add_filter( 'fv_flowplayer_settings_save', array($this, 'fv_flowplayer_settings_save'), 10, 2 ); add_action( 'wp_ajax_nopriv_fv_wp_flowplayer_email_signup', array($this, 'email_signup') ); add_action( 'wp_ajax_fv_wp_flowplayer_email_signup', array($this, 'email_signup') ); add_filter( 'fv_player_admin_popups_defaults', array($this,'fv_player_admin_popups_defaults') ); add_action( 'wp_ajax_fv_player_email_subscription_save', array($this, 'save_settings') ); if( !empty($_GET['fv-email-export']) && !empty($_GET['page']) && $_GET['page'] === 'fvplayer'){ add_action('admin_init', array( $this, 'csv_export' ) ); } if( !empty($_GET['fv-email-export-screen']) && !empty($_GET['page']) && $_GET['page'] === 'fvplayer'){ add_action('in_admin_header',array($this,'admin_export_screen')); } add_filter( 'fv_flowplayer_attributes', array( $this, 'popup_preview' ), 10, 3 ); } /* * SETTINGS */ public function conf_defaults($conf) { $conf += array( 'mailchimp_api' => '', 'mailchimp_list' => '', 'mailchimp_label' => 'Subscribe for updates', ); return $conf; } public function init_options() { if( !get_option('fv_player_email_lists') ) { update_option('fv_player_email_lists', array( 1 => array('first_name' => true, 'last_name' => false, 'integration' => false, 'title' => 'Subscribe to list one', 'description' => 'Two good reasons to subscribe right now', 'disabled' => false ) ) ); } } public function admin__add_meta_boxes() { add_meta_box('fv_flowplayer_email_lists', __('Email Popups', 'fv-wordpress-flowplayer'), array($this, 'settings_box_lists'), 'fv_flowplayer_settings_actions', 'normal'); add_meta_box('fv_flowplayer_email_integration', __('Email Integration', 'fv-wordpress-flowplayer'), array($this, 'settings_box_integration'), 'fv_flowplayer_settings_actions', 'normal'); } public function fv_flowplayer_settings_save($param1,$param2){ if(isset($_POST['email_lists'])){ $aOptions = $_POST['email_lists']; unset($aOptions['#fv_popup_dummy_key#']); foreach( $aOptions AS $key => $value ) { $aOptions[$key]['first_name'] = stripslashes($value['first_name']); $aOptions[$key]['last_name'] = stripslashes($value['last_name']); $aOptions[$key]['integration'] = isset($value['integration']) ? stripslashes($value['integration']) : false; $aOptions[$key]['title'] = stripslashes($value['title']); $aOptions[$key]['description'] = stripslashes($value['description']); } update_option('fv_player_email_lists',$aOptions); } return $param1; } public function fv_player_admin_popups_defaults($aData){ $aPopupData = get_option('fv_player_email_lists'); unset($aPopupData['#fv_list_dummy_key#']); if( is_array($aPopupData) ) { foreach( $aPopupData AS $key => $aPopupAd ) { $aData['email-' . $key] = $aPopupAd; } } return $aData; } public function settings_box_integration () { global $fv_fp; ?> <p><?php _e('Enter your service API key and then assign it to a list which you create above.', 'fv-wordpress-flowplayer'); ?></p> <?php if( version_compare(phpversion(),'5.3.0') >= 0 ) : ?> <table class="form-table2" style="margin: 5px; "> <tr> <td style="width: 250px"><label for="mailchimp_api"><?php _e('Mailchimp API key', 'fv-wordpress-flowplayer'); ?>:</label></td> <td> <p class="description"> <input type="text" name="mailchimp_api" id="mailchimp_api" value="<?php echo esc_attr($fv_fp->_get_option('mailchimp_api')); ?>" /> </p> </td> </tr> <tr> <td></td> <td> <input type="submit" name="fv-wp-flowplayer-submit" class="button-primary" value="<?php _e('Save All Changes', 'fv-wordpress-flowplayer'); ?>" /> </td> </tr> </table> <?php else : ?> <p><?php _e('Please upgrade to PHP 5.3 or above to use the Mailchimp integration.', 'fv-wordpress-flowplayer'); ?></p> <?php endif; } public function settings_box_lists () { global $fv_fp; $aListData = get_option('fv_player_email_lists'); if( empty($aListData) ) { $aListData = array( 1 => array() ); } if(!isset($aListData['#fv_list_dummy_key#'])){ $aListData = array( '#fv_list_dummy_key#' => array() ) + $aListData ; } $aMailchimpLists = $this->get_mailchimp_lists(); ?> <p><?php _e('Lists defined here can be used for subscription box for each video or for Default Popup above.', 'fv-wordpress-flowplayer'); ?></p> <table class="form-table2" style="margin: 5px; "> <tr> <td> <table id="fv-player-email_lists-settings"> <thead> <tr> <td>ID</td> <td style="width: 40%"><?php _e('Properties', 'fv-wordpress-flowplayer'); ?></td> <?php if( !empty($aMailchimpLists['result']) ) : ?> <td><?php _e('Target List', 'fv-wordpress-flowplayer'); ?></td> <?php endif; ?> <td><?php _e('Export', 'fv-wordpress-flowplayer'); ?></td> <td><?php _e('Options', 'fv-wordpress-flowplayer'); ?></td> <td><?php _e('Status', 'fv-wordpress-flowplayer'); ?></td> <td></td> </tr> </thead> <tbody> <?php foreach ($aListData AS $key => $aList) { $mailchimpOptions = ''; foreach($aMailchimpLists['result'] as $mailchimpId => $list){ if(!$list) continue; $use = true; foreach($list['fields'] as $field){ if( $field['required'] && ($field['tag'] === "FNAME" && ( empty($aList['first_name']) || !$aList['first_name'] ) || $field['tag'] === "LNAME" && ( empty($aList['last_name']) || !$aList['last_name'] ) ) ){ $use = false; break; } } if($use){ $mailchimpOptions .= '<option value="mailchimp-' . $list['id'] . '" ' . ( isset($aList['integration']) && 'mailchimp-' . $list['id'] === $aList['integration']?"selected":"" ) . '>' . $list['name'] . '</option>'; } } if( $aMailchimpLists && $mailchimpOptions ) { $mailchimp_no_option = 'None'; } else if( $aMailchimpLists && !$mailchimpOptions ) { $mailchimp_no_option = 'No matching list found'; } ?> <tr class='data' id="fv-player-list-item-<?php echo $key; ?>"<?php echo $key === '#fv_list_dummy_key#' ? 'style="display:none"' : ''; ?>> <td class='id'><?php echo $key ; ?></td> <td> <table> <tr> <td style="width:16%"><label>Header</label></td> <td><input type='text' name='email_lists[<?php echo $key; ?>][title]' value='<?php echo isset($aList['title']) ? esc_attr($aList['title']) : ''; ?>' /></td> </tr> <tr> <td><label>Message</label></td> <td><input type='text' name='email_lists[<?php echo $key; ?>][description]' value='<?php echo isset($aList['description']) ? esc_attr($aList['description']) : ''; ?>' /></td> </tr> </table> </td> <?php if( !empty($aMailchimpLists['result']) ) : ?> <td> <select name="email_lists[<?php echo $key; ?>][integration]" title="E-mail list"> <option value=""><?php echo $mailchimp_no_option; ?></option> <?php echo $mailchimpOptions ;?> </select> <br />&nbsp; </td> <?php endif; ?> <td> <a class='fv-player-list-export' href='<?php echo admin_url('options-general.php?page=fvplayer&fv-email-export='.$key ); ?>' target="_blank" ><?php _e('Download CSV', 'fv-wordpress-flowplayer'); ?></a> <br /> <a class='fv-player-list-export' href='<?php echo admin_url('options-general.php?page=fvplayer&fv-email-export-screen='.$key); ?>' target="_blank" ><?php _e('View list', 'fv-wordpress-flowplayer'); ?></a> </td> <td> <input type='hidden' name='email_lists[<?php echo $key; ?>][first_name]' value='0' /> <input id='list-first-name-<?php echo $key; ?>' title="first name" type='checkbox' name='email_lists[<?php echo $key; ?>][first_name]' value='1' <?php echo (isset($aList['first_name']) && $aList['first_name'] ? 'checked="checked"' : ''); ?> /> <label for='list-first-name-<?php echo $key; ?>'>First Name</label> <br /> <input type='hidden' name='email_lists[<?php echo $key; ?>][last_name]' value='0' /> <input id='list-last-name-<?php echo $key; ?>' title="last name" type='checkbox' name='email_lists[<?php echo $key; ?>][last_name]' value='1' <?php echo (isset($aList['last_name']) && $aList['last_name'] ? 'checked="checked"' : ''); ?> /> <label for='list-last-name-<?php echo $key; ?>'>Last Name</label> </td> <td> <input type='hidden' name='email_lists[<?php echo $key; ?>][disabled]' value='0' /> <input id='ListAdDisabled-<?php echo $key; ?>' type='checkbox' title="disable" name='email_lists[<?php echo $key; ?>][disabled]' value='1' <?php echo (isset($aList['disabled']) && $aList['disabled'] ? 'checked="checked"' : ''); ?> /> <label for='ListAdDisabled-<?php echo $key; ?>'>Disable</label> <br /> <a class='fv-player-list-remove' href=''><?php _e('Remove', 'fv-wordpress-flowplayer'); ?></a> </td> <td> <input type="button" style="visibility: hidden" class="fv_player_email_list_save button" value="Save & Preview" /> </td> </tr> <?php } ?> </tbody> </table> </td> </tr> <tr> <td> <input type="button" value="<?php _e('Add More Lists', 'fv-wordpress-flowplayer'); ?>" class="button" id="fv-player-email_lists-add" /> </td> </tr> </table> <script> jQuery('#fv-player-email_lists-add').click( function() { var fv_player_list_index = (parseInt( jQuery('#fv-player-email_lists-settings tr.data:last .id').html() ) || 0 ) + 1; jQuery('#fv-player-email_lists-settings').append(jQuery('#fv-player-email_lists-settings tr.data:first').prop('outerHTML').replace(/#fv_list_dummy_key#/gi,fv_player_list_index + "")); jQuery('#fv-player-list-item-' + fv_player_list_index).show(); return false; } ); jQuery(document).on('click','.fv-player-list-remove', false, function() { if( confirm('Are you sure you want to remove the list?') ){ jQuery(this).parents('.data').remove(); if(jQuery('#fv-player-email_lists-settings .data').length === 1) { jQuery('#fv-player-email_lists-add').trigger('click'); } } return false; } ); jQuery(document).on('keydown change', '#fv-player-email_lists-settings', function(e) { var row = jQuery(e.target).parents('[id^="fv-player-list-item-"]'); row.find('.fv_player_email_list_save').css('visibility','visible'); }); jQuery(document).on('click', '#fv-player-email_lists-settings input[type=checkbox]', function(e) { var row = jQuery(e.target).parents('[id^="fv-player-list-item-"]'); row.find('.fv_player_email_list_save').css('visibility','visible'); }); jQuery(document).on('click', '.fv_player_email_list_save', function() { var button = jQuery(this); var row = button.parents('[id^="fv-player-list-item-"]'); var aInputs = row.find('input, select'); var key = row.attr('id').replace(/fv-player-list-item-/,''); fv_player_open_preview_window(null,<?php echo $fv_fp->_get_option('width') ?>,<?php echo $fv_fp->_get_option('height') ?>+100); button.prop('disabled',true); jQuery.ajax( { type: "POST", url: ajaxurl, data: aInputs.serialize()+'&key='+key+'&action=fv_player_email_subscription_save&_wpnonce=<?php echo wp_create_nonce('fv_player_email_subscription_save'); ?>', success: function(response) { button.css('visibility','hidden'); button.prop('disabled', false); row.replaceWith( jQuery('#'+row.attr('id'),response) ); var shortcode = '<?php echo '[fvplayer src="https://player.vimeo.com/external/196881410.hd.mp4?s=24645ecff21ff60079fc5b7715a97c00f90c6a18&profile_id=174&oauth2_token_id=3501005" splash="https://i.vimeocdn.com/video/609485450_1280.jpg" preroll="no" postroll="no" subtitles="'.plugins_url('images/test-subtitles.vtt',dirname(__FILE__)).'" end_popup_preview="true" popup="email-#key#" caption="'.__("This is how the popup will appear at the end of a video",'fv-wordpress-flowplayer').'"]'; ?>'; shortcode = shortcode.replace(/#key#/,key); var url = '<?php echo home_url(); ?>?fv_player_embed=1&fv_player_preview=' + b64EncodeUnicode(shortcode); fv_player_open_preview_window(url); }, error: function() { button.val('Error saving!'); } } ); }); </script> <?php } /* * GENEREATE HTML */ public function popup_html($popup) { if ($popup === 'email-no'){ return ''; } if(strpos($popup,'email-') !== 0) { return $popup ; } $id = array_reverse(explode('-',$popup)); $id = $id[0]; $aLists = get_option('fv_player_email_lists',array()); $list = isset($aLists[$id]) ? $aLists[$id] : array('disabled' => '1'); if( empty($list['title']) || $list['disabled'] === '1'){ return ''; } $popupItems = ''; $count = 1; foreach($list as $key => $field){ if(($key === 'first_name' || $key === 'last_name') && $field == "1"){ $count++; $aName = explode('_',$key); foreach($aName as $nameKey => $val){ $aName[$nameKey] = ucfirst($aName[$nameKey]); } $sName = implode(' ',$aName); $popupItems .= '<input type="text" placeholder="' . $sName . '" name="' . $key . '" required/>'; } } $popup = ''; if( !empty($list['title']) ) $popup .= '<h3>'.$list['title'].'</h3>'; if( !empty($list['description']) ) $popup .= '<p>'.$list['description'].'</p>'; $popup .= '<form class="mailchimp-form mailchimp-form-' . $count . '">' . '<input type="hidden" name="list" value="' . $id . '" />' . '<input type="email" placeholder="' . __('Email Address', 'fv-wordpress-flowplayer') . '" name="email"/>' . $popupItems . '<input type="submit" value="' . __('Subscribe', 'fv-wordpress-flowplayer') . '"/></form>'; return $popup; } /* * API CALL */ private function get_mailchimp_lists() { if(version_compare(phpversion(),'5.3.0','<')){ return array('error' => 'PHP 5.3 or above required.', 'result' => false); } global $fv_fp; $aLists = array(); if (!$fv_fp->_get_option('mailchimp_api')) { update_option('fv_player_mailchimp_lists', $aLists); return array('error' => 'No API key found. ', 'result' => $aLists); } $aLists = get_option('fv_player_mailchimp_lists', array()); $sTimeout = !$aLists || count($aLists) == 0 ? 60 : 3600; if( get_option('fv_player_mailchimp_time', 0 ) + $sTimeout > time() && !isset($_GET['fv_refresh_mailchimp']) ) return array('error' => false, 'result' => $aLists); require_once dirname(__FILE__) . '/../includes/mailchimp-api/src/MailChimp.php'; require_once dirname(__FILE__) . '/email-subscription-mailchimp.php'; $result = fv_player_mailchimp_result(); $error = fv_player_mailchimp_last_error(); if ($error || !$result) { update_option('fv_player_mailchimp_time', time() - 50 * 60); update_option('fv_player_mailchimp_lists', $aLists); return array('error' => $error, 'result' => $aLists); } $aLists = array(); foreach ($result['lists'] as $list) { $item = array( 'id' => $list['id'], 'name' => $list['name'], 'fields' => array() ); foreach ($list['_links'] as $link) { if ($link['rel'] === 'merge-fields') { $mergeFields = $MailChimp->get("lists/{$list['id']}/merge-fields"); foreach ($mergeFields['merge_fields'] as $field) { $item['fields'][] = array( 'tag' => $field['tag'], 'name' => $field['name'], 'required' => $field['required'], ); } break; } } $aLists[$list['id']] = $item; } update_option('fv_player_mailchimp_time', time() ); update_option('fv_player_mailchimp_lists', $aLists); return array('error' => false, 'result' => $aLists); } private function mailchimp_signup($list_id, $data){ global $fv_fp; require_once dirname(__FILE__) . '/../includes/mailchimp-api/src/MailChimp.php'; $MailChimp = new \DrewM\MailChimp\MailChimp($fv_fp->_get_option('mailchimp_api')); $merge_fields = array(); if(isset($data['first_name'])){ $merge_fields['FNAME'] = $data['first_name']; } if(isset($data['last_name'])){ $merge_fields['LNAME'] = $data['last_name']; } $result_data = $MailChimp->post("lists/$list_id/members", array( 'email_address' => $data['email'], 'status' => 'subscribed', 'merge_fields' => (object)$merge_fields)); $result = array( 'status' => 'OK', 'text' => __('Thank You for subscribing.', 'fv-wordpress-flowplayer'), 'error_log' => false, ); if ($result_data['status'] === 400) { if ($result_data['title'] === 'Member Exists') { $result = array( 'status' => 'ERROR', 'text' => __('Email Address already subscribed.', 'fv-wordpress-flowplayer'), 'error_log' => $result_data, ); } elseif ($result_data['title'] === 'Invalid Resource') { $result = array( 'status' => 'ERROR', 'text' => __('Email Address not valid', 'fv-wordpress-flowplayer'), 'error_log' => $result_data ); } else { $result = array( 'status' => 'ERROR', 'text' => 'Unknown Error 1. ', 'error_log'=> $result_data, ); } }elseif($result_data['status'] !== 'subscribed'){ $result = array( 'status' => 'ERROR', 'text' => 'Unknown Error 2.', 'error_log'=> $result_data, ); } return $result; } public function email_signup() { $data = $_POST; $list_id = isset($data['list']) ? $data['list'] : 0; unset($data['list']); $aLists = get_option('fv_player_email_lists'); $list = isset($aLists[$list_id]) ? $aLists[$list_id] : array(); global $wpdb; $table_name = $wpdb->prefix . 'fv_player_emails'; if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") !== $table_name) { $sql = "CREATE TABLE `$table_name` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `email` TEXT NULL, `first_name` TEXT NULL, `last_name` TEXT NULL, `id_list` INT(11) NOT NULL, `date` DATETIME NULL DEFAULT NULL, `data` TEXT NULL, `integration` TEXT NULL, `integration_nice` TEXT NULL, `status` TEXT NULL, `error` TEXT NULL, PRIMARY KEY (`id`) )" . $wpdb->get_charset_collate() . ";"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta($sql); } $result = array( 'status' => 'OK', 'text' => __('Thank You for subscribing.', 'fv-wordpress-flowplayer')); $integration_nice = ''; if(!empty($list['integration'])){ $aLists = get_option('fv_player_mailchimp_lists', array()); $integration_nice = $aLists[str_replace('mailchimp-','',$list['integration'])]['name']; $result = $this->mailchimp_signup(str_replace('mailchimp-','',$list['integration']),$data); } if(empty($data['email']) || filter_var(trim($data['email']), FILTER_VALIDATE_EMAIL)===false){ $result['status'] = 'ERROR'; $result['text'] = __('Malformed Email Address.', 'fv-wordpress-flowplayer'); }; $count = $wpdb->get_var('SELECT COUNT(*) FROM ' . $wpdb->prefix . 'fv_player_emails WHERE email="' . addslashes($data['email']) . '" AND id_list = "'. addslashes($list_id) .'"' ); if(intval($count) === 0){ $wpdb->insert($table_name, array( 'email' => $data['email'], 'data' => serialize($data), 'id_list'=>$list_id, 'date'=>date("Y-m-d H:i:s"), 'first_name' => isset($data['first_name']) ? $data['first_name'] : '', 'last_name' => isset($data['last_name']) ? $data['last_name'] : '', 'integration' => $list['integration'], 'integration_nice' => $integration_nice, 'status' => $result['status'], 'error' => $result['status'] === 'ERROR' ? serialize( $result['error_log'] ) : '', )); }elseif($result['status'] === 'OK'){ $result = array( 'status' => 'ERROR', 'text' => __('Email Address already subscribed.', 'fv-wordpress-flowplayer'), ); }else{ $wpdb->insert($table_name, array( 'email' => $data['email'], 'data' => serialize($data), 'id_list'=>$list_id, 'date'=>date("Y-m-d H:i:s"), 'first_name' => isset($data['first_name']) ? $data['first_name'] : '', 'last_name' => isset($data['last_name']) ? $data['last_name'] : '', 'integration' => $list['integration'], 'integration_nice' => $integration_nice, 'status' => $result['status'], 'error' => $result['status'] === 'ERROR' ? serialize( $result['error_log'] ) : '', )); } unset($result['error_log']); die(json_encode($result)); } function csv_export(){ $list_id = $_GET['fv-email-export']; $aLists = get_option('fv_player_email_lists'); $list = $aLists[$list_id]; $filename = 'export-lists-' . (empty($list->title) ? $list_id : $list->title) . '-' . date('Y-m-d') . '.csv'; header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=$filename"); header("Pragma: no-cache"); header("Expires: 0"); global $wpdb; $results = $wpdb->get_results('SELECT `email`, `first_name`, `last_name`, `date`, `integration`, `integration_nice`, `status`, `error` FROM `' . $wpdb->prefix . 'fv_player_emails` WHERE `id_list` = "' . esc_sql($list_id) . '"'); echo 'email,first_name,last_name,date,integration,status,error'."\n"; if( $results ) { foreach ($results as $row){ if(!empty($row->integration)){ $row->integration .= ': '.$row->integration_nice; } unset($row->integration_nice); if(!empty($row->error)){ $tmp = unserialize($row->error); $row->error = $tmp['title']; } echo '"' . implode('","',str_replace('"','',(array)$row)) . "\"\n"; } } die; } public function admin_export_screen(){ $list_id = $_GET['fv-email-export-screen']; global $wpdb; $results = $wpdb->get_results('SELECT `email`, `first_name`, `last_name`, `date`, `integration`, `integration_nice`, `status`, `error` FROM `' . $wpdb->prefix . 'fv_player_emails` WHERE `id_list` = "' . esc_sql($list_id) . '" LIMIT 10'); ?> <style> #adminmenumain { display: none } #wpcontent { margin-left: 0 } </style> <table class="wp-list-table widefat fixed striped posts"> <thead> <tr> <th scope="col" class="manage-column">E-mail</th> <th scope="col" class="manage-column">First Name</th> <th scope="col" class="manage-column">Last Name</th> <th scope="col" class="manage-column">Date</th> <th scope="col" class="manage-column">Integration</th> <th scope="col" class="manage-column">Status</th> <th scope="col" class="manage-column">Error</th> </tr> </thead> <tbody> <?php foreach ($results as $row){ echo '<tr>'; foreach ($row as $key => $item) { if($key === 'integration' && !empty($item)){ $item .= ': ' . $row->integration_nice; }elseif($key === 'integration_nice'){ continue; }elseif($key === 'error'){ $item = ''; if( !empty($item) ) { $tmp = unserialize($item); $item = $tmp['title']; } } echo '<td>' . $item . '</td>'; } echo '</tr>'; } ?> </tbody> </table> <p> <a class='fv-player-list-export button' href='<?php echo admin_url('options-general.php?page=fvplayer&fv-email-export='.$list_id);?>' target="_blank" ><?php _e('Download CSV', 'fv-wordpress-flowplayer'); ?></a> </p> <?php die(); } public function save_settings() { check_ajax_referer('fv_player_email_subscription_save'); $aLists = get_option('fv_player_email_lists',array()); $key = intval($_POST['key']); if( !isset($_POST['email_lists'][$key]) ) { header('HTTP/1.0 403 Forbidden'); die(); } $aLists[$key] = $_POST['email_lists'][$key]; update_option('fv_player_email_lists',$aLists); fv_player_admin_page(); } public function popup_preview( $aAttributes ) { global $fv_fp; $aArgs = func_get_args(); if( isset($aArgs[2]->aCurArgs['end_popup_preview']) && $aArgs[2]->aCurArgs['end_popup_preview'] ) { $aAttributes['data-end_popup_preview'] = true; } return $aAttributes; } } $FV_Player_Email_Subscription = new FV_Player_Email_Subscription();
Output for 5.2.17
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/5UP8s on line 413 Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/5UP8s on line 413 Parse error: syntax error, unexpected T_STRING in /in/5UP8s on line 413
Process exited with code 255.