public function send(&$instance) { $params = $instance->form_params; if (isset($_POST['avia_generated_form' . $params['avia_formID']])) { $form_suffix = '_' . $params['avia_formID']; $suffix_length = strlen($form_suffix) * -1; $merge_fields = array(); $post_data = array(); $mail = ""; $status = !empty($params['double_opt_in']) ? "pending" : "subscribed"; // subscribed // pending foreach ($_POST as $key => $value) { $key = substr($key, 0, $suffix_length); $key = str_replace('avia_', '', $key); if (isset($_POST['ajax_mailchimp'])) { $value = urldecode($value); } $post_data[$key] = $value; } //make sure that the username is not filled in, otherwise a bot has sent the form. if so simply fake the send event if (!empty($post_data['username'])) { return true; } //iterate over form fields to generate the merge field data if (empty($this->fields)) { $all_fields = get_option('av_chimplist_field'); $this->fields = $all_fields[$params['mailchimp']]; } foreach ($this->fields as $field) { $value = !empty($post_data[$field->merge_id]) ? $post_data[$field->merge_id] : false; if ($value !== false) { if ($field->merge_id != 0) { $merge_fields[$field->tag] = $value; } else { $mail = $value; } } } $data_to_send = array('email_address' => $mail, 'status' => $status); if (!empty($merge_fields)) { $data_to_send['merge_fields'] = $merge_fields; } $data_to_send = apply_filters('avf_mailchimp_subscriber_data', $data_to_send, $this); $api = new av_mailchimp_api($this->api_key); $this->add_user = $api->post('lists/' . $params['mailchimp'] . '/members', $data_to_send); //user was successfully added if (isset($this->add_user->id)) { return true; } //if we got no id the user was not added which means we got an error. $error_key = "general"; if ($this->add_user->title == "Invalid Resource") { $error_key = 'all'; if (strpos($this->add_user->detail, 'email') !== false) { $error_key = 'email'; } if (strpos($this->add_user->detail, 'merge fields') !== false) { $error_key = 'invalid_field'; } } if ($this->add_user->title == "Member Exists") { $error_key = 'already'; } $instance->error_msg = "<div class='avia-mailchimp-ajax-error av-form-error-container'>" . $api->message($error_key) . "</div>"; add_action('wp_footer', array($this, 'print_js_error'), 2, 100000); } return false; }