/** * 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; }
/** * 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; }