Example #1
0
 /**
  * Process a subscribe form.
  *
  * @param MC4WP_Form $form
  * @param MC4WP_Request $request
  */
 public function process_subscribe_form(MC4WP_Form $form, MC4WP_Request $request)
 {
     $result = false;
     $mailchimp = new MC4WP_MailChimp();
     $email_type = $form->get_email_type();
     $data = $form->get_data();
     $client_ip = $request->get_client_ip();
     /** @var MC4WP_MailChimp_Subscriber $subscriber */
     $subscriber = null;
     /**
      * @ignore
      * @deprecated 4.0
      */
     $data = apply_filters('mc4wp_merge_vars', $data);
     /**
      * @ignore
      * @deprecated 4.0
      */
     $data = (array) apply_filters('mc4wp_form_merge_vars', $data, $form);
     // create a map of all lists with list-specific data
     $mapper = new MC4WP_List_Data_Mapper($data, $form->get_lists());
     /** @var MC4WP_MailChimp_Subscriber[] $map */
     $map = $mapper->map();
     // loop through lists
     foreach ($map as $list_id => $subscriber) {
         $subscriber->status = $form->settings['double_optin'] ? 'pending' : 'subscribed';
         $subscriber->email_type = $email_type;
         $subscriber->ip_signup = $client_ip;
         /**
          * Filters subscriber data before it is sent to MailChimp. Fires for both form & integration requests.
          *
          * @param MC4WP_MailChimp_Subscriber $subscriber
          */
         $subscriber = apply_filters('mc4wp_subscriber_data', $subscriber);
         /**
          * Filters subscriber data before it is sent to MailChimp. Only fires for form requests.
          *
          * @param MC4WP_MailChimp_Subscriber $subscriber
          */
         $subscriber = apply_filters('mc4wp_form_subscriber_data', $subscriber);
         // send a subscribe request to MailChimp for each list
         $result = $mailchimp->list_subscribe($list_id, $subscriber->email_address, $subscriber->to_array(), $form->settings['update_existing'], $form->settings['replace_interests']);
     }
     $log = $this->get_log();
     // do stuff on failure
     if (!is_object($result) || empty($result->id)) {
         $error_code = $mailchimp->get_error_code();
         $error_message = $mailchimp->get_error_message();
         if ($mailchimp->get_error_code() == 214) {
             $form->add_error('already_subscribed');
             $log->warning(sprintf("Form %d > %s is already subscribed to the selected list(s)", $form->ID, $data['EMAIL']));
         } else {
             $form->add_error('error');
             $log->error(sprintf('Form %d > MailChimp API error: %s %s', $form->ID, $error_code, $error_message));
             /**
              * Fire action hook so API errors can be hooked into.
              *
              * @param MC4WP_Form $form
              * @param string $error_message
              */
             do_action('mc4wp_form_api_error', $form, $error_message);
         }
         // bail
         return;
     }
     // Success! Did we update or newly subscribe?
     if ($result->status === 'subscribed' && $result->was_already_on_list) {
         $form->add_message('updated');
     } else {
         $form->add_message('subscribed');
     }
     $log->info(sprintf("Form %d > Successfully subscribed %s", $form->ID, $data['EMAIL']));
     /**
      * Fires right after a form was used to subscribe.
      *
      * @since 3.0
      *
      * @param MC4WP_Form $form Instance of the submitted form
      * @param string $email
      * @param array $data
      * @param MC4WP_MailChimp_Subscriber[] $subscriber
      */
     do_action('mc4wp_form_subscribed', $form, $subscriber->email_address, $data, $map);
 }
Example #2
0
 /**
  * @param MC4WP_Form $form
  *
  * @return false|int
  */
 public function log_form_request(MC4WP_Form $form)
 {
     $data = $form->data;
     unset($data['EMAIL']);
     return $this->add($form->data['EMAIL'], $form->config['lists'], $data, 'mc4wp-form', $form->ID, MC4WP_Request::create_from_globals()->get_referer());
 }