if (CForumSubscribe::CanUserDeleteSubscribe($ID, $USER->GetUserGroupArray(), $USER->GetID())) { CForumSubscribe::Delete($ID); } else { $arMsg[] = array("id" => "NO_PERMS", "text" => GetMessage("FSUBSC_NO_SPERMS")); } break; } } } } //************************************/Actions ******************************************************************** if (!empty($arMsg)) { $err = new CAdminException($arMsg); $lAdmin->AddFilterError($err->GetString()); } $rsData = CForumSubscribe::GetListEx(array($by => $order), $arFilter); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("FM_TITLE_PAGE"))); //************************************ Headers ******************************************************************** $lAdmin->AddHeaders(array(array("id" => "ID", "content" => GetMessage("FM_HEAD_ID"), "sort" => "ID", "default" => true), array("id" => "FORUM_NAME", "content" => GetMessage("FM_HEAD_FORUM"), "sort" => "FORUM_NAME", "default" => true), array("id" => "TITLE", "content" => GetMessage("FM_HEAD_TOPIC"), "sort" => "TITLE", "default" => true), array("id" => "START_DATE", "content" => GetMessage("FM_HEAD_START_DATE"), "sort" => "START_DATE", "default" => true), array("id" => "LAST_SEND", "content" => GetMessage("FM_HEAD_LAST_SEND"), "sort" => "LAST_SEND", "default" => true))); //************************************ Body *********************************************************************** while ($arRes = $rsData->NavNext(true, "t_")) { $row =& $lAdmin->AddRow($t_ID, $arRes); $LOGIN = $arRes["LOGIN"]; if ($t_TOPIC_ID <= 0) { $t_TITLE = $t_NEW_TOPIC_ONLY == "Y" ? GetMessage("FM_NEW_TOPIC_ONLY") : GetMessage("FM_ALL_MESSAGE"); } $row->AddViewField("TITLE", $t_TITLE); $arActions = array(); $arActions[] = array("ICON" => "delete", "TEXT" => GetMessage("FM_ACT_DELETE"), "ACTION" => "if(confirm('" . GetMessage("FM_ACT_DEL_CONFIRM") . "')) " . $lAdmin->ActionDoGroup($t_ID, "delete", "USER_ID=" . $USER_ID . "&lang=" . LANG));
function SendMailMessage($MID, $arFields = array(), $strLang = false, $mailTemplate = false) { global $USER; $MID = intVal($MID); $arMessage = array(); $arTopic = array(); $arForum = array(); $arFiles = array(); $mailTemplate = $mailTemplate === false ? "NEW_FORUM_MESSAGE" : $mailTemplate; $event = new CEvent(); if ($MID > 0) { CTimeZone::Disable(); $arMessage = CForumMessage::GetByIDEx($MID, array("GET_TOPIC_INFO" => "Y", "GET_FORUM_INFO" => "Y", "FILTER" => "Y")); CTimeZone::Enable(); $db_files = CForumFiles::GetList(array("MESSAGE_ID" => "ASC"), array("MESSAGE_ID" => $MID)); if ($db_files && ($res = $db_files->Fetch())) { do { $arFiles[$res["ID"]] = CFile::GetFileArray($res["FILE_ID"]); } while ($res = $db_files->Fetch()); } } if (empty($arMessage)) { return false; } $arTopic = $arMessage["TOPIC_INFO"]; $arForum = $arMessage["FORUM_INFO"]; $TID = intVal($arMessage["TOPIC_ID"]); $FID = intVal($arMessage["FORUM_ID"]); if (!is_set($arFields, "FORUM_ID")) { $arFields["FORUM_ID"] = $arMessage["FORUM_ID"]; } if (!is_set($arFields, "FORUM_NAME")) { $arFields["FORUM_NAME"] = $arForum["NAME"]; } if (!is_set($arFields, "TOPIC_ID")) { $arFields["TOPIC_ID"] = $arMessage["TOPIC_ID"]; } if (!is_set($arFields, "MESSAGE_ID")) { $arFields["MESSAGE_ID"] = $arMessage["ID"]; } if (!is_set($arFields, "TOPIC_TITLE")) { $arFields["TOPIC_TITLE"] = $arTopic["TITLE"]; } if (!is_set($arFields, "MESSAGE_DATE")) { $arFields["MESSAGE_DATE"] = $arMessage["POST_DATE"]; } if (!is_set($arFields, "AUTHOR")) { $arFields["AUTHOR"] = $arMessage["AUTHOR_NAME"]; } if (!is_set($arFields, "TAPPROVED")) { $arFields["TAPPROVED"] = $arTopic["APPROVED"]; } if (!is_set($arFields, "MAPPROVED")) { $arFields["MAPPROVED"] = $arMessage["APPROVED"]; } if (!is_set($arFields, "FROM_EMAIL")) { $arFields["FROM_EMAIL"] = COption::GetOptionString("forum", "FORUM_FROM_EMAIL", "*****@*****.**"); } //If the message is from socialnetwork, check if mail processor exists for this social network if ($arTopic["SOCNET_GROUP_ID"] > 0) { if (CModule::IncludeModule("mail") && CModule::IncludeModule("socialnetwork")) { $arMailParams = CForumEMail::GetForumFilters($FID, $arTopic["SOCNET_GROUP_ID"]); //If the processor exists: if ($arMailParams) { global $DB; if ($arMessage["XML_ID"] == '') { //check if MSG_ID field exists, generate it if not $arMessage["XML_ID"] = "M" . $MID . "." . md5(uniqid()) . "@" . ($_SERVER["SERVER_NAME"] != '' ? $_SERVER["SERVER_NAME"] : $_SERVER["SERVER_ADDR"]); $DB->Query("UPDATE b_forum_message SET XML_ID='" . $DB->ForSQL($arMessage["XML_ID"]) . "' WHERE ID=" . $MID); } //get MSG_ID topics, it would be IN_REPLY_TO if ($arTopic["XML_ID"] == '') { $arTopic["XML_ID"] = "T" . $TID . "." . md5(uniqid()) . "@" . ($_SERVER["SERVER_NAME"] != '' ? $_SERVER["SERVER_NAME"] : $_SERVER["SERVER_ADDR"]); $DB->Query("UPDATE b_forum_topic SET XML_ID='" . $DB->ForSQL($arTopic["XML_ID"]) . "' WHERE ID=" . $TID); } //fill FROM_EMAIL from AUTHOR_NAME + FROM_EMAIL or AUTHOR_EMAIL or from 'b_user' by AUTHOR_ID depending on the settings of mail processor if ($arMailParams['USE_EMAIL'] == 'Y' && $arMessage["AUTHOR_EMAIL"] != '') { $arFields["FROM_EMAIL"] = '"' . $arMessage['AUTHOR_NAME'] . '" <' . $arMessage['AUTHOR_EMAIL'] . '>'; } elseif ($arMailParams['USE_EMAIL'] == 'Y' && $arMessage["EMAIL"] != '') { $arFields["FROM_EMAIL"] = '"' . $arMessage['AUTHOR_NAME'] . '" <' . $arMessage['EMAIL'] . '>'; } else { $arFields["FROM_EMAIL"] = '"' . $arMessage['AUTHOR_NAME'] . '" <' . $arMailParams['EMAIL'] . '>'; } if ($arMessage["NEW_TOPIC"] == "Y") { $arFields["=Message-Id"] = $arFields["MSG_ID"] = "<" . $arTopic["XML_ID"] . ">"; } else { $arFields["TOPIC_TITLE"] = "Re" . ($arMessage["TOPIC_INFO"]["POSTS"] > 1 ? "[" . $arMessage["TOPIC_INFO"]["POSTS"] . "]" : "") . ": " . $arFields["TOPIC_TITLE"]; $arFields["=Message-Id"] = $arFields["MSG_ID"] = "<" . $arMessage["XML_ID"] . ">"; $arFields["=In-Reply-To"] = $arFields["IN_REPLY_TO"] = "<" . $arTopic["XML_ID"] . ">"; } //fill REPLY_TO from the settings of the mail processor $arFields["=Reply-To"] = $arFields["REPLY_TO"] = $arMailParams["EMAIL"]; $arFields["FORUM_EMAIL"] = $arMailParams["EMAIL"]; $arSocNetGroup = CSocNetGroup::GetById($arTopic["SOCNET_GROUP_ID"]); $arFields["FORUM_NAME"] = $arSocNetGroup["NAME"]; if ($arMailParams["SUBJECT_SUF"] != '') { $arFields["TOPIC_TITLE"] .= ' ' . $arMailParams["SUBJECT_SUF"]; } if ($arMailParams["USE_SUBJECT"] == "Y") { $arFields["=Subject"] = $arFields["TOPIC_TITLE"]; } $arFields["PATH2FORUM"] = CComponentEngine::MakePathFromTemplate($arMailParams["URL_TEMPLATES_MESSAGE"], array("FID" => $arMessage["FORUM_ID"], "TID" => $arMessage["TOPIC_ID"], "TITLE_SEO" => $arMessage["TOPIC_INFO"]["TITLE_SEO"], "MID" => $arMessage["ID"])); } else { return false; } } else { return false; } } else { $arForumSites = CForumNew::GetSites($FID); foreach ($arForumSites as $site_id => $path) { $arForumSites[$site_id] = trim(CForumNew::PreparePath2Message($arForumSites[$site_id], array("FORUM_ID" => $arMessage["FORUM_ID"], "TOPIC_ID" => $arMessage["TOPIC_ID"], "TITLE_SEO" => $arMessage["TOPIC_INFO"]["TITLE_SEO"], "MESSAGE_ID" => $arMessage["ID"], "SOCNET_GROUP_ID" => $arTopic["SOCNET_GROUP_ID"], "OWNER_ID" => $arTopic["OWNER_ID"], "PARAM1" => $arMessage["PARAM1"], "PARAM2" => $arMessage["PARAM2"]))); if (empty($arForumSites[$site_id])) { $db_lang = CSite::GetByID($site_id); $arForumSites[$site_id] = "/"; if ($ar_lang = $db_lang->Fetch()) { $arForumSites[$site_id] = $ar_lang["DIR"]; } $arForumSites[$site_id] = COption::GetOptionString("forum", "REL_FPATH", "") . "forum/read.php?FID=#FID#&TID=#TID#&MID=#MID##message#MID#"; } } foreach (GetModuleEvents("forum", "onBeforeMailMessageSend", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$mailTemplate, &$arForumSites, &$arFields, $arForum, $arTopic, $arMessage)) === false) { return false; } } } /* ?? ALTER TABLE dbo.B_FORUM_MESSAGE ADD MSG_ID varchar(255) NULL, MAIL_MESSAGE_ID int NULL */ $arFilter = array("FORUM_ID" => $FID, "TOPIC_ID_OR_NULL" => $TID, "ACTIVE" => "Y", ">=PERMISSION" => $arTopic["APPROVED"] != "Y" || $arMessage["APPROVED"] != "Y" ? "Q" : "E"); if ($arMessage["NEW_TOPIC"] != "Y") { $arFilter["NEW_TOPIC_ONLY"] = "N"; } if ($mailTemplate == "NEW_FORUM_MESSAGE") { $arFilter["LAST_SEND_OR_NULL"] = $MID; } if ($arTopic["SOCNET_GROUP_ID"] > 0) { $mailTemplate = "FORUM_NEW_MESSAGE_MAIL"; $arFilter["SOCNET_GROUP_ID"] = $arTopic["SOCNET_GROUP_ID"]; } else { $arFilter["SOCNET_GROUP_ID"] = false; } $db_res = CForumSubscribe::GetListEx(array("USER_ID" => "ASC"), $arFilter); $arID = array(); $arSiteFields = array(); $currentUserID = false; while ($res = $db_res->Fetch()) { // SUBSC_GET_MY_MESSAGE - Send my messages to myself. if ($res["SUBSC_GET_MY_MESSAGE"] == "N" && $res["USER_ID"] == $USER->GetId()) { continue; } // SUBSC_GROUP_MESSAGE - Group messages. if ($currentUserID == $res["USER_ID"]) { continue; } // Check email if (empty($res["EMAIL"])) { continue; } if ($mailTemplate == "FORUM_NEW_MESSAGE_MAIL" && $res["USER_ID"] == $arMessage["AUTHOR_ID"]) { continue; } $currentUserID = $res["USER_ID"]; $arFields_tmp = $arFields; if (!is_set($arFields_tmp, "PATH2FORUM")) { $arFields_tmp["PATH2FORUM"] = $arForumSites[$res["SITE_ID"]]; } if (!is_set($arFields_tmp, "MESSAGE_TEXT")) { if (!isset(${"parser_" . $res["SITE_ID"]})) { ${"parser_" . $res["SITE_ID"]} = new forumTextParser($res["SITE_ID"]); } if (empty($arSiteFields[$res["SITE_ID"]])) { $arSiteFields[$res["SITE_ID"]] = $event->GetSiteFieldsArray($res["SITE_ID"]); $db_site = CSite::GetByID($res["SITE_ID"]); if ($db_site && ($arSite = $db_site->Fetch())) { $arSiteFields[$res["SITE_ID"]] = array_merge($arSiteFields[$res["SITE_ID"]], $arSite, array("LANG_MESS" => IncludeModuleLangFile(__FILE__, $arSiteFields[$res["SITE_ID"]]["LANGUAGE_ID"], true))); $arSiteFields[$res["SITE_ID"]]["ATTACHED_FILES"] = $arSiteFields[$res["SITE_ID"]]["LANG_MESS"]["F_ATTACHED_FILES"]; } } if (!empty($arSiteFields[$res["SITE_ID"]]["SERVER_NAME"])) { ${"parser_" . $res["SITE_ID"]}->serverName = $arSiteFields[$res["SITE_ID"]]["SERVER_NAME"]; } ${"parser_" . $res["SITE_ID"]}->arFiles = $arFiles; $POST_MESSAGE_HTML = $arMessage["POST_MESSAGE"]; if (COption::GetOptionString("forum", "FILTER", "Y") == "Y") { $POST_MESSAGE_HTML = empty($arMessage["POST_MESSAGE_FILTER"]) ? CFilterUnquotableWords::Filter($POST_MESSAGE_HTML) : $arMessage["POST_MESSAGE_FILTER"]; } $arFields_tmp["MESSAGE_TEXT"] = ${"parser_" . $res["SITE_ID"]}->convert4mail($POST_MESSAGE_HTML); $arFields_tmp["PARSED_FILES"] = ${"parser_" . $res["SITE_ID"]}->arFilesIDParsed; $tmp = array_diff(array_keys($arFiles), ${"parser_" . $res["SITE_ID"]}->arFilesIDParsed); if (!empty($tmp)) { $str = "[FILE ID=" . implode("]\n[FILE ID=", $tmp) . "]"; ${"parser_" . $res["SITE_ID"]}->ParserFile($str, ${"parser_" . $res["SITE_ID"]}, "mail"); $arFields_tmp["MESSAGE_TEXT"] .= "\n\n" . $arSiteFields[$res["SITE_ID"]]["ATTACHED_FILES"] . "\n" . $str; } } $arFields_tmp["RECIPIENT"] = $res["EMAIL"]; $event->Send($mailTemplate, $res["SITE_ID"], $arFields_tmp, "N"); $arID[] = $res["ID"]; if (count($arID) > 255) { CForumSubscribe::UpdateLastSend($MID, implode(",", $arID)); $arID = array(); } } if (count($arID) > 0) { CForumSubscribe::UpdateLastSend($MID, implode(",", $arID)); } return true; }
********************************************************************/ $arResult["CURRENT_PAGE"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_SUBSCR_LIST"], array()); $arResult["~FORUMS"] = $arResult["FORUMS"] = array(); $arResult["~TOPICS"] = $arResult["TOPICS"] = array(); $arResult["ERROR_MESSAGE"] = implode("\n", $arError); $arResult["OK_MESSAGE"] = implode("\n", $arNote); $arResult["sessid"] = bitrix_sessid_get(); $arResult["SHOW_SUBSCRIBE_LIST"] = "N"; $arResult["SUBSCRIBE_LIST"] = array(); /******************************************************************** /Default values ********************************************************************/ /******************************************************************** Data ********************************************************************/ $db_res = CForumSubscribe::GetListEx(array("FORUM_ID" => "ASC", "TOPIC_ID" => "ASC", "START_DATE" => "ASC"), array("USER_ID" => $arParams["UID"]), array("bDescPageNumbering" => false, "nPageSize" => $arParams["TOPICS_PER_PAGE"])); $db_res->NavStart($arParams["TOPICS_PER_PAGE"]); $db_res->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"]; $db_res->bShowAll = false; $arResult["NAV_RESULT"] = $db_res; $arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("F_SUBSCRIBE"), $arParams["PAGE_NAVIGATION_TEMPLATE"]); if ($db_res && ($res = $db_res->GetNext())) { $arResult["SHOW_SUBSCRIBE_LIST"] = "Y"; do { $arResult["~FORUMS"][] = $res["FORUM_ID"]; $arResult["~TOPICS"][] = $res["TOPIC_ID"]; $res["START_DATE"] = trim($res["START_DATE"]); if (strLen($res["START_DATE"]) > 0) { $res["START_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($res["START_DATE"], CSite::GetDateFormat())); } $res["SUBSCRIBE_TYPE"] = intVal($res["TOPIC_ID"]) > 0 ? "TOPIC" : ($res["NEW_TOPIC_ONLY"] == "Y" ? "NEW_TOPIC_ONLY" : "ALL_MESSAGES");
$arFields["MAIL_FILTER_ID"] = $MAIL_FILTER_ID; if (CForumEMail::Set($arFields) > 0) { LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"], "UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"]))); } } } } } elseif ($ACTION == "FORUM_SUBSCRIBE") { if (ForumSubscribeNewMessagesEx($arParams["FID"], 0, "N", $strErrorMessage, $strOkMessage, false, $arParams["SOCNET_GROUP_ID"])) { LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"], "UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"]))); } else { $arResult["ERROR_MESSAGE"] = $strErrorMessage; } } elseif ($ACTION == "FORUM_UNSUBSCRIBE") { $arFields = array("USER_ID" => $USER->GetID(), "FORUM_ID" => $arParams["FID"], "SITE_ID" => SITE_ID, "TOPIC_ID" => false, "SOCNET_GROUP_ID" => $arParams["SOCNET_GROUP_ID"]); $db_res = CForumSubscribe::GetListEx(array(), $arFields); if ($db_res && ($res = $db_res->Fetch()) && CForumSubscribe::Delete($res["ID"])) { LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"], "UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"]))); } } } /******************************************************************** /Actions ********************************************************************/ /******************************************************************** Default params # 2 ********************************************************************/ global $by, $order; InitSorting(); if (!$by) { ForumGetTopicSort($by, $order, $arResult["FORUM"]);
function ForumSubscribeNewMessages($FID, $TID, &$strErrorMessage, &$strOKMessage, $NEW_TOPIC_ONLY = "N", $strSite = false, $SOCNET_GROUP_ID = false) { global $USER; $strSite = $strSite === false ? SITE_ID : $strSite; $FID = IntVal($FID); $TID = IntVal($TID); $arError = array(); $arNote = array(); if (!$USER->IsAuthorized()) { $arError[] = GetMessage("FORUM_SUB_ERR_AUTH"); } elseif ($SOCNET_GROUP_ID == false && !CForumSubscribe::CanUserAddSubscribe($FID, $USER->GetUserGroupArray())) { $arError[] = GetMessage("FORUM_SUB_ERR_PERMS"); } else { $arFields = array("USER_ID" => $USER->GetID(), "FORUM_ID" => $FID, "SITE_ID" => $strSite, "TOPIC_ID" => $TID > 0 ? $TID : false); if ($SOCNET_GROUP_ID > 0) { $arFields['SOCNET_GROUP_ID'] = $SOCNET_GROUP_ID; } $db_res = CForumSubscribe::GetListEx(array(), $arFields); if ($db_res && ($res = $db_res->Fetch())) { $sError = GetMessage("FORUM_SUB_ERR_ALREADY_TOPIC"); if ($TID <= 0) { if ($res["NEW_TOPIC_ONLY"] == "Y") { $sError = GetMessage("FORUM_SUB_ERR_ALREADY_NEW"); if ($NEW_TOPIC_ONLY != $res["NEW_TOPIC_ONLY"]) { $sError = str_replace("#FORUM_NAME#", htmlspecialcharsEx($res["FORUM_NAME"]), GetMessage("FORUM_SUB_ERR_ALREADY_ALL_HELP")); } } else { $sError = GetMessage("FORUM_SUB_ERR_ALREADY_ALL"); if ($NEW_TOPIC_ONLY != $res["NEW_TOPIC_ONLY"]) { $sError = str_replace("#FORUM_NAME#", htmlspecialcharsEx($res["FORUM_NAME"]), GetMessage("FORUM_SUB_ERR_ALREADY_NEW_HELP")); } } } $arError[] = $sError; } else { $arFields["NEW_TOPIC_ONLY"] = $arFields["TOPIC_ID"] !== false ? "N" : $NEW_TOPIC_ONLY; $subid = CForumSubscribe::Add($arFields); if (IntVal($subid) > 0) { if ($TID > 0) { $arNote[] = GetMessage("FORUM_SUB_OK_MESSAGE_TOPIC"); } else { $arNote[] = GetMessage("FORUM_SUB_OK_MESSAGE"); } } else { $arError[] = GetMessage("FORUM_SUB_ERR_UNKNOWN"); } } } if (!empty($arError)) { $strErrorMessage .= implode(".\n", $arError); } if (!empty($arError)) { $strOKMessage .= implode(".\n", $arNote); } if (empty($arError)) { return True; } else { return False; } }