/** * Parse form submission via ajax and return status response. * * @since 0.1.0 */ public function ajax_controller_interaction() { check_ajax_referer($this->plugin_name . '_ajax_interaction_nonce', 'nonce'); $result = $post_attr = array(); // @TODO: if ( $_POST['cr_form'] ) { // Parse serialized ajax post data as `$post` (array). parse_str($_POST['cr_form'], $post); // @TODO: Get rid of `parse_str()` if (is_email($post['email'])) { // Prepare receiver adapter. $client = new Api\Cleverreach(); $receiver = new Api\Cleverreach_Receiver_Adapter($client); // Populate `$post_attr` (array) according to CleverReach API defaults. foreach ($post as $key => $value) { if ('email' != $key) { // Skip 'email' as this is not needed as separate attribute. array_push($post_attr, array('key' => sanitize_html_class($key), 'value' => sanitize_text_field($value))); } } // Populate `$source` (string) $helper = new Cre_Helper(); if ($helper->has_option('source')) { $source = $helper->get_option('source'); } else { $source = get_bloginfo('name'); } // Populate `$user` (array) according to CleverReach API defaults. $user = array('email' => sanitize_email($post['email']), 'registered' => time(), 'source' => esc_html($source), 'attributes' => $post_attr); $receiver_added = $receiver->add($user); // Test returned data. if (is_object($receiver_added) && 'SUCCESS' == $receiver_added->status) { $result['type'] = 'success'; // Prepare form adapter. $form = new Api\Cleverreach_Form_Adapter($client); // Send activation mail. $user_data = array('user_ip' => '127.0.0.1', 'user_agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1', 'referer' => esc_url(home_url())); $form->send_activation_mail($helper->get_option('form_id'), sanitize_email($post['email']), $user_data); } else { $result['type'] = 'error'; if ('duplicate data' == $receiver_added) { $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_duplicate', esc_html__('It seems like you\'re already subscribed to our list.', 'cleverreachextension'))); } else { $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_common', esc_html__('Sorry, there seems to be a problem with your data.', 'cleverreachextension'))); } } // end of is_object() && 'SUCCESS' } else { $result['type'] = 'error'; $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_invalid_email', esc_html__('Sorry, there seems to be a problem with your email address.', 'cleverreachextension'))); } // end of is_email() // Finally return JSON result. $result = json_encode($result); echo $result; die; }
/** * Parse form submission via ajax and return status response. * * @since 0.1.0 * * @wp-hook wp_ajax_nopriv_cre_ajax_controller_interaction * @wp-hook wp_ajax_cre_ajax_controller_interaction */ public function ajax_controller_interaction() { check_ajax_referer($this->plugin_name . '_ajax_interaction_nonce', 'nonce'); $result = $post_attr = array(); // @TODO: if ( $_POST['cr_form'] ) { // Parse serialized ajax post data as `$post` (array). parse_str($_POST['cr_form'], $post); // @TODO: Get rid of `parse_str()` if (is_email($post['email'])) { // Prepare receiver adapter. $helper = new Cre_Helper(); $client = new Api\Cleverreach(); $receiver = new Api\Cleverreach_Receiver_Adapter($client); $group = new Api\Cleverreach_Group_Adapter($client); // Populate `$post_attr` (array) according to CleverReach API defaults. foreach ($post as $key => $value) { // Join values if $value is an array. if (is_array($value)) { $value = join(', ', $value); } if ('email' != $key) { // Skip 'email' as this is not needed as separate attribute. // Create fields for default forms. if ('true' === $helper->get_option('ajax')) { // Attribute `$key` may only contain lowercase a-z and 0-9. Everything else will be converted to `_`. $key = strtolower($key); $key = str_replace(' ', '_', $key); $key = str_replace('-', '_', $key); $key = preg_replace('/[^A-Za-z0-9\\-]/', '_', $key); if ($value && $key[0] !== '_') { // Exclude (hidden) fields starting with an underscore. $group->attribute_add($key, 0); } } array_push($post_attr, array('key' => sanitize_html_class($key), 'value' => sanitize_text_field($value))); } } // Populate `$source` (string) $source = get_bloginfo('name'); if (isset($_POST['source'])) { $source = $_POST['source']; } elseif ($helper->has_option('source')) { $source = $helper->get_option('source'); } // Populate `$user` (array) according to CleverReach API defaults. $user = array('email' => sanitize_email($post['email']), 'registered' => time(), 'source' => esc_html(trim($source)), 'attributes' => $post_attr); $list_id = empty($_POST['list']) ? $helper->get_option('list_id') : (int) $_POST['list']; $receiver_added = $receiver->add($user, $list_id); // Test returned data. if (is_object($receiver_added) && 'SUCCESS' == $receiver_added->status) { $result['type'] = 'success'; // Prepare form adapter. $form = new Api\Cleverreach_Form_Adapter($client); // Send activation mail. $user_data = array('user_ip' => '127.0.0.1', 'user_agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1', 'referer' => esc_url(home_url())); $form_id = empty($_POST['form']) ? $helper->get_option('form_id') : (int) $_POST['form']; $form->send_activation_mail($form_id, sanitize_email($post['email']), $user_data); } else { $result['type'] = 'error'; if ('duplicate data' == $receiver_added) { $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_duplicate', esc_html__('It seems like you\'re already subscribed to our list.', 'cleverreach-extension'))); } else { $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_common', esc_html__('Sorry, there seems to be a problem with your data.', 'cleverreach-extension'))); } } // end of is_object() && 'SUCCESS' } else { $result['type'] = 'error'; $result['status'] = sanitize_text_field(apply_filters('cleverreach_extension_error_msg_invalid_email', esc_html__('Sorry, there seems to be a problem with your email address.', 'cleverreach-extension'))); } // end of is_email() // Finally return JSON result. $result = json_encode($result); echo $result; die; }