Пример #1
0
 /**
  * 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?
 }
Пример #3
0
 /**
  * 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);
     }
 }
Пример #4
0
 /**
  * @param Prompt_Interface_Subscribable $object
  * @param string $email
  * @param string $name
  * @return string
  */
 protected static function verify_new_subscriber($object, $email, $name)
 {
     $lists = $object ? $object : Prompt_Subscribing::get_signup_lists();
     $display_name = sanitize_text_field($name);
     $name_words = explode(' ', trim($name));
     $first_name = array_shift($name_words);
     $last_name = empty($name_words) ? '' : implode(' ', $name_words);
     $user_data = compact('first_name', 'last_name', 'display_name');
     Prompt_Subscription_Mailing::send_agreement($lists, $email, $user_data);
     $message = html('strong', __('Almost done - you\'ll receive an email with instructions to complete your subscription.', 'Postmatic'), ' ');
     /**
      * Filter the account created Ajax message.
      *
      * @param string $message
      * @param string $email
      * @param array $user_data
      */
     return apply_filters('prompt/ajax/subscription_verification_message', $message, $email, $user_data);
 }