芝麻web文件管理V1.00
编辑当前文件:/home/freeclou/optimyar/wp-content/plugins/wpdiscuz/utils/class.WpdiscuzHelperEmail.php
options = $options; $this->dbManager = $dbManager; $this->helper = $helper; add_action("init", [&$this, "addSubscriptionRewriteRule"]); add_action("wp_ajax_wpdAddSubscription", [&$this, "addSubscription"]); add_action("wp_ajax_nopriv_wpdAddSubscription", [&$this, "addSubscription"]); add_action("wp_ajax_wpdCheckNotificationType", [&$this, "checkNotificationType"]); add_action("wp_ajax_nopriv_wpdCheckNotificationType", [&$this, "checkNotificationType"]); add_action("comment_post", [&$this, "notificationFromDashboard"], 10, 2); add_filter("template_include", [&$this, "subscriptionRequestsActions"]); add_filter("query_vars", [&$this, "addQueryVars"]); } public function addSubscriptionRewriteRule() { $rules = get_option("rewrite_rules", []); $regex = "wpdiscuzsubscription/([a-z0-9-]+)[/]?$"; add_rewrite_rule($regex, 'index.php?wpdiscuzsubscription=$matches[1]', "top"); if (!isset($rules[$regex])) { flush_rewrite_rules(); } } public function addQueryVars($query_vars) { if (!in_array("wpdiscuzsubscription", $query_vars)) { $query_vars[] = "wpdiscuzsubscription"; } return $query_vars; } public function subscriptionRequestsActions($template) { global $wpDiscuzSubscriptionMessage; $wpDiscuzSubscriptionMessage = ""; $action = get_query_var("wpdiscuzsubscription"); if (!$action) { return $template; } if ($action === "confirm" && isset($_GET["wpdiscuzConfirmID"]) && isset($_GET["wpdiscuzConfirmKey"]) && isset($_GET["wpDiscuzComfirm"])) { $this->dbManager->notificationConfirm(sanitize_text_field($_GET["wpdiscuzConfirmID"]), sanitize_text_field($_GET["wpdiscuzConfirmKey"])); $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_comfirm_success_message"); } else if ($action === "unsubscribe" && isset($_GET["wpdiscuzSubscribeID"]) && isset($_GET["key"])) { $this->dbManager->unsubscribe(sanitize_text_field($_GET["wpdiscuzSubscribeID"]), sanitize_text_field($_GET["key"])); $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_unsubscribe_message"); } else if ($action === "deletecomments" && isset($_GET["key"])) { $decodedEmail = get_transient(self::TRS_USER_HASH . trim(sanitize_text_field($_GET["key"]))); if ($decodedEmail) { $comments = get_comments(["author_email" => $decodedEmail, "status" => "all", "fields" => "ids"]); if ($comments) { foreach ($comments as $k => $cid) { wp_delete_comment($cid, true); } } $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_comments_are_deleted"); } } else if ($action === "deletesubscriptions" && isset($_GET["key"])) { $decodedEmail = get_transient(self::TRS_USER_HASH . trim(sanitize_text_field($_GET["key"]))); if ($decodedEmail) { $this->dbManager->unsubscribeByEmail($decodedEmail); } $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_cancel_subs_success"); } else if ($action === "deletefollows" && isset($_GET["key"])) { $decodedEmail = get_transient(self::TRS_USER_HASH . trim(sanitize_text_field($_GET["key"]))); if ($decodedEmail) { $this->dbManager->unfollowByEmail($decodedEmail); } $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_cancel_follows_success"); } else if ($action === "follow") { if (isset($_GET["wpdiscuzFollowID"]) && isset($_GET["wpdiscuzFollowKey"]) && isset($_GET["wpDiscuzComfirm"])) { if ($_GET["wpDiscuzComfirm"]) { $this->dbManager->confirmFollow(sanitize_text_field($_GET["wpdiscuzFollowID"]), sanitize_text_field($_GET["wpdiscuzFollowKey"])); $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_follow_confirm_success"); } else { $this->dbManager->cancelFollow(sanitize_text_field($_GET["wpdiscuzFollowID"]), sanitize_text_field($_GET["wpdiscuzFollowKey"])); $wpDiscuzSubscriptionMessage = $this->options->getPhrase("wc_follow_cancel_success"); } } } else if ($action === "bulkmanagement") { $wpDiscuzSubscriptionMessage = esc_html__("Something is wrong.", "wpdiscuz"); if ($this->emailDeleteLinks()) { $wpDiscuzSubscriptionMessage = esc_html__("Email sent successfully.", "wpdiscuz"); } } else { return $template; } return apply_filters("wpdiscuz_subscription_template_path", WPDISCUZ_DIR_PATH . "/themes/unsubscription.php", $wpDiscuzSubscriptionMessage); } private function sendBulkManagementEmail() { $this->helper->validateNonce(); $currentUser = WpdiscuzHelper::getCurrentUser(); if ($currentUser->exists()) { $currentUserEmail = $currentUser->user_email; if ($currentUserEmail) { $siteUrl = home_url(); $blogTitle = html_entity_decode(get_option("blogname"), ENT_QUOTES); $hashValue = $this->generateUserActionHash($currentUserEmail); $deleteCommentsUrl = $siteUrl . "/wpdiscuzsubscription/deletecomments/?key=$hashValue"; $unsubscribeUrl = $siteUrl . "/wpdiscuzsubscription/deletesubscriptions/?key=$hashValue"; $unfollowUrl = $siteUrl . "/wpdiscuzsubscription/deletefollows/?key=$hashValue"; $subject = $this->options->getPhrase("wc_user_settings_delete_links"); $message = str_replace(["[SITE_URL]", "[BLOG_TITLE]", "[DELETE_COMMENTS_URL]"], [ $siteUrl, $blogTitle, $deleteCommentsUrl ], $this->options->getPhrase("wc_user_settings_delete_all_comments_message")); $message .= $this->options->getPhrase("wc_user_settings_delete_all_subscriptions_message"); if (strpos($message, "[DELETE_SUBSCRIPTIONS_URL]") !== false) { $message = str_replace("[DELETE_SUBSCRIPTIONS_URL]", $unsubscribeUrl, $message); } $message .= $this->options->getPhrase("wc_user_settings_delete_all_follows_message"); if (strpos($message, "[DELETE_FOLLOWS_URL]") !== false) { $message = str_replace("[DELETE_FOLLOWS_URL]", $unfollowUrl, $message); } $this->userActionMail($currentUserEmail, $subject, $message); } } } public function emailDeleteLinksAction() { $this->emailDeleteLinks(); wp_die(); } private function emailDeleteLinks() { $this->helper->validateNonce(); $currentUser = WpdiscuzHelper::getCurrentUser(); $currentUserEmail = ""; $isGuest = true; if ($currentUser->exists()) { $currentUserEmail = $currentUser->user_email; $isGuest = false; } else { $currentUserEmail = isset($_COOKIE["comment_author_email_" . COOKIEHASH]) ? $_COOKIE["comment_author_email_" . COOKIEHASH] : ""; } if ($currentUserEmail) { $siteUrl = site_url(); $blogTitle = html_entity_decode(get_option("blogname"), ENT_QUOTES); $hashValue = $this->generateUserActionHash($currentUserEmail); $deleteCommentsUrl = $siteUrl . "/wpdiscuzsubscription/deletecomments/?key=$hashValue"; $unsubscribeUrl = $siteUrl . "/wpdiscuzsubscription/deletesubscriptions/?key=$hashValue"; $unfollowUrl = $siteUrl . "/wpdiscuzsubscription/deletefollows/?key=$hashValue"; $subject = $this->options->getPhrase("wc_user_settings_delete_links"); $message = str_replace(["[SITE_URL]", "[BLOG_TITLE]", "[DELETE_COMMENTS_URL]"], [ $siteUrl, $blogTitle, $deleteCommentsUrl ], $this->options->getPhrase("wc_user_settings_delete_all_comments_message")); $message .= $this->options->getPhrase("wc_user_settings_delete_all_subscriptions_message"); if (strpos($message, "[DELETE_SUBSCRIPTIONS_URL]") !== false) { $message = str_replace("[DELETE_SUBSCRIPTIONS_URL]", $unsubscribeUrl, $message); } if (!$isGuest) { $message .= $this->options->getPhrase("wc_user_settings_delete_all_follows_message"); } if (strpos($message, "[DELETE_FOLLOWS_URL]") !== false) { $message = str_replace("[DELETE_FOLLOWS_URL]", $unfollowUrl, $message); } return $this->userActionMail($currentUserEmail, $subject, $message); } return false; } public function userActionMail($email, $subject, $message) { $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); return wp_mail($email, $subject, do_shortcode($message), $headers); } public function generateUserActionHash($email) { $hashedEmail = hash_hmac("sha256", $email, get_option(self::OPTION_SLUG_HASH_KEY)); $hashKey = self::TRS_USER_HASH . $hashedEmail; $hashExpire = apply_filters("wpdiscuz_delete_all_content", 3 * DAY_IN_SECONDS); set_transient($hashKey, $email, $hashExpire); return $hashedEmail; } public function addSubscription() { $success = 0; $currentUser = WpdiscuzHelper::getCurrentUser(); $subscribeFormNonce = WpdiscuzHelper::sanitize(INPUT_POST, "wpdiscuz_subscribe_form_nonce", "FILTER_SANITIZE_STRING"); $subscriptionType = WpdiscuzHelper::sanitize(INPUT_POST, "wpdiscuzSubscriptionType", "FILTER_SANITIZE_STRING"); $postId = WpdiscuzHelper::sanitize(INPUT_POST, "postId", FILTER_SANITIZE_NUMBER_INT); $showSubscriptionBarAgreement = WpdiscuzHelper::sanitize(INPUT_POST, "show_subscription_agreement", FILTER_SANITIZE_NUMBER_INT); $form = wpDiscuz()->wpdiscuzForm->getForm($postId); if ($currentUser && $currentUser->ID) { $email = $currentUser->user_email; } else { $email = WpdiscuzHelper::sanitize(INPUT_POST, "wpdiscuzSubscriptionEmail", "FILTER_SANITIZE_STRING"); } if (!$currentUser->exists() && $form->isShowSubscriptionBarAgreement() && !$showSubscriptionBarAgreement && ($subscriptionType === WpdiscuzCore::SUBSCRIPTION_POST || $subscriptionType === WpdiscuzCore::SUBSCRIPTION_ALL_COMMENT)) { $email = ""; } $addSubscription = apply_filters("wpdiscuz_before_subscription_added", true); if ($addSubscription && wp_verify_nonce($subscribeFormNonce, "wpdiscuz_subscribe_form_nonce_action") && $email && filter_var($email, FILTER_VALIDATE_EMAIL) !== false && in_array($subscriptionType, [ self::SUBSCRIPTION_POST, self::SUBSCRIPTION_ALL_COMMENT ]) && $postId) { $noNeedMemberConfirm = ($currentUser->ID && !$this->options->subscription["enableMemberConfirm"]); $noNeedGuestsConfirm = (!$currentUser->ID && !$this->options->subscription["enableGuestsConfirm"]); if ($noNeedMemberConfirm || $noNeedGuestsConfirm) { $confirmData = $this->dbManager->addEmailNotification($postId, $postId, $email, $subscriptionType, 1); if ($confirmData) { $success = 1; } } else { $confirmData = $this->dbManager->hasSubscription($postId, $email); if ($confirmData && !intval($confirmData["confirm"])) { $success = $this->confirmEmailSender($confirmData["id"], $confirmData["activation_key"], $postId, $email) ? 1 : -1; } else { $confirmData = $this->dbManager->addEmailNotification($postId, $postId, $email, $subscriptionType, 0); if ($confirmData) { $success = $this->confirmEmailSender($confirmData["id"], $confirmData["activation_key"], $postId, $email) ? 1 : -1; if ($success < 0) { $this->dbManager->unsubscribe($confirmData["id"], $confirmData["activation_key"]); } } } } } if ($success == -1) { wp_send_json_error(esc_html($this->options->getPhrase("wc_unable_sent_email"))); } else if ($success == 0) { wp_send_json_error(esc_html($this->options->getPhrase("wc_subscription_fault"))); } else { $noNeedMemberConfirm = ($currentUser->ID && !$this->options->subscription["enableMemberConfirm"]); $noNeedGuestsConfirm = (!$currentUser->ID && !$this->options->subscription["enableGuestsConfirm"]); if ($noNeedMemberConfirm || $noNeedGuestsConfirm) { wp_send_json_success(esc_html($this->options->getPhrase("wc_subscribe_message"))); } else { wp_send_json_success(esc_html($this->options->getPhrase("wc_confirm_email"))); } } } public function confirmEmailSender($id, $activationKey, $postId, $email) { $confirm_url = $this->dbManager->confirmLink($id, $activationKey, $postId); $unsubscribe_url = $this->dbManager->unsubscribeLink($postId, $email); $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($postId); $search = ["[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]"]; $replace = [$siteUrl, get_permalink($postId), $blogTitle, $postTitle]; $subject = $this->options->subscription["emailSubjectSubscriptionConfirmation"]; $message = wpautop($this->options->subscription["emailContentSubscriptionConfirmation"]); $subject = apply_filters("wpdiscuz_confirm_email_subject_pre_replace", $subject, $postId, $email); $message = apply_filters("wpdiscuz_confirm_email_content_pre_replace", $message, $postId, $email); $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]"], [$blogTitle, $postTitle], $subject); $message = str_replace($search, $replace, $message); if (strpos($message, "[CONFIRM_URL]") === false) { $message .= "
" . $this->options->getPhrase("wc_confirm_email") . "
"; } else { $message = str_replace("[CONFIRM_URL]", $confirm_url, $message); } if (strpos($message, "[CANCEL_URL]") === false) { $message .= "
" . $this->options->getPhrase("wc_ignore_subscription") . "
"; } else { $message = str_replace("[CANCEL_URL]", $unsubscribe_url, $message); } $subject = apply_filters("wpdiscuz_confirm_email_subject", $subject, $postId, $email); $message = apply_filters("wpdiscuz_confirm_email_content", $message, $postId, $email); $headers = []; $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); return wp_mail($email, $subject, do_shortcode($message), $headers); } /** * send email */ public function emailSender($emailData, $commentId, $subject, $message, $subscriptionType) { global $wp_rewrite; $comment = get_comment($commentId); $post = get_post($comment->comment_post_ID); $postAuthor = get_userdata($post->post_author); if (!apply_filters("wpdiscuz_email_notification", true, $emailData, $comment, $subscriptionType)) { return; } if ($emailData["email"] === $postAuthor->user_email && ((get_option("moderation_notify") && $comment->comment_approved !== "1") || (get_option("comments_notify") && $comment->comment_approved === "1"))) { return; } $unsubscribeUrl = site_url('/wpdiscuzsubscription/unsubscribe/'); $unsubscribeUrl .= "?wpdiscuzSubscribeID=" . $emailData["id"] . "&key=" . $emailData["activation_key"]; $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($comment->comment_post_ID); if ($subscriptionType === self::SUBSCRIPTION_COMMENT) { $parentComment = get_comment($comment->comment_parent); $subscriber = $parentComment && $parentComment->comment_author ? $parentComment->comment_author : $this->options->getPhrase("wc_anonymous"); } else { $user = get_user_by("email", $emailData["email"]); $subscriber = $user && $user->display_name ? $user->display_name : ""; } $subject = apply_filters("wpdiscuz_email_subject_pre_replace", $subject, $comment, $emailData); $message = apply_filters("wpdiscuz_email_content_pre_replace", $message, $comment, $emailData); $commentAuthor = $comment->comment_author ? $comment->comment_author : $this->options->getPhrase("wc_anonymous"); $search = [ "[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]", "[SUBSCRIBER_NAME]", "[COMMENT_URL]", "[COMMENT_AUTHOR]", "[COMMENT_CONTENT]" ]; $replace = [ $siteUrl, urldecode_deep(get_permalink($comment->comment_post_ID)), $blogTitle, $postTitle, $subscriber, urldecode_deep(get_comment_link($commentId)), $commentAuthor, wpautop($comment->comment_content) ]; $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]", "[COMMENT_AUTHOR]"], [ $blogTitle, $postTitle, $commentAuthor ], $subject); $message = str_replace($search, $replace, $message); if (strpos($message, "[UNSUBSCRIBE_URL]") === false) { $message .= "
" . $this->options->getPhrase("wc_unsubscribe") . "
"; } else { $message = str_replace("[UNSUBSCRIBE_URL]", $unsubscribeUrl, $message); } $subject = apply_filters("wpdiscuz_email_subject", $subject, $comment, $emailData); $message = apply_filters("wpdiscuz_email_content", $message, $comment, $emailData); $headers = []; $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); wp_mail($emailData["email"], $subject, do_shortcode($message), $headers); } /** * Check notification type and send email to post new comments subscribers */ public function checkNotificationType() { $postId = WpdiscuzHelper::sanitize(INPUT_POST, "postId", FILTER_SANITIZE_NUMBER_INT, 0);; $commentId = WpdiscuzHelper::sanitize(INPUT_POST, "comment_id", FILTER_SANITIZE_NUMBER_INT, 0); $email = isset($_POST["email"]) ? sanitize_email(trim($_POST["email"])) : ""; $isParent = WpdiscuzHelper::sanitize(INPUT_POST, "isParent", "FILTER_SANITIZE_STRING"); $currentUser = WpdiscuzHelper::getCurrentUser(); if ($currentUser && $currentUser->user_email) { $email = $currentUser->user_email; } if ($commentId && $email && $postId && ($comment = get_comment($commentId))) { if (apply_filters("wpdiscuz_enable_user_mentioning", $this->options->subscription["enableUserMentioning"]) && $this->options->subscription["sendMailToMentionedUsers"] && ($mentionedUsers = $this->helper->getMentionedUsers($comment->comment_content))) { $this->sendMailToMentionedUsers($mentionedUsers, $comment); } do_action("wpdiscuz_before_sending_emails", $commentId, $comment); $this->notifyPostSubscribers($postId, $commentId, $email); $this->notifyFollowers($postId, $commentId, $email); if (!$isParent) { $parentCommentId = $comment->comment_parent; $parentComment = get_comment($parentCommentId); $parentCommentEmail = $parentComment->comment_author_email; $this->notifyAllCommentSubscribers($postId, $commentId, $email); if ($parentCommentEmail !== $email) { $this->notifyCommentSubscribers($parentCommentId, $comment->comment_ID, $email); } } } wp_die(); } /** * Send notifications for new comments on the post (including replies) * * @param $postId int * @param $commentId int * @param $email string */ public function notifyPostSubscribers($postId, $commentId, $email) { $emailsArray = $this->dbManager->getPostNewCommentNotification($postId, $email); $subject = $this->options->subscription["emailSubjectPostComment"]; $message = wpautop($this->options->subscription["emailContentPostComment"]); if (!$emailsArray || !is_array($emailsArray)) { return; } foreach ($emailsArray as $k => $eRow) { $subscriberUserId = $eRow["id"]; $subscriberEmail = $eRow["email"]; $this->emailSender($eRow, $commentId, $subject, $message, self::SUBSCRIPTION_POST); do_action("wpdiscuz_notify_post_subscribers", $postId, $commentId, $subscriberUserId, $subscriberEmail); } } /** * Send notifications for new comments on the post (including replies) * * @param $postId int * @param $newCommentId int * @param $email string */ public function notifyAllCommentSubscribers($postId, $newCommentId, $email) { $emailsArray = $this->dbManager->getAllNewCommentNotification($postId, $email); $subject = $this->options->subscription["emailSubjectAllCommentReply"]; $message = wpautop($this->options->subscription["emailContentAllCommentReply"]); if (!$emailsArray || !is_array($emailsArray)) { return; } $helperOptimization = wpDiscuzHelperOptimization(); foreach ($emailsArray as $k => $eRow) { $subscriberUserId = $eRow["id"]; $subscriberEmail = $eRow["email"]; $args = [ "post_id" => $postId, "status" => "approve", "author_email" => $subscriberEmail, "fields" => "ids", ]; /** * @var $subscriberComments WP_Comment[] */ $subscriberComments = get_comments($args); if (!$subscriberComments || !is_array($subscriberComments)) { continue; } $tree = []; $tree = $helperOptimization->getCommentParentsTree($newCommentId, $tree); $tree = array_diff($tree, [$newCommentId]); $hasReplies = array_intersect($subscriberComments, $tree); if (empty($hasReplies)) { continue; } $this->emailSender($eRow, $newCommentId, $subject, $message, self::SUBSCRIPTION_ALL_COMMENT); do_action("wpdiscuz_notify_all_comment_subscribers", $postId, $newCommentId, $subscriberUserId, $subscriberEmail); } } /** * Send notifications for new replies to an individual comment * (includes all replies) * * @param $parentCommentId int * @param $newCommentId int * @param $email string email address to exclude (the comment author email) */ public function notifyCommentSubscribers($parentCommentId, $newCommentId, $email) { $emailsArray = $this->dbManager->getNewReplyNotification($parentCommentId, $email); $subject = $this->options->subscription["emailSubjectCommentReply"]; $message = wpautop($this->options->subscription["emailContentCommentReply"]); if (!$emailsArray || !is_array($emailsArray)) { return; } foreach ($emailsArray as $k => $eRow) { $subscriberUserId = $eRow["id"]; $subscriberEmail = $eRow["email"]; $this->emailSender($eRow, $newCommentId, $subject, $message, self::SUBSCRIPTION_COMMENT); do_action("wpdiscuz_notify_comment_subscribers", $parentCommentId, $newCommentId, $subscriberUserId, $subscriberEmail); } } /** * When a comment is approved from the admin comments.php or posts.php... notify the subscribers * * @param $commentId int * @param $approved bool */ public function notificationFromDashboard($commentId, $approved) { $wpdiscuz = wpDiscuz(); $referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : ""; $comment = get_comment($commentId); $commentsPage = strpos($referer, "edit-comments.php") !== false; $postCommentsPage = (strpos($referer, "post.php") !== false) && (strpos($referer, "action=edit") !== false); $isLoadWpdiscuz = false; $post = get_post($comment->comment_post_ID); if ($post && is_object($post)) { $form = $wpdiscuz->wpdiscuzForm->getForm($post->ID); $isLoadWpdiscuz = $form->getFormID() && (comments_open($post) || $post->comment_count) && post_type_supports($post->post_type, "comments"); } if ($approved == 1 && ($commentsPage || $postCommentsPage) && $comment && $isLoadWpdiscuz) { $postId = $comment->comment_post_ID; $email = $comment->comment_author_email; $parentComment = $comment->comment_parent ? get_comment($comment->comment_parent) : 0; if (apply_filters("wpdiscuz_enable_user_mentioning", $this->options->subscription["enableUserMentioning"]) && $this->options->subscription["sendMailToMentionedUsers"] && ($mentionedUsers = $this->helper->getMentionedUsers($comment->comment_content))) { $this->sendMailToMentionedUsers($mentionedUsers, $comment); } do_action("wpdiscuz_before_sending_emails", $commentId, $comment); $this->notifyPostSubscribers($postId, $commentId, $email); if ($parentComment) { $parentCommentEmail = $parentComment->comment_author_email; $this->notifyAllCommentSubscribers($postId, $commentId, $email); if ($parentCommentEmail !== $email) { $this->notifyCommentSubscribers($parentComment->comment_ID, $commentId, $email); } } } } /** * When a comment is approved (after being held for moderation)... notify the author * * @param $comment WP_Comment */ public function notifyOnApproving($comment) { if ($comment) { $wpdiscuz = wpDiscuz(); $isLoadWpdiscuz = false; $post = get_post($comment->comment_post_ID); $postId = $comment->comment_post_ID; if ($post && is_object($post)) { $postId = $post->ID; $form = $wpdiscuz->wpdiscuzForm->getForm($post->ID); $isLoadWpdiscuz = $form->getFormID() && (comments_open($post) || $post->comment_count) && post_type_supports($post->post_type, "comments"); } if ($isLoadWpdiscuz) { $user = $comment->user_id ? get_userdata($comment->user_id) : null; if ($user) { $email = $user->user_email; } else { $email = $comment->comment_author_email; } if (apply_filters("wpdiscuz_send_email_on_approving", true, $email, $comment)) { $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($comment->comment_post_ID); $search = [ "[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]", "[COMMENT_URL]", "[COMMENT_AUTHOR]", "[COMMENT_CONTENT]" ]; $replace = [ $siteUrl, urldecode_deep(get_permalink($comment->comment_post_ID)), $blogTitle, $postTitle, urldecode_deep(get_comment_link($comment->comment_ID)), $comment->comment_author, wpautop($comment->comment_content) ]; $subject = $this->options->subscription["emailSubjectCommentApproved"]; $message = wpautop($this->options->subscription["emailContentCommentApproved"]); $subject = apply_filters("wpdiscuz_comment_approved_email_subject_pre_replace", $subject, $postId, $email); $message = apply_filters("wpdiscuz_comment_approved_email_content_pre_replace", $message, $postId, $email); $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]", "[COMMENT_AUTHOR]"], [ $blogTitle, $postTitle, $comment->comment_author ], $subject); $message = str_replace($search, $replace, $message); $subject = apply_filters("wpdiscuz_comment_approved_email_subject", $subject, $postId, $email); $message = apply_filters("wpdiscuz_comment_approved_email_content", $message, $postId, $email); $headers = []; $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); wp_mail($email, $subject, do_shortcode($message), $headers); } } } } public function followConfirmEmail($postId, $id, $key, $email) { $confirmUrl = $this->dbManager->followConfirmLink($id, $key); $cancelUrl = $this->dbManager->followCancelLink($id, $key); $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($postId); $search = ["[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]"]; $replace = [$siteUrl, urldecode_deep(get_permalink($postId)), $blogTitle, $postTitle]; $subject = $this->options->subscription["emailSubjectFollowConfirmation"]; $message = wpautop($this->options->subscription["emailContentFollowConfirmation"]); $subject = apply_filters("wpdiscuz_follow_confirm_email_subject_pre_replace", $subject, $postId, $email); $message = apply_filters("wpdiscuz_follow_confirm_email_content_pre_replace", $message, $postId, $email); $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]"], [$blogTitle, $postTitle], $subject); $message = str_replace($search, $replace, $message); if (strpos($message, "[CONFIRM_URL]") === false) { $message .= "
" . $this->options->getPhrase("wc_follow_confirm") . "
"; } else { $message = str_replace("[CONFIRM_URL]", $confirmUrl, $message); } if (strpos($message, "[CANCEL_URL]") === false) { $message .= "
" . $this->options->getPhrase("wc_follow_cancel") . "
"; } else { $message = str_replace("[CANCEL_URL]", $cancelUrl, $message); } $subject = apply_filters("wpdiscuz_follow_confirm_email_subject", $subject, $postId, $email); $message = apply_filters("wpdiscuz_follow_confirm_email_content", $message, $postId, $email); $headers = []; $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); return wp_mail($email, $subject, do_shortcode($message), $headers); } public function notifyFollowers($postId, $commentId, $email) { $followersData = $this->dbManager->getUserFollowers($email); $comment = get_comment($commentId); $post = get_post($comment->comment_post_ID); $postAuthor = get_userdata($post->post_author); $moderationNotify = get_option("moderation_notify"); $commentsNotify = get_option("comments_notify"); $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($post); $postUrl = urldecode_deep(get_permalink($post)); $commentUrl = urldecode_deep(get_comment_link($comment)); $subject = $this->options->subscription["emailSubjectFollowComment"]; $message = wpautop($this->options->subscription["emailContentFollowComment"]); $subject = apply_filters("wpdiscuz_follow_email_subject_pre_replace", $subject, $postId, $email); $message = apply_filters("wpdiscuz_follow_email_content_pre_replace", $message, $postId, $email); $search = ["[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]", "[COMMENT_URL]", "[COMMENT_CONTENT]"]; $replace = [$siteUrl, $postUrl, $blogTitle, $postTitle, $commentUrl, wpautop($comment->comment_content)]; $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]"], [$blogTitle, $postTitle], $subject); $message = str_replace($search, $replace, $message); $subject = apply_filters("wpdiscuz_follow_email_subject", $subject, $postId, $email); $message = apply_filters("wpdiscuz_follow_email_content", $message, $postId, $email); $fromName = html_entity_decode($blogTitle, ENT_QUOTES); $parsedUrl = parse_url($siteUrl); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $data = [ "site_url" => $siteUrl, "blog_title" => $blogTitle, "from_name" => $fromName, "from_email" => $fromEmail, "content_type" => "text/html", ]; foreach ($followersData as $k => $followerData) { if (($followerData["follower_email"] === $postAuthor->user_email) && (($moderationNotify && $comment->comment_approved === "0") || ($commentsNotify && $comment->comment_approved === "1"))) { return; } $subject = str_replace(["[COMMENT_AUTHOR]"], [$followerData["user_name"]], $subject); $body = str_replace(["[COMMENT_AUTHOR]", "[FOLLOWER_NAME]"], [ $followerData["user_name"], $followerData["follower_name"] ], $message); $this->emailToFollower($followerData, $comment, $subject, $body, $data); do_action("wpdiscuz_notify_followers", $comment, $followerData); } } private function emailToFollower($followerData, $comment, $subject, $message, $data) { if (!apply_filters("wpdiscuz_follow_email_notification", true, $followerData, $comment)) { return; } $cancelLink = home_url("/wpdiscuzsubscription/follow/") . "?wpdiscuzFollowID={$followerData["id"]}&wpdiscuzFollowKey={$followerData["activation_key"]}&wpDiscuzComfirm=0"; if (strpos($message, "[CANCEL_URL]") === false) { $message .= "
" . esc_html__("Unfollow", "wpdiscuz") . "
"; } else { $message = str_replace("[CANCEL_URL]", $cancelLink, $message); } $headers = []; $mailContentType = $data["content_type"]; $headers[] = "Content-Type: $mailContentType; charset=UTF-8"; $headers[] = "From: " . $data["from_name"] . " <" . $data["from_email"] . "> \r\n"; $subject = html_entity_decode($subject, ENT_QUOTES); $message = html_entity_decode($message, ENT_QUOTES); wp_mail($followerData["follower_email"], $subject, do_shortcode($message), $headers); } public function sendMailToMentionedUsers($users, $comment) { $post = get_post($comment->comment_post_ID); $postId = $post->ID; $parsedUrl = parse_url(get_site_url()); $domain = isset($parsedUrl["host"]) ? WpdiscuzHelper::fixEmailFrom($parsedUrl["host"]) : ""; $fromEmail = "no-reply@" . $domain; $fromName = html_entity_decode(get_option("blogname"), ENT_QUOTES); $headers[] = "Content-Type: text/html; charset=UTF-8"; $headers[] = "From: " . $fromName . " <" . $fromEmail . "> \r\n"; $siteUrl = get_site_url(); $blogTitle = get_option("blogname"); $postTitle = get_the_title($post); $postUrl = urldecode_deep(get_permalink($post)); $commentUrl = urldecode_deep(get_comment_link($comment)); $commentAuthor = $comment->comment_author; $subject = $this->options->subscription["emailSubjectUserMentioned"]; $message = wpautop($this->options->subscription["emailContentUserMentioned"]); $subject = apply_filters("wpdiscuz_mentioned_user_email_subject_pre_replace", $subject, $postId); $message = apply_filters("wpdiscuz_mentioned_user_email_content_pre_replace", $message, $postId); $subject = str_replace(["[BLOG_TITLE]", "[POST_TITLE]"], [$blogTitle, $postTitle], $subject); //$message = wpautop($this->options->subscription["emailContentUserMentioned"]); $search = [ "[SITE_URL]", "[POST_URL]", "[BLOG_TITLE]", "[POST_TITLE]", "[MENTIONED_USER_NAME]", "[COMMENT_URL]", "[COMMENT_AUTHOR]" ]; $replace = [$siteUrl, $postUrl, $blogTitle, $postTitle, "", $commentUrl, $commentAuthor]; foreach ($users as $k => $user) { if ($user["email"] !== $comment->comment_author_email) { if (apply_filters("wpducm_mail_to_mentioned_user", true, $user, $comment)) { $replace[4] = $user["name"]; $message = str_replace($search, $replace, $message); $subject = apply_filters("wpdiscuz_mentioned_user_mail_subject", $subject, $user, $comment); $message = apply_filters("wpdiscuz_mentioned_user_mail_body", $message, $user, $comment); $subject = apply_filters("wpdiscuz_mentioned_user_email_subject", $subject, $postId); $message = apply_filters("wpdiscuz_mentioned_user_email_content", $message, $postId); if ($subject && $message) { wp_mail($user["email"], $subject, $message, $headers); } } } } } }