/** * Subscribe an email address to a list. * * @since 1.0.0 * * @param array $subscriber_data { * User data fields, use any from @see wp_insert_user, most likely of interest: * * @type string $email_address Required. * @type string $first_name * @type string $last_name * @type string $display_name * } * @param Prompt_Interface_Subscribable $list Optional, default is site-wide new posts. * @return string The resulting status, one of: * Prompt_Api::INVALID_EMAIL * Prompt_Api::ALREADY_SUBSCRIBED * Prompt_Api::CONFIRMATION_SENT for existing user email addresses * Prompt_Api::OPT_IN_SENT for unrecognized email addresses */ public static function subscribe($subscriber_data, Prompt_Interface_Subscribable $list = null) { if (!is_array($subscriber_data)) { $subscriber_data = array('user_email' => $subscriber_data); } // Translate the friendlier email_address to user_email if (isset($subscriber_data['email_address'])) { $subscriber_data['user_email'] = $subscriber_data['email_address']; unset($subscriber_data['email_address']); } $subscriber_data['user_email'] = sanitize_email($subscriber_data['user_email']); $email_address = $subscriber_data['user_email']; if (!is_email($email_address)) { return self::INVALID_EMAIL; } $list = $list ? $list : new Prompt_Site(); $user = get_user_by('email', $email_address); if (!$user) { self::ensure_display_name($subscriber_data); Prompt_Subscription_Mailing::send_agreement($list, $email_address, $subscriber_data); return self::OPT_IN_SENT; } if ($list->is_subscribed($user->ID)) { return self::ALREADY_SUBSCRIBED; } $list->subscribe($user->ID); Prompt_Subscription_Mailing::send_subscription_notification($user->ID, $list); return self::CONFIRMATION_SENT; }
public function execute() { if (!$this->validate()) { return; } $comment_id = $this->keys[0]; $comment = get_comment($comment_id); if (!$comment) { Prompt_Logging::add_error('register_subscribe_comment_invalid', __('Couldn\'t find the original registration information for a new user.', 'Postmatic'), array('keys' => $this->keys, 'message' => $this->message)); return; } $lists = $this->resolve_lists($comment); $user_data = get_comment_meta($comment_id, self::$user_data_meta_key, true); $email = $comment->comment_author_email; $subscriber = get_user_by('email', $email); $opted_in_list = $this->opted_in_list($lists); if (!$subscriber and !$opted_in_list) { if (self::stop_resending($comment)) { return; } Prompt_Subscription_Mailing::send_agreement($lists, $email, $user_data, $resend_command = $this); return; } if (!$opted_in_list) { // The user has already been created, probably via a different reply. Just ignore this nonsense reply. return; } $subscriber_id = $subscriber ? $subscriber->ID : Prompt_User_Handling::create_from_email($email); if (is_wp_error($subscriber_id)) { Prompt_Logging::add_error('register_subscribe_user_creation_failure', __('Failed to create a new user from an agreement reply email.', 'Postmatic'), array('keys' => $this->keys, 'user_data' => $user_data, 'message' => $this->message, 'error' => $subscriber_id)); return; } if (!$subscriber and $user_data) { $user_data['ID'] = $subscriber_id; wp_update_user($user_data); $origin = new Prompt_Subscriber_Origin(array('source_label' => $opted_in_list->subscription_object_label(), 'source_url' => $opted_in_list->subscription_url(), 'agreement' => $this->message)); $prompt_user = new Prompt_User($subscriber_id); $prompt_user->set_subscriber_origin($origin); do_action('prompt/register_subscribe_command/created_user', $prompt_user->get_wp_user()); } if (!$opted_in_list->is_subscribed($subscriber_id)) { $opted_in_list->subscribe($subscriber_id); Prompt_Subscription_Mailing::send_subscription_notification($subscriber_id, $opted_in_list); } // TODO: remove our pre registration comment? }
/** * Subscribe a commenter. * * @param object $comment */ public static function subscribe_commenter($comment) { $user_id = $comment->user_id; if (!$user_id) { $user = get_user_by('email', $comment->comment_author_email); $user_id = $user ? $user->ID : null; } $prompt_post = new Prompt_Post($comment->comment_post_ID); if (!$user_id) { $user_data = array('display_name' => $comment->comment_author, 'user_url' => $comment->comment_author_url); Prompt_Subscription_Mailing::send_agreement($prompt_post, $comment->comment_author_email, $user_data); return; } if (!$prompt_post->is_subscribed($user_id)) { $prompt_post->subscribe($user_id); Prompt_Subscription_Mailing::send_subscription_notification($user_id, $prompt_post); } }
/** * Subscribe the user to comments on the post. * @since 1.0.0 * @param bool $notify Whether to send a subscription notification to the user */ protected function subscribe($notify = false) { $prompt_post = new Prompt_Post($this->post_id); if ($prompt_post->is_subscribed($this->user_id)) { return; } if (Prompt_Core::$options->get('auto_subscribe_authors') and $this->user_id == $prompt_post->get_wp_post()->post_author) { return; } $prompt_post->subscribe($this->user_id); if ($notify) { Prompt_Subscription_Mailing::send_subscription_notification($this->user_id, $prompt_post); } }
/** * @param Prompt_Interface_Subscribable|Prompt_Interface_Subscribable[] $lists * @param WP_User $subscriber * @return string Response */ protected static function subscribe($lists, $subscriber) { $lists = is_array($lists) ? $lists : array($lists); foreach ($lists as $list) { $list->subscribe($subscriber->ID); Prompt_Subscription_Mailing::send_subscription_notification($subscriber->ID, $list); } return __('<strong>Confirmation email sent. Please check your email for further instructions.</strong>', 'Postmatic'); }