/**
  * Makes a subscription request
  *
  * @param string $email
  * @param array $merge_vars
  * @param int $related_object_id
  * @return string|boolean
  */
 protected function subscribe($email, array $merge_vars = array(), $related_object_id = 0)
 {
     $integration = $this;
     $slug = $this->slug;
     /**
      * @var MC4WP_API $api
      */
     $api = mc4wp('api');
     $lists = $this->get_lists();
     $result = false;
     /**
      * Filters the final merge variables before the request is sent to MailChimp, for all integrations.
      *
      * @param array $merge_vars
      * @param MC4WP_Integration $integration
      */
     $merge_vars = (array) apply_filters('mc4wp_integration_merge_vars', $merge_vars, $integration);
     /**
      * Filters the final merge variables before the request is sent to MailChimp, for a specific integration.
      *
      * The dynamic portion of the hook, `$slug`, refers to the integration slug.
      *
      * @param array $merge_vars
      * @param MC4WP_Integration $integration
      */
     $merge_vars = (array) apply_filters('mc4wp_integration_' . $slug . '_merge_vars', $merge_vars, $integration);
     $email_type = mc4wp_get_email_type();
     // create field map
     $map = new MC4WP_Field_Map($merge_vars, $lists);
     foreach ($map->list_fields as $list_id => $list_field_data) {
         $result = $api->subscribe($list_id, $email, $list_field_data, $email_type, $this->options['double_optin'], $this->options['update_existing'], $this->options['replace_interests'], $this->options['send_welcome']);
     }
     // if result failed, show error message
     if (!$result && $api->has_error()) {
         error_log(sprintf('MailChimp for WordPres (%s): %s', $this->slug, $api->get_error_message()));
         return false;
     }
     /**
      * Runs right after someone is subscribed using an integration
      *
      * @since 3.0
      *
      * @param MC4WP_Integration $integration
      * @param string $email
      * @param array $merge_vars
      * @param int $related_object_id
      */
     do_action('mc4wp_integration_subscribed', $integration, $email, $merge_vars, $related_object_id);
     return $result;
 }
示例#2
0
 /**
  * Get "email_type" setting for new MailChimp subscribers added by this form.
  *
  * @return string
  */
 public function get_email_type()
 {
     $email_type = $this->config['email_type'];
     if (empty($email_type)) {
         $email_type = mc4wp_get_email_type();
     }
     return $email_type;
 }
 /**
  * Makes a subscription request
  *
  * @param string $email
  * @param array $merge_vars
  * @param int $related_object_id
  * @return string|boolean
  */
 protected function subscribe($email, array $merge_vars = array(), $related_object_id = 0)
 {
     $integration = $this;
     $slug = $this->slug;
     /**
      * @var MC4WP_API $api
      */
     $api = mc4wp('api');
     $lists = $this->get_lists();
     $result = false;
     // validate lists
     if (empty($lists)) {
         $this->get_log()->warning(sprintf('%s > No MailChimp lists were selected', $this->name));
         return false;
     }
     /**
      * Filters the final merge variables before the request is sent to MailChimp, for all integrations.
      *
      * @param array $merge_vars
      * @param MC4WP_Integration $integration
      */
     $merge_vars = (array) apply_filters('mc4wp_integration_merge_vars', $merge_vars, $integration);
     /**
      * Filters the final merge variables before the request is sent to MailChimp, for a specific integration.
      *
      * The dynamic portion of the hook, `$slug`, refers to the integration slug.
      *
      * @param array $merge_vars
      * @param MC4WP_Integration $integration
      */
     $merge_vars = (array) apply_filters('mc4wp_integration_' . $slug . '_merge_vars', $merge_vars, $integration);
     $email_type = mc4wp_get_email_type();
     // create field map
     $map = new MC4WP_Field_Map($merge_vars, $lists);
     foreach ($map->list_fields as $list_id => $list_field_data) {
         $result = $api->subscribe($list_id, $email, $list_field_data, $email_type, $this->options['double_optin'], $this->options['update_existing'], $this->options['replace_interests'], $this->options['send_welcome']);
     }
     // if result failed, show error message
     if (!$result) {
         // log error
         if ($api->get_error_code() === 214) {
             $this->get_log()->warning(sprintf("%s > %s is already subscribed to the selected list(s)", $this->name, $email));
         } else {
             $this->get_log()->error(sprintf('%s > MailChimp API Error: %s', $this->name, $api->get_error_message()));
         }
         // bail
         return false;
     }
     $this->get_log()->info(sprintf('%s > Successfully subscribed %s', $this->name, $email));
     /**
      * Runs right after someone is subscribed using an integration
      *
      * @since 3.0
      *
      * @param MC4WP_Integration $integration
      * @param string $email
      * @param array $merge_vars
      * @param int $related_object_id
      */
     do_action('mc4wp_integration_subscribed', $integration, $email, $merge_vars, $related_object_id);
     return $result;
 }
 /**
  * Makes a subscription request
  *
  * @param array $data
  * @param int $related_object_id
  *
  * @return boolean
  */
 protected function subscribe(array $data, $related_object_id = 0)
 {
     $integration = $this;
     $slug = $this->slug;
     $mailchimp = new MC4WP_MailChimp();
     $log = $this->get_log();
     $request = $this->get_request();
     $list_ids = $this->get_lists();
     /** @var MC4WP_MailChimp_Subscriber $subscriber */
     $subscriber = null;
     $result = false;
     // validate lists
     if (empty($list_ids)) {
         $log->warning(sprintf('%s > No MailChimp lists were selected', $this->name));
         return false;
     }
     /**
      * Filters data for integration requests.
      *
      * @param array $data
      */
     $data = apply_filters('mc4wp_integration_data', $data);
     /**
      * Filters data for a specific integration request.
      *
      * The dynamic portion of the hook, `$slug`, refers to the integration slug.
      *
      * @param array $data
      * @param int $related_object_id
      */
     $data = apply_filters("mc4wp_integration_{$slug}_data", $data, $related_object_id);
     /**
      * @ignore
      * @deprecated 4.0
      */
     $data = apply_filters('mc4wp_merge_vars', $data);
     /**
      * @deprecated 4.0
      * @ignore
      */
     $data = apply_filters('mc4wp_integration_merge_vars', $data, $integration);
     /**
      * @deprecated 4.0
      * @ignore
      */
     $data = apply_filters("mc4wp_integration_{$slug}_merge_vars", $data, $integration);
     $email_type = mc4wp_get_email_type();
     $mapper = new MC4WP_List_Data_Mapper($data, $list_ids);
     /** @var MC4WP_MailChimp_Subscriber[] $map */
     $map = $mapper->map();
     foreach ($map as $list_id => $subscriber) {
         $subscriber->status = $this->options['double_optin'] ? 'pending' : 'subscribed';
         $subscriber->email_type = $email_type;
         $subscriber->ip_signup = $request->get_client_ip();
         /** @ignore (documented elsewhere) */
         $subscriber = apply_filters('mc4wp_subscriber_data', $subscriber);
         /**
          * Filters subscriber data before it is sent to MailChimp. Only fires for integration requests.
          *
          * @param MC4WP_MailChimp_Subscriber $subscriber
          */
         $subscriber = apply_filters('mc4wp_integration_subscriber_data', $subscriber);
         /**
          * Filters subscriber data before it is sent to MailChimp. Only fires for integration requests.
          *
          * The dynamic portion of the hook, `$slug`, refers to the integration slug.
          *
          * @param MC4WP_MailChimp_Subscriber $subscriber
          * @param int $related_object_id
          */
         $subscriber = apply_filters("mc4wp_integration_{$slug}_subscriber_data", $subscriber, $related_object_id);
         $result = $mailchimp->list_subscribe($list_id, $subscriber->email_address, $subscriber->to_array(), $this->options['update_existing'], $this->options['replace_interests']);
     }
     // if result failed, show error message
     if (!$result) {
         // log error
         if ($mailchimp->get_error_code() == 214) {
             $log->warning(sprintf("%s > %s is already subscribed to the selected list(s)", $this->name, $subscriber->email_address));
         } else {
             $log->error(sprintf('%s > MailChimp API Error: %s', $this->name, $mailchimp->get_error_message()));
         }
         // bail
         return false;
     }
     $log->info(sprintf('%s > Successfully subscribed %s', $this->name, $subscriber->email_address));
     /**
      * Runs right after someone is subscribed using an integration
      *
      * @since 3.0
      *
      * @param MC4WP_Integration $integration
      * @param string $email_address
      * @param array $merge_vars
      * @param MC4WP_MailChimp_Subscriber[] $subscriber_data
      * @param int $related_object_id
      */
     do_action('mc4wp_integration_subscribed', $integration, $subscriber->email_address, $subscriber->merge_fields, $map, $related_object_id);
     return $result;
 }