示例#1
0
 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;
 }