orm::get_lists * @ignore */ $lists = (array) apply_filters( 'mc4wp_lists', $lists ); /** * Filters the Mailchimp lists this integration should subscribe to * * @since 3.0 * * @param array $lists * @param MC4WP_Integration $integration */ $lists = (array) apply_filters( 'mc4wp_integration_lists', $lists, $integration ); /** * Filters the Mailchimp lists a specific integration should subscribe to * * The dynamic portion of the hook, `$slug`, refers to the slug of the integration. * * @since 3.0 * * @param array $lists * @param MC4WP_Integration $integration */ $lists = (array) apply_filters( 'mc4wp_integration_' . $slug . '_lists', $lists, $integration ); return $lists; } /** * 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(); $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 = mc4wp_get_request_ip_address(); /** @ignore (documented elsewhere) */ $subscriber = apply_filters( 'mc4wp_subscriber_data', $subscriber ); if ( ! $subscriber instanceof MC4WP_MailChimp_Subscriber ) { continue; } /** * 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 ); if ( ! $subscriber instanceof MC4WP_MailChimp_Subscriber ) { continue; } /** * 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 ); if ( ! $subscriber instanceof MC4WP_MailChimp_Subscriber ) { continue; } $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 ( (int) $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; } /** * Are the required dependencies for this integration installed? * * @return bool */ public function is_installed() { return false; } /** * Which UI elements should we show on the settings page for this integration? * * @return array */ public function get_ui_elements() { return array_keys( $this->options ); } /** * Does integration have the given UI element? * * @param string $element * @return bool */ public function has_ui_element( $element ) { $elements = $this->get_ui_elements(); return in_array( $element, $elements, true ); } /** * Return a string to the admin settings page for this object (if any) * * @param int $object_id * @return string */ public function get_object_link( $object_id ) { return ''; } /** * Get the data for this integration request * * By default, this will return a combination of all $_GET and $_POST parameters. * Override this method if you need data from somewhere else. * * This data should contain the value of the checkbox (required) * and the lists to which should be subscribed (optional) * * @see MC4WP_Integration::$checkbox_name * @see MC4WP_Integration::get_lists * @see MC4WP_Integration::checkbox_was_checked * * @return array */ public function get_data() { $data = array_merge( (array) $_GET, (array) $_POST ); return $data; } /** * @return MC4WP_Debug_Log */ protected function get_log() { return mc4wp( 'log' ); } /** * @return MC4WP_API_V3 */ protected function get_api() { return mc4wp( 'api' ); } }