public static function send($senderId, $recipientId, $title, $question)
 {
     $title = trim($title);
     $question = trim($question);
     $errors = array();
     if (empty($senderId)) {
         $errors['sender'] = 'Invalid sender ID.';
     }
     if (empty($recipientId)) {
         $errors['recipient'] = 'Invalid recipient ID.';
     }
     if (empty($title)) {
         $errors['title'] = 'Title is required.';
     }
     if (empty($question)) {
         $errors['question'] = 'Question is required.';
     }
     if (!empty($errors)) {
         throw new Exception(serialize($errors));
     }
     if ($senderId == $recipientId) {
         $errors['recipient'] = 'You cannot send question to yourself.';
     }
     $sender = get_userdata($senderId);
     if (empty($sender)) {
         $errors['sender'] = 'Unknown sender.';
     }
     $recipient = get_userdata($recipientId);
     if (empty($recipient)) {
         $errors['recipient'] = 'Unknown recipient.';
     }
     if (!empty($errors)) {
         throw new Exception(serialize($errors));
     }
     $replace = array('[blogname]' => get_bloginfo('name'), '[username]' => strip_tags($sender->display_name), '[title]' => htmlspecialchars($title), '[question]' => htmlspecialchars($question));
     $to = sprintf('%s <%s>', $recipient->display_name, $recipient->user_email);
     $replyTo = sprintf('%s <%s>', $sender->display_name, $sender->user_email);
     CMA_Email::send($to, CMA_Settings::getOption(CMA_Settings::OPTION_PRIVATE_QUESTION_EMAIL_SUBJECT), CMA_Settings::getOption(CMA_Settings::OPTION_PRIVATE_QUESTION_EMAIL_TEMPLATE), $replace, array('Reply-To: ' . $replyTo));
     // 		return wp_mail($to, $subject, $template, array('Reply-To: '. $replyTo));
 }
 public function notifyAboutNewAnswer($lastAnswerId)
 {
     global $wpdb;
     $lastAnswer = CMA_Answer::getById($lastAnswerId);
     $receivers = array();
     // All users are receivers
     if (CMA_Settings::getOption(CMA_Settings::OPTION_NEW_ANSWER_NOTIFY_EVERYBODY_ENABLED) and !$lastAnswer->isPrivate()) {
         $users = $wpdb->get_results("SELECT ID, user_email FROM {$wpdb->users}", ARRAY_A);
         foreach ($users as $user) {
             if ($this->isVisible($user['ID'])) {
                 $receivers[] = $user['user_email'];
             }
         }
         unset($users);
     } else {
         // Users followers
         if (CMA_Settings::getOption(CMA_Settings::OPTION_ENABLE_THREAD_FOLLOWING)) {
             $followers = $this->getFollowersEngine()->getFollowers();
             if (!empty($followers)) {
                 foreach ($followers as $user_id) {
                     if ($user_id != $lastAnswer->getAuthorId() and $this->isVisible($user_id)) {
                         $user = get_userdata($user_id);
                         if (!empty($user->user_email)) {
                             $receivers[] = $user->user_email;
                         }
                     }
                 }
             }
             unset($followers);
         }
     }
     $receivers = apply_filters('cma_answer_notification_emails', $receivers, $lastAnswerId);
     if ($lastAnswer->isPrivate()) {
         if ($threadAuthor = $this->getAuthor()) {
             $receivers = array_intersect($receivers, array($threadAuthor->user_email));
         }
     }
     // Admin custom receivers' emails
     if (CMA_Settings::getOption(CMA_Settings::OPTION_NEW_ANSWER_ADMIN_NOTIFICATION_ENABLED)) {
         $receivers = array_merge($receivers, CMA_Settings::getOption(CMA_Settings::OPTION_POST_ADMIN_NOTIFICATION_EMAIL));
     }
     $receivers = array_filter(array_unique($receivers));
     if (!empty($receivers)) {
         $message = CMA_Settings::getOption(CMA_Settings::OPTION_THREAD_NOTIFICATION);
         $title = CMA_Settings::getOption(CMA_Settings::OPTION_THREAD_NOTIFICATION_TITLE);
         $replace = array('[blogname]' => get_bloginfo('name'), '[question_title]' => strip_tags($this->getTitle()), '[question_body]' => strip_tags($this->getContent()), '[answer]' => strip_tags($lastAnswer->getContent()), '[comment_link]' => $lastAnswer->getPermalink(), '[author]' => strip_tags($lastAnswer->getAuthor()->display_name), '[ip]' => $lastAnswer->getAuthorIP(), '[opt_out_url]' => CMA_ThreadNewsletter::getOptOutUrl($this, CMA_ThreadNewsletter::TYPE_THREAD));
         CMA_Email::send($receivers, $title, $message, $replace);
         /* $headers = array();
            foreach($receivers as $email) {
            	if (is_email($email)) {
            		$headers[] = ' Bcc: '. $email;
            	}
            }
            
            wp_mail(null, $title, $message, $headers); */
     }
 }
 public function sendNotifications()
 {
     $thread = $this->getThread();
     $receivers = array();
     // Admin notification emails
     if (CMA_Settings::getOption(CMA_Settings::OPTION_NEW_COMMENT_ADMIN_NOTIFICATION_ENABLED)) {
         $receivers = array_merge($receivers, CMA_Settings::getOption(CMA_Settings::OPTION_POST_ADMIN_NOTIFICATION_EMAIL));
     }
     // User subscribers email
     if (CMA_Settings::getOption(CMA_Settings::OPTION_ENABLE_THREAD_FOLLOWING) and CMA_Settings::getOption(CMA_Settings::OPTION_NEW_COMMENT_NOTIFICATION_ENABLED)) {
         $followers = $thread->getFollowersEngine()->getFollowers();
         if (!empty($followers)) {
             foreach ($followers as $user_id) {
                 if ($user_id != $this->getAuthorId() and $thread->isVisible($user_id)) {
                     $user = get_userdata($user_id);
                     if (!empty($user->user_email)) {
                         $receivers[] = $user->user_email;
                     }
                 }
             }
         }
     }
     $receivers = array_filter(array_unique($receivers));
     if (!empty($receivers)) {
         $replace = array('[blogname]' => get_bloginfo('name'), '[question_title]' => strip_tags($thread->getTitle()), '[question_body]' => strip_tags($thread->getContent()), '[comment_link]' => $this->getPermalink(), '[comment]' => strip_tags($this->getContent()), '[author]' => strip_tags($this->getAuthor()->display_name), '[opt_out_url]' => CMA_ThreadNewsletter::getOptOutUrl($this->getThread(), CMA_ThreadNewsletter::TYPE_THREAD));
         $subject = strtr(CMA_Settings::getOption(CMA_Settings::OPTION_NEW_COMMENT_NOTIFICATION_TITLE), $replace);
         $message = strtr(CMA_Settings::getOption(CMA_Settings::OPTION_NEW_COMMENT_NOTIFICATION_CONTENT), $replace);
         CMA_Email::send($receivers, $subject, $message);
         /* $headers = array();
            foreach($receivers as $email) {
            	$email = trim($email);
            	if (is_email($email)) {
            		$headers[] = ' Bcc: '. $email;
            	}
            }
            
            if (!empty($headers)) wp_mail(null, $subject, $message, $headers); */
     }
 }
 static function bestAnswerNotification(CMA_Thread $thread)
 {
     global $wpdb;
     $answer = $thread->getBestAnswer();
     $receivers = array();
     $receiversOption = CMA_Settings::getOption(CMA_Settings::OPTION_NOTIF_BEST_ANSWER_RECEIVERS);
     if (in_array(CMA_Settings::NOTIF_QUESTION_AUTHOR, $receiversOption)) {
         $receivers[] = $thread->getAuthorEmail();
     }
     if (in_array(CMA_Settings::NOTIF_ANSWER_AUTHOR, $receiversOption)) {
         $receivers[] = $answer->getAuthorEmail();
     }
     if (in_array(CMA_Settings::NOTIF_FOLLOWERS, $receiversOption)) {
         $receivers = array_merge($receivers, $thread->getFollowersEmails());
     }
     if (in_array(CMA_Settings::NOTIF_CONTRIBUTORS, $receiversOption)) {
         $receivers = array_merge($receivers, $thread->getContributorsEmails());
         $receivers[] = $thread->getAuthorEmail();
     }
     $receivers = array_filter(array_unique($receivers));
     if (!empty($receivers)) {
         $message = CMA_Settings::getOption(CMA_Settings::OPTION_NOTIF_BEST_ANSWER_CONTENT);
         $title = CMA_Settings::getOption(CMA_Settings::OPTION_NOTIF_BEST_ANSWER_TITLE);
         $replace = array('[blogname]' => get_bloginfo('name'), '[question_title]' => strip_tags($thread->getTitle()), '[question_body]' => strip_tags($thread->getContent()), '[question_author]' => strip_tags($thread->getAuthorName()), '[answer]' => strip_tags($answer->getContent()), '[answer_link]' => $answer->getPermalink(), '[answer_author]' => strip_tags($answer->getAuthorName()));
         CMA_Email::send($receivers, $title, $message, $replace);
     }
 }