/** * Create new comment for task * * @param integer $taskId * @param integet $commentId * @param integer $commentEditorId - ID of user who is comment's editor * @param string[] $arFields - fields to be updated, including text in BB code * * @throws TasksException, CTaskAssertException * * @return boolean */ public static function update($taskId, $commentId, $commentEditorId, $arFields) { CTaskAssert::assertLaxIntegers($taskId, $commentId, $commentEditorId); CTaskAssert::assert(is_array($arFields) && !empty($arFields)); if (!CModule::includeModule('forum')) { throw new TasksException('forum module can not be loaded', TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED); } IncludeModuleLangFile(__FILE__); $forumId = CTasksTools::GetForumIdForIntranet(); $oTask = CTaskItem::getInstance($taskId, $commentEditorId); $arTask = $oTask->getData(); $outForumTopicId = $outStrUrl = null; $arErrorCodes = array(); $arFields = array_merge(array('EDITOR_ID' => $commentEditorId), $arFields); $messageId = self::__deprecated_Add($arFields['POST_MESSAGE'], $forumTopicId = $arTask['FORUM_TOPIC_ID'], $forumId, $nameTemplate = CSite::GetNameFormat(false), $arTask = $arTask, $permissions = 'Y', $commentId = $commentId, $givenUserId = $commentEditorId, $imageWidth = 300, $imageHeight = 300, $arSmiles = array(), $arForum = CForumNew::GetByID($forumId), $messagesPerPage = 10, $arUserGroupArray = CUser::GetUserGroup($commentEditorId), $backPage = null, $strMsgAddComment = GetMessage("TASKS_COMMENT_MESSAGE_ADD"), $strMsgEditComment = GetMessage("TASKS_COMMENT_MESSAGE_EDIT"), $strMsgNewTask = GetMessage("TASKS_COMMENT_SONET_NEW_TASK_MESSAGE"), $componentName = null, $outForumTopicId, $arErrorCodes, $outStrUrl, $arFields); if (!($messageId >= 1)) { throw new TasksException(serialize($arErrorCodes), TasksException::TE_ACTION_FAILED_TO_BE_PROCESSED | TasksException::TE_FLAG_SERIALIZED_ERRORS_IN_MESSAGE); } return true; }
$arWarnings[] = GetMessage("CC_BSR_WARN_WIKI_GROUP_IBLOCK", array("#href#" => htmlspecialcharsbx(BX_ROOT . "/admin/iblock_edit.php?type=" . urlencode($arIBlock["IBLOCK_TYPE_ID"]) . "&lang=" . LANGUAGE_ID . "&ID=" . urlencode($arIBlock["ID"]) . "&admin=Y&return_url=" . urlencode($APPLICATION->GetCurPageParam())))); } $arSteps["group_wiki"] = GetMessage("CC_BSR_STEP_GROUPS_WIKI"); } if (intval($arParams["FILES_USER_IBLOCK_ID"]) && CModule::IncludeModule('iblock')) { $arIBlock = CIBlock::GetArrayByID($arParams["FILES_USER_IBLOCK_ID"]); if ($arIBlock["INDEX_ELEMENT"] === "Y" || $arIBlock["INDEX_SECTION"] === "Y") { $arWarnings[] = GetMessage("CC_BSR_WARN_FILE_USER_IBLOCK", array("#href#" => htmlspecialcharsbx(BX_ROOT . "/admin/iblock_edit.php?type=" . urlencode($arIBlock["IBLOCK_TYPE_ID"]) . "&lang=" . LANGUAGE_ID . "&ID=" . urlencode($arIBlock["ID"]) . "&admin=Y&return_url=" . urlencode($APPLICATION->GetCurPageParam())))); } if (strlen($arParams["PATH_TO_USER_FILES_ELEMENT"])) { $arSteps["user_files"] = GetMessage("CC_BSR_STEP_USERS_FILES"); } } if (array_key_exists("group_files", $arSteps) || array_key_exists("user_files", $arSteps)) { if (intval($arParams["FILES_FORUM_ID"]) && CModule::IncludeModule('forum')) { $arForum = CForumNew::GetByID($arParams["FILES_FORUM_ID"]); if ($arForum === false) { $arWarnings[] = GetMessage("CC_BSR_WARN_FILES_FORUM_NOT_FOUND", array("#FORUM_ID#" => htmlspecialcharsbx($arParams["FILES_FORUM_ID"]))); } else { if ($arForum["INDEXATION"] !== "Y") { $arWarnings[] = GetMessage("CC_BSR_WARN_FILES_FORUM", array("#href#" => htmlspecialcharsbx(BX_ROOT . "/admin/forum_edit.php?lang=" . LANGUAGE_ID . "&ID=" . intval($arForum["ID"])))); } } } else { if ($arParams["FILES_USE_COMMENTS"] != "N") { $arWarnings[] = GetMessage("CC_BSR_WARN_FILES_FORUM_NOT_SET"); } } } if (count($arWarnings) > 0) { $arWarnings[] = GetMessage("CC_BSR_WARN_REINDEX", array("#href#" => htmlspecialcharsbx(BX_ROOT . "/admin/search_reindex.php?lang=" . LANGUAGE_ID)));
case "FORUM_TOPIC_CLOSE": case "FORUM_TOPIC_MOVE": case "FORUM_TOPIC_EDIT": if (intval($a_ITEM_ID) <= 0) { continue; } elseif (!array_key_exists($a_ITEM_ID, $arForumCache["TOPIC"])) { CModule::IncludeModule("forum"); $res = CForumTopic::GetByID($a_ITEM_ID); $res["MESSAGE_ID"] = $res["LAST_MESSAGE_ID"]; $res["TOPIC_ID"] = $res["ID"]; $arForumCache["TOPIC"][$a_ITEM_ID] = $res; } else { $res = $arForumCache["TOPIC"][$a_ITEM_ID]; } if (!array_key_exists($res["FORUM_ID"], $arForumCache["FORUM"])) { $arForumCache["FORUM"][$res["FORUM_ID"]] = CForumNew::GetByID($res["FORUM_ID"]); if ($arForumCache["FORUM"][$res["FORUM_ID"]]) { $arSitesPath = CForumNew::GetSites($res["FORUM_ID"]); $arForumCache["FORUM"][$res["FORUM_ID"]]["PATH"] = array_shift($arSitesPath); } } if ($arForumCache["FORUM"][$res["FORUM_ID"]]["PATH"]) { $sPath = CForumNew::PreparePath2Message($arForumCache["FORUM"][$res["FORUM_ID"]]["PATH"], $res); $row->AddViewField("ITEM_ID", '[<a href="' . $sPath . '">' . $a_ITEM_ID . '</a>] ' . GetMessage("MAIN_EVENTLOG_FORUM_TOPIC")); } else { $row->AddViewField("ITEM_ID", '[' . $a_ITEM_ID . '] ' . GetMessage("MAIN_EVENTLOG_FORUM_TOPIC")); } break; case "FORUM_MESSAGE_DELETE": $row->AddViewField("ITEM_ID", '[' . $a_ITEM_ID . '] ' . GetMessage("MAIN_EVENTLOG_FORUM_MESSAGE")); break;
/Default values ********************************************************************/ /******************************************************************** Data ********************************************************************/ $db_res = CForumSubscribe::GetList(array("FORUM_ID" => "ASC", "TOPIC_ID" => "ASC", "START_DATE" => "ASC"), array("USER_ID" => $arParams["UID"])); $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 { if (!isset($arResult["FORUMS"][$res["FORUM_ID"]])) { $arResult["FORUMS"][$res["FORUM_ID"]] = CForumNew::GetByID($res["FORUM_ID"]); } if (!isset($arResult["TOPICS"][$res["TOPIC_ID"]])) { $arResult["TOPICS"][$res["TOPIC_ID"]] = htmlspecialcharsEx(CForumTopic::GetByID($res["TOPIC_ID"])); } $res["FORUM_INFO"] = $arResult["FORUMS"][$res["FORUM_ID"]]; $res["TOPIC_INFO"] = $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"); $res["LAST_SEND"] = intVal($res["LAST_SEND"]); $res["read"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_READ"], array("FID" => $res["FORUM_ID"], "TID" => $res["TOPIC_ID"], "MID" => "s")); $res["list"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_LIST"], array("FID" => $res["FORUM_ID"])); $res["read_last_send"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => intVal($res["TOPIC_ID"]), "MID" => intVal($res["LAST_SEND"]))) . "#message" . intVal($res["LAST_SEND"]);
$cache = new CPHPCache(); $cache_path_main = str_replace(array(":", "//"), "/", "/" . SITE_ID . "/" . $componentName . "/"); /******************************************************************** /Default values ********************************************************************/ /******************************************************************** Action ********************************************************************/ if (strToUpper($_REQUEST["action"]) == "MOVE" && check_bitrix_sessid()) { $strErrorMessage = ""; $strOKMessage = ""; $result = false; if (intVal($arParams["newFID"]) <= 0) { $strErrorMessage = GetMessage("FM_EMPTY_DEST_FORUM") . ". \n"; } else { $arResult["FORUM_NEW"] = CForumNew::GetByID($arParams["newFID"]); if (ForumCurrUserPermissions($arParams["newFID"]) < "Q" && $arResult["FORUM_NEW"]["ALLOW_MOVE_TOPIC"] != "Y") { $strErrorMessage = GetMessage("FM_NO_DEST_FPERMS") . ". \n"; } else { $result = CForumTopic::MoveTopic2Forum($topics, $arParams["newFID"], $_REQUEST["leaveLink"]); } } if (!$result) { if ($GLOBALS['APPLICATION']->GetException()) { $arErr = $GLOBALS['APPLICATION']->ERROR_STACK; if (is_array($arErr) && count($arErr) > 0) { foreach ($arErr as $res) { $strErrorMessage .= $res["msg"] . "\n"; } } $err = $GLOBALS['APPLICATION']->GetException();
function AddComment_News($arFields) { if (!CModule::IncludeModule("forum")) { return false; } if (!CModule::IncludeModule("iblock")) { return false; } if (!CModule::IncludeModule("socialnetwork")) { return false; } $dbResult = CSocNetLog::GetList(array("ID" => "DESC"), array("TMP_ID" => $arFields["LOG_ID"]), false, false, array("ID", "SOURCE_ID", "PARAMS")); $bFound = false; if ($arLog = $dbResult->Fetch()) { if (intval($arLog["SOURCE_ID"]) > 0) { $arFilter = array("ID" => $arLog["SOURCE_ID"]); $arSelectedFields = array("IBLOCK_ID", "ID", "CREATED_BY", "NAME", "PROPERTY_FORUM_TOPIC_ID", "PROPERTY_FORUM_MESSAGE_CNT"); $db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields); if ($db_res && ($res = $db_res->GetNext())) { $arElement = $res; $val = COption::GetOptionString("intranet", "sonet_log_news_iblock_forum"); if (strlen($val) > 0) { $arIBlockForum = unserialize($val); } else { $arIBlockForum = array(); } if (array_key_exists($arElement["IBLOCK_ID"], $arIBlockForum)) { $FORUM_ID = $arIBlockForum[$arElement["IBLOCK_ID"]]; } if (intval($FORUM_ID) > 0) { CSocNetLogTools::AddComment_Review_CheckIBlock($arElement); $dbMessage = CForumMessage::GetList(array(), array("PARAM2" => $arElement["ID"])); if (!($arMessage = $dbMessage->Fetch())) { // Add Topic $TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot($arElement, $FORUM_ID); $bNewTopic = true; } else { $TOPIC_ID = $arMessage["TOPIC_ID"]; } if (intval($TOPIC_ID) > 0) { // Add comment $messageID = false; $bError = false; if (CForumMessage::CanUserAddMessage($TOPIC_ID, $GLOBALS["USER"]->GetUserGroupArray(), $GLOBALS["USER"]->GetID(), false)) { $bSHOW_NAME = true; $res = CForumUser::GetByUSER_ID($GLOBALS["USER"]->GetID()); if ($res) { $bSHOW_NAME = $res["SHOW_NAME"] == "Y"; } if ($bSHOW_NAME) { $AUTHOR_NAME = $GLOBALS["USER"]->GetFullName(); } if (strlen(Trim($AUTHOR_NAME)) <= 0) { $AUTHOR_NAME = $GLOBALS["USER"]->GetLogin(); } if (strlen($AUTHOR_NAME) <= 0) { $bError = true; } } if (!$bError) { $arFieldsMessage = array("POST_MESSAGE" => $arFields["TEXT_MESSAGE"], "USE_SMILES" => "Y", "APPROVED" => "Y", "PARAM2" => $arElement["ID"], "AUTHOR_NAME" => $AUTHOR_NAME, "AUTHOR_ID" => IntVal($GLOBALS["USER"]->GetParam("USER_ID")), "FORUM_ID" => $FORUM_ID, "TOPIC_ID" => $TOPIC_ID, "NEW_TOPIC" => "N", "GUEST_ID" => $_SESSION["SESS_GUEST_ID"], "ADD_TO_LOG" => "N"); $AUTHOR_IP = ForumGetRealIP(); $AUTHOR_IP_tmp = $AUTHOR_IP; $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR']; if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y") { $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP); if ($AUTHOR_IP_tmp == $AUTHOR_REAL_IP) { $AUTHOR_REAL_IP = $AUTHOR_IP; } else { $AUTHOR_REAL_IP = @gethostbyaddr($AUTHOR_REAL_IP); } } $arFieldsMessage["AUTHOR_IP"] = $AUTHOR_IP !== False ? $AUTHOR_IP : "<no address>"; $arFieldsMessage["AUTHOR_REAL_IP"] = $AUTHOR_REAL_IP !== False ? $AUTHOR_REAL_IP : "<no address>"; $messageID = CForumMessage::Add($arFieldsMessage, false); if (intVal($messageID) <= 0) { $bError = true; } else { if (CModule::IncludeModule("statistic")) { $arForum = CForumNew::GetByID($FORUM_ID); $F_EVENT1 = $arForum["EVENT1"]; $F_EVENT2 = $arForum["EVENT2"]; $F_EVENT3 = $arForum["EVENT3"]; if (strlen($F_EVENT3) <= 0) { $arForumSite_tmp = CForumNew::GetSites($FORUM_ID); $F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[SITE_ID], array("FORUM_ID" => $FORUM_ID, "TOPIC_ID" => $TOPIC_ID, "MESSAGE_ID" => $messageID)); } CStatistic::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3); } CForumMessage::SendMailMessage($messageID, array(), false, "NEW_FORUM_MESSAGE"); CSocNetLogTools::AddComment_Review_UpdateElement($arElement, $TOPIC_ID, $bNewTopic); } } } } } } } if (intval($messageID) <= 0) { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } return array("SOURCE_ID" => $messageID, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $messageID, "ERROR" => $strError, "NOTES" => ""); }
function Add($arFields, $strUploadDir = false, $arParams = array()) { global $DB; $strUploadDir = ($strUploadDir === false ? "forum/upload" : $strUploadDir); if (!CForumMessage::CheckFields("ADD", $arFields)) return false; $arForum = CForumNew::GetByID($arFields["FORUM_ID"]); $arParams["SKIP_STATISTIC"] = ($arParams["SKIP_STATISTIC"] == "Y" ? "Y" : "N"); $arParams["SKIP_INDEXING"] = ($arParams["SKIP_INDEXING"] == "Y" || $arForum["INDEXATION"] != "Y" ? "Y" : "N"); $POST_MESSAGE = $arFields["POST_MESSAGE"]; $parser = new forumTextParser(LANGUAGE_ID); $allow = forumTextParser::GetFeatures($arForum); $allow['SMILES'] = (($arFields["USE_SMILES"] != "Y") ? 'N' : $allow['SMILES']); if (COption::GetOptionString("forum", "FILTER", "Y") == "Y") { $POST_MESSAGE = CFilterUnquotableWords::Filter($POST_MESSAGE); $arFields["POST_MESSAGE_FILTER"] = (empty($POST_MESSAGE) ? "*" : $POST_MESSAGE); } /***************** Attach ******************************************/ $arFiles = array(); if (is_array($arFields["ATTACH_IMG"])) $arFields["FILES"] = array($arFields["ATTACH_IMG"]); unset($arFields["ATTACH_IMG"]); if (is_array($arFields["FILES"]) && !empty($arFields["FILES"])) { $res = array("FORUM_ID" => $arFields["FORUM_ID"], "USER_ID" => $arFields["AUTHOR_ID"], "upload_dir" => $strUploadDir); $arFiles = CForumFiles::Save($arFields["FILES"], $res, false); if (!empty($arFiles)) { $arFiles = array_keys($arFiles); sort($arFiles); $arFields["ATTACH_IMG"] = $arFiles[0]; $arFields["ATTACHED_FILES"] = $arFiles; } unset($arFields["FILES"]); } /***************** Attach/******************************************/ if (COption::GetOptionString("forum", "MESSAGE_HTML", "N") == "Y") $POST_MESSAGE = $parser->convert($POST_MESSAGE, $allow, "html", $arFiles); $arFields["POST_MESSAGE_HTML"] = $POST_MESSAGE; /***************** Event onBeforeMessageAdd ************************/ foreach(GetModuleEvents("forum", "onBeforeMessageAdd", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$strUploadDir)) === false) return false; } /***************** /Event ******************************************/ if (empty($arFields)) return false; $arInsert = $DB->PrepareInsert("b_forum_message", $arFields, $strUploadDir); $strDatePostField = ""; $strDatePostValue = ""; if (!is_set($arFields, "POST_DATE")) { $strDatePostField = ", POST_DATE"; $strDatePostValue = ", ".$DB->GetNowFunction().""; } $strSql = "INSERT INTO b_forum_message(".$arInsert[0].$strDatePostField.") VALUES(".$arInsert[1].$strDatePostValue.")"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); $ID = intVal($DB->LastID()); /***************** Attach ******************************************/ if (!empty($arFiles)) CForumFiles::UpdateByID($arFiles, array("FORUM_ID" => $arFields["FORUM_ID"], "TOPIC_ID" => $arFields["TOPIC_ID"], "MESSAGE_ID" => $ID)); /***************** Attach/******************************************/ /***************** Quota *******************************************/ $_SESSION["SESS_RECOUNT_DB"] = "Y"; $GLOBALS["USER_FIELD_MANAGER"]->Update("FORUM_MESSAGE", $ID, $arFields); if ($arParams["SKIP_STATISTIC"] == "Y" && $arParams["SKIP_INDEXING"] == "Y") return $ID; $arMessage = CForumMessage::GetByIDEx($ID, array("GET_FORUM_INFO" => "N", "GET_TOPIC_INFO" => "Y", "FILTER" => "Y")); if ($arParams["SKIP_STATISTIC"] != "Y") { if (intVal($arMessage["AUTHOR_ID"]) > 0) { CForumUser::SetStat($arMessage["AUTHOR_ID"], array("MESSAGE" => $arMessage)); } CForumTopic::SetStat($arMessage["TOPIC_ID"], array("MESSAGE" => $arMessage)); CForumNew::SetStat($arMessage["FORUM_ID"], array("MESSAGE" => $arMessage)); } /***************** Events onAfterMessageAdd ************************/ foreach(GetModuleEvents("forum", "onAfterMessageAdd", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$ID, $arMessage, $arMessage["TOPIC_INFO"], $arMessage["FORUM_INFO"], $arFields)); /***************** /Events *****************************************/ if ($arMessage["APPROVED"] == "Y") { if ($arParams["SKIP_INDEXING"] != "Y" && CModule::IncludeModule("search")) { $arMessage["POST_MESSAGE"] = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]); $arParams = array( "PERMISSION" => array(), "SITE" => CForumNew::GetSites($arMessage["FORUM_ID"]), "DEFAULT_URL" => "/"); $arGroups = CForumNew::GetAccessPermissions($arMessage["FORUM_ID"]); foreach($arGroups as $arGroup) { if ($arGroup[1] >= "E") { $arParams["PERMISSION"][] = $arGroup[0]; if ($arGroup[0] == 2) break; } } $arSearchInd = array( "LID" => array(), "LAST_MODIFIED" => $arMessage["POST_DATE"], "PARAM1" => $arMessage["FORUM_ID"], "PARAM2" => $arMessage["TOPIC_ID"], "ENTITY_TYPE_ID" => ($arMessage["NEW_TOPIC"] == "Y"? "FORUM_TOPIC": "FORUM_POST"), "ENTITY_ID" => ($arMessage["NEW_TOPIC"] == "Y"? $arMessage["TOPIC_ID"]: $ID), "USER_ID" => $arMessage["AUTHOR_ID"], "PERMISSIONS" => $arParams["PERMISSION"], "TITLE" => $arMessage["TOPIC_INFO"]["TITLE"].($arMessage["NEW_TOPIC"] == "Y" && !empty($arMessage["TOPIC_INFO"]["DESCRIPTION"]) ? ", ".$arMessage["TOPIC_INFO"]["DESCRIPTION"] : ""), "TAGS" => ($arMessage["NEW_TOPIC"] == "Y" ? $arMessage["TOPIC_INFO"]["TAGS"] : ""), "BODY" => GetMessage("AVTOR_PREF")." ".$arMessage["AUTHOR_NAME"].". ".(textParser::killAllTags($arMessage["POST_MESSAGE"])), "URL" => "", "INDEX_TITLE" => $arMessage["NEW_TOPIC"] == "Y", ); // get mentions $arMentionedUserID = CForumMessage::GetMentionedUserID($arMessage["POST_MESSAGE"]); if (!empty($arMentionedUserID)) { $arSearchInd["PARAMS"] = array( "mentioned_user_id" => $arMentionedUserID ); } $urlPatterns = 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" => $arMessage["TOPIC_INFO"]["SOCNET_GROUP_ID"], "OWNER_ID" => $arMessage["TOPIC_INFO"]["OWNER_ID"], "PARAM1" => $arMessage["PARAM1"], "PARAM2" => $arMessage["PARAM2"]); foreach ($arParams["SITE"] as $key => $val) { $arSearchInd["LID"][$key] = CForumNew::PreparePath2Message($val, $urlPatterns); if (empty($arSearchInd["URL"]) && !empty($arSearchInd["LID"][$key])) $arSearchInd["URL"] = $arSearchInd["LID"][$key]; } if (empty($arSearchInd["URL"])) { foreach ($arParams["SITE"] as $key => $val): $db_lang = CLang::GetByID($key); if ($db_lang && $ar_lang = $db_lang->Fetch()): $arParams["DEFAULT_URL"] = $ar_lang["DIR"]; break; endif; endforeach; $arParams["DEFAULT_URL"] .= COption::GetOptionString("forum", "REL_FPATH", ""). "forum/read.php?FID=#FID#&TID=#TID#&MID=#MID##message#MID#"; $arSearchInd["URL"] = CForumNew::PreparePath2Message($arParams["DEFAULT_URL"], $urlPatterns); } CSearch::Index("forum", $ID, $arSearchInd); } } return $ID; }
public static function GetEventInfo($row, $arParams) { if (CModule::IncludeModule('forum')) { $DESCRIPTION = unserialize($row['DESCRIPTION']); $site_id = ($row['SITE_ID'] == "s1") ? "" : "site_".$row['SITE_ID']."/"; // messages if (strpos($row['AUDIT_TYPE_ID'], "MESSAGE")) { $MID = $row['ITEM_ID']; $TID = $DESCRIPTION['TOPIC_ID']; $FID = $DESCRIPTION['FORUM_ID']; if ($arMessage = CForumMessage::GetByID($MID)) $sPath = SITE_DIR.CComponentEngine::MakePathFromTemplate($arParams['FORUM_MESSAGE_PATH'], array("FORUM_ID" => $FID, "TOPIC_ID" => $TID, "MESSAGE_ID" => $MID, "SITE_ID" => $site_id)); else if ($arTopic = CForumTopic::GetByID($TID)) $sPath = SITE_DIR.CComponentEngine::MakePathFromTemplate($arParams['FORUM_TOPIC_PATH'], array("FORUM_ID" => $FID, "TOPIC_ID" => $TID, "SITE_ID" => $site_id)); switch($row['AUDIT_TYPE_ID']) { case "FORUM_MESSAGE_APPROVE": $EventPrint = GetMessage("LOG_FORUM_MESSAGE_APPROVE"); break; case "FORUM_MESSAGE_UNAPPROVE": $EventPrint = GetMessage("LOG_FORUM_MESSAGE_UNAPPROVE"); break; case "FORUM_MESSAGE_MOVE": $EventPrint = GetMessage("LOG_FORUM_MESSAGE_MOVE"); break; case "FORUM_MESSAGE_EDIT": $EventPrint = GetMessage("LOG_FORUM_MESSAGE_EDIT"); break; case "FORUM_MESSAGE_DELETE": $EventPrint = GetMessage("LOG_FORUM_MESSAGE_DELETE"); break; } } else // topics { $TID = $row["ITEM_ID"]; $FID = $DESCRIPTION['FORUM_ID']; if ($arTopic = CForumTopic::GetByID($TID)) $sPath = SITE_DIR.CComponentEngine::MakePathFromTemplate($arParams['FORUM_TOPIC_PATH'], array("FORUM_ID" => $FID, "TOPIC_ID" => $TID, "SITE_ID" => $site_id)); switch($row['AUDIT_TYPE_ID']) { case "FORUM_TOPIC_APPROVE": $EventPrint = GetMessage("LOG_FORUM_TOPIC_APPROVE"); break; case "FORUM_TOPIC_UNAPPROVE": $EventPrint = GetMessage("LOG_FORUM_TOPIC_UNAPPROVE"); break; case "FORUM_TOPIC_STICK": $EventPrint = GetMessage("LOG_FORUM_TOPIC_STICK"); break; case "FORUM_TOPIC_UNSTICK": $EventPrint = GetMessage("LOG_FORUM_TOPIC_UNSTICK"); break; case "FORUM_TOPIC_OPEN": $EventPrint = GetMessage("LOG_FORUM_TOPIC_OPEN"); break; case "FORUM_TOPIC_CLOSE": $EventPrint = GetMessage("LOG_FORUM_TOPIC_CLOSE"); break; case "FORUM_TOPIC_DELETE": $EventPrint = GetMessage("LOG_FORUM_TOPIC_DELETE"); break; case "FORUM_TOPIC_MOVE": $EventPrint = GetMessage("LOG_FORUM_TOPIC_MOVE", array("#FORUM#" => $DESCRIPTION["FORUM_TITLE"])); break; case "FORUM_TOPIC_EDIT": $EventPrint = GetMessage("LOG_FORUM_TOPIC_EDIT"); break; } } if($arForum = CForumNew::GetByID($FID)) { $ForumPageURL = SITE_DIR.CComponentEngine::MakePathFromTemplate($arParams['FORUM_PATH'], array("FORUM_ID" => $FID, "SITE_ID" => $site_id)); $resForum = "<a href =".$ForumPageURL.">".$arForum["NAME"]."</a>"; } else { $resForum = GetMessage("LOG_FORUM"); } } return array( "eventType" => $EventPrint, "eventName" => $DESCRIPTION['TITLE'], "eventURL" => $sPath, "pageURL" => $resForum ); }
function ForumMoveMessage($FID, $TID, $Message, $NewTID = 0, $arFields, &$strErrorMessage, &$strOKMessage, $iFileSize = false) { global $USER, $DB; $arError = array(); $arOK = array(); $NewFID = 0; $arForum = array(); $arTopic = array(); $arNewForum = array(); $arNewTopic = array(); $arCurrUser = array(); $SendSubscribe = false; //************************* Input params ************************************************************************** $TID = IntVal($TID); $FID = IntVal($FID); $NewTID = IntVal($NewTID); $Message = ForumDataToArray($Message); if (empty($Message)) { $arError[] = GetMessage("FMM_NO_MESSAGE"); } if ($TID <= 0) { $arError[] = GetMessage("FMM_NO_TOPIC_SOURCE0"); } else { $arTopic = CForumTopic::GetByID($TID); if ($arTopic) { $FID = IntVal($arTopic["FORUM_ID"]); $arForum = CForumNew::GetByID($FID); } else { $arError[] = GetMessage("FMM_NO_TOPIC_SOURCE1"); } } if ($NewTID <= 0 && strLen(trim($arFields["TITLE"])) <= 0) { $arError[] = GetMessage("FMM_NO_TOPIC_RECIPIENT0"); } elseif ($NewTID > 0) { if ($NewTID == $TID) { $arError[] = GetMessage("FMM_NO_TOPIC_EQUAL"); } $arNewTopic = CForumTopic::GetByID($NewTID); if (!$arNewTopic) { $arError[] = GetMessage("FMM_NO_TOPIC_RECIPIENT1"); } elseif ($arNewTopic["STATE"] == "L") { $arError[] = GetMessage("FMM_TOPIC_IS_LINK"); } else { $NewFID = $arNewTopic["FORUM_ID"]; $arNewForum = CForumNew::GetByID($NewFID); } } //*************************/Input params ************************************************************************** //*************************!Proverka prav pol'zovatelya na forume-istochnike i forume-poluchatele********************* // Tak kak realizovan mehanizm peremeweniya tem s forumov, gde tekuwij pol'zovatel' yavlyaetsya moderatorom na forumy, // gde on moderatorov ne yavlyaetsya, to v dannom sluchae budet ispol'zovan tot zhe samyj shablon dejstvij. Isklyucheniem // yavlyaetsya to, chto esli pol'zovatel' na forume-poluchatele ne obladaet pravami moderirovaniya, tema budet neaktivna. //*************************!Proverka prav pol'zovatelya************************************************************* $arCurrUser["Perms"]["FID"] = ForumCurrUserPermissions($FID); $arCurrUser["Perms"]["NewFID"] = ForumCurrUserPermissions($NewFID); if ($arCurrUser["Perms"]["FID"] < "Q") { $arError[] = GetMessage("FMM_NO_MODERATE"); } //************************* Actions ******************************************************************************* $DB->StartTransaction(); if (count($arError) <= 0) { // Create topic if ($NewTID <= 0) { $arFields["APPROVED"] = $arNewForum["MODERATION"] == "Y" ? "N" : "Y"; if ($arCurrUser["Perms"]["NewFID"] >= "Q") { $arFields["APPROVED"] = "Y"; } $arRes = array("NAME" => GetMessage("FR_GUEST")); $ShowName = GetMessage("FR_GUEST"); $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("@ID" => implode(",", $Message), "TOPIC_ID" => $TID)); if ($db_res && ($res = $db_res->Fetch())) { $arRes["NAME"] = $res["AUTHOR_NAME"]; $arRes["ID"] = $res["AUTHOR_ID"]; } $arFieldsTopic = array("TITLE" => $arFields["TITLE"], "TITLE_SEO" => $arFields["TITLE_SEO"], "DESCRIPTION" => $arFields["DESCRIPTION"], "ICON" => $arFields["ICON"], "TAGS" => $arFields["TAGS"], "FORUM_ID" => $FID, "USER_START_ID" => $arRes["ID"], "USER_START_NAME" => $arRes["NAME"], "LAST_POSTER_NAME" => $arRes["NAME"], "LAST_POSTER_ID" => $arRes["ID"], "APPROVED" => $arFields["APPROVED"]); $NewTID = CForumTopic::Add($arFieldsTopic); if (IntVal($NewTID) <= 0) { $arError[] = GetMessage("FMM_NO_TOPIC_NOT_CREATED"); } else { $arNewTopic = CForumTopic::GetByID($NewTID); if ($arNewTopic) { $NewFID = $FID; $arNewForum = $arForum; $SendSubscribe = true; } else { $arError[] = GetMessage("FMM_NO_TOPIC_NOT_CREATED"); } } } } if (count($arError) <= 0) { // Move message $db_res = CForumMessage::GetList(array(), array("@ID" => implode(",", $Message), "TOPIC_ID" => $TID)); if ($db_res && ($res = $db_res->Fetch())) { do { // echo "NewFID: ".$NewFID." -- FID:".$FID."<br/>"; $arMessage = array(); if ($NewFID != $FID) { $arMessage["APPROVED"] = $arNewForum["MODERATION"] == "Y" ? "N" : "Y"; if ($arCurrUser["Perms"]["NewFID"] >= "Q") { $arMessage["APPROVED"] = "Y"; } $arMessage["FORUM_ID"] = $NewFID; $arMessage["POST_MESSAGE_HTML"] = ""; } if ($NewTID != $TID) { $arMessage["NEW_TOPIC"] = "N"; $arMessage["TOPIC_ID"] = $NewTID; } if (count($arMessage) > 0) { $MID = CForumMessage::Update($res["ID"], $arMessage, true); $res_log = $SendSubscribe == true ? GetMessage("F_MESSAGE_WAS_MOVED_TO_NEW") : GetMessage("F_MESSAGE_WAS_MOVED"); $res_log = str_replace(array("#ID#", "#TOPIC_TITLE#", "#TOPIC_ID#", "#NEW_TOPIC_TITLE#", "#NEW_TOPIC_ID#"), array($MID, $arTopic["TITLE"], $arTopic["ID"], $arNewTopic['TITLE'], $arNewTopic['ID']), $res_log); $res["TITLE"] = $arNewTopic['TITLE']; $res["TOPIC_ID"] = $arNewTopic['ID']; $res["beforeTITLE"] = $arTopic["TITLE"]; $res["DESCRIPTION"] = $res_log; CForumEventLog::Log("message", "move", $MID, serialize($res)); $db_res2 = CForumFiles::GetList(array(), array("FILE_MESSAGE_ID" => $res["ID"])); if ($db_res2 && ($res2 = $db_res2->Fetch())) { $arFiles = array(); do { $arFiles[] = $res2["FILE_ID"]; } while ($res2 = $db_res2->Fetch()); CForumFiles::UpdateByID($arFiles, $arMessage); } if (IntVal($MID) <= 0) { $arError[] = str_replace("##", $res["ID"], GetMessage("FMM_NO_MESSAGE_MOVE")); break; } } } while ($res = $db_res->Fetch()); } } if (count($arError) <= 0) { $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $TID), false, 1); if (!($db_res && ($res = $db_res->Fetch()))) { CForumTopic::Delete($TID); } else { CForumTopic::SetStat($TID); } $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $NewTID), false, 1); if (!($db_res && ($res = $db_res->Fetch()))) { CForumTopic::Delete($NewTID); } else { CForumTopic::SetStat($NewTID); } CForumNew::SetStat($FID); if ($NewFID != $FID) { CForumNew::SetStat($NewFID); } } if (count($arError) <= 0) { $DB->Commit(); } else { $DB->Rollback(); } if (count($arError) > 0) { $strErrorMessage .= implode(". \n", $arError) . ". \n"; } else { $strOKMessage .= GetMessage("FMM_YES_MESSAGE_MOVE"); if ($SendSubscribe) { foreach ($Message as $MID) { CForumMessage::SendMailMessage($MID, array(), false, "NEW_FORUM_MESSAGE"); } } return true; } return false; }
function _check_iblock_prop($arProperty = false) { static $dataType = 'IblockProperties'; $checked = $this->_dataCache($dataType); if (!$checked) { $arProps = $this->GetProperties(); foreach ($arProps as $code => &$arIBProp) { if (!isset($arProperty[$code])) { continue; } if ($arIBProp['PROPERTY_TYPE'] != $arProperty[$code]['type'] || $arIBProp['USER_TYPE'] != null) { continue; } unset($arProperty[$code]); } $prp = new CIBlockProperty(); foreach ($arProperty as $sPropertyCode => $arPropertyParams) { $properties = array("IBLOCK_ID" => $this->IBLOCK_ID, "ACTIVE" => "Y", "CODE" => $sPropertyCode, "MULTIPLE" => "N", "PROPERTY_TYPE" => $arPropertyParams["type"], "NAME" => $arPropertyParams["name"]); if (isset($arPropertyParams["properties"])) { $properties += $arPropertyParams["properties"]; } $res = $prp->Add($properties); } if ($this->FORUM_ID !== null && empty($this->arRootSection) && CModule::IncludeModule('forum')) { $arForum = CForumNew::GetByID($this->FORUM_ID); if ($arForum['ACTIVE'] == 'Y') { $arSites = CForumNew::GetSites($this->FORUM_ID); foreach ($arSites as $siteID => $forumUrl) { if (strpos($forumUrl, '/community/forum/') === 0) { $arSites[$siteID] = str_replace(array('///', '//'), '/', $this->base_url . "/element/comment/#TOPIC_ID#/#MESSAGE_ID#/"); } } $arUpForum = array(); $arUpForum["SITES"] = $arSites; CForumNew::Update($this->FORUM_ID, $arUpForum); } } $this->_dataCache($dataType, true); } }
$ind++; if ($NUM > 0 && $ind > $NUM) { break; } ?> <font class="text"> <img src="/bitrix/templates/.default/forum/forum_pieces/images/news_bullet.gif" width="3" height="5" border="0"> <a href="<?php echo $PATH2MESSAGES . (strpos($PATH2MESSAGES, "?") !== false ? "&" : "?") . "FID=" . $ar_Topic["FORUM_ID"] . "&TID=" . $ar_Topic["ID"]; ?> "><?php echo htmlspecialcharsEx($ar_Topic["TITLE"]); ?> </a> <?php if ($FID <= 0) { $arForum = CForumNew::GetByID($ar_Topic["FORUM_ID"]); ?> (<?php echo str_replace("#FORUM#", htmlspecialcharsEx($arForum["NAME"]), GetMessage("FTP_IN_FORUM")); ?> ) <?php } ?> <a href="<?php echo $PATH2MESSAGES . (strpos($PATH2MESSAGES, "?") !== false ? "&" : "?") . "FID=" . $ar_Topic["FORUM_ID"] . "&TID=" . $ar_Topic["ID"] . "&MID=" . $ar_Topic["LAST_MESSAGE_ID"] . "#message" . $ar_Topic["LAST_MESSAGE_ID"]; ?> "><img src="/bitrix/templates/.default/forum/forum_pieces/images/icon_latest_reply.gif" width="18" height="9" border="0" alt="<?php echo GetMessage("FTP_LAST_MESS"); ?> "></a>
function onAfterMessageAdd($ID, $arFields) { $bSocNetLogRecordExists = false; // add log comment if ((!array_key_exists('PARAM1', $arFields) || $arFields['PARAM1'] != 'IB') && array_key_exists('PARAM2', $arFields) && intval($arFields['PARAM2']) > 0) { $dbRes = CSocNetLog::GetList(array('ID' => 'DESC'), array("EVENT_ID" => "wiki", "SOURCE_ID" => $arFields["PARAM2"]), false, false, array('ID', 'ENTITY_TYPE', 'ENTITY_ID', 'TMP_ID', 'URL')); if ($arRes = $dbRes->Fetch()) { $log_id = $arRes['TMP_ID']; $url = $arRes['URL']; $bSocNetLogRecordExists = true; } else { $rsElement = CIBlockElement::GetByID($arFields['PARAM2']); if ($arElement = $rsElement->Fetch()) { $arWikiElement = CWiki::GetElementById($arElement['ID'], array('IBLOCK_ID' => $arElement['IBLOCK_ID'])); $CWikiParser = new CWikiParser(); $parserLog = new logTextParser(); $arAllow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "N", "VIDEO" => "N", "TABLE" => "N"); $text4message = $CWikiParser->Parse($arElement['DETAIL_TEXT'], $arElement['DETAIL_TEXT_TYPE'], $arWikiElement['IMAGES']); $text4message = preg_replace("#<br[\\s]*\\/>#is", "#BR#", $text4message); $text4message = htmlspecialcharsback($parserLog->convert($text4message, array(), $arAllow)); $text4message = preg_replace("#\\#BR\\##is", "\n", $text4message); $text4message = $CWikiParser->Clear($text4message); $url = str_replace(array('#group_id#', '#wiki_name#'), array(intval($this->SonetGroupID), urlencode($arElement['NAME'])), $this->arPath['PATH_TO_POST']); $arSoFields = array('ENTITY_TYPE' => SONET_SUBSCRIBE_ENTITY_GROUP, 'IS_CUSTOM_ET' => 'N', 'ENTITY_ID' => intval($this->SonetGroupID), 'EVENT_ID' => 'wiki', 'USER_ID' => $arElement['CREATED_BY'], 'LOG_DATE' => $arElement['DATE_CREATE'], 'LOG_UPDATE' => $arElement['DATE_CREATE'], 'TITLE_TEMPLATE' => GetMessage('WIKI_SONET_LOG_TITLE_TEMPLATE'), 'TITLE' => $arElement['NAME'], 'MESSAGE' => $text4message, 'TEXT_MESSAGE' => '', 'MODULE_ID' => 'wiki', 'URL' => $url, 'CALLBACK_FUNC' => false, 'SOURCE_ID' => $arFields['PARAM2'], 'PARAMS' => 'forum_id=' . $this->ForumID, 'RATING_TYPE_ID' => 'IBLOCK_ELEMENT', 'RATING_ENTITY_ID' => intval($arFields['PARAM2'])); $log_id = CSocNetLog::Add($arSoFields, false); if (intval($log_id) > 0) { CSocNetLog::Update($log_id, array("TMP_ID" => $log_id)); CSocNetLogRights::SetForSonet($log_id, SONET_SUBSCRIBE_ENTITY_GROUP, intval($this->SonetGroupID), "wiki", "view", true); } } } if (intval($log_id) > 0) { $arForum = CForumNew::GetByID($this->ForumID); $parser = new textParser(LANGUAGE_ID, $this->arPath['PATH_TO_SMILE']); $parser->image_params['width'] = false; $parser->image_params['height'] = false; $arAllow = array('HTML' => "N", 'ANCHOR' => "N", 'BIU' => "N", 'IMG' => "N", 'LIST' => "N", 'QUOTE' => "N", 'CODE' => "N", 'FONT' => "N", 'UPLOAD' => $arForum['ALLOW_UPLOAD'], 'NL2BR' => "N", 'SMILES' => "N"); $sAuthorForMail = str_replace('#TITLE#', $arMessage['AUTHOR_NAME'], GetMessage('SONET_FORUM_LOG_TEMPLATE_GUEST')); if ($bSocNetLogRecordExists) { $arMessage = CForumMessage::GetByIDEx($ID); $parser = new textParser(LANGUAGE_ID, $this->arPath['PATH_TO_SMILE']); $parser->image_params['width'] = false; $parser->image_params['height'] = false; if (intVal($arMessage['AUTHOR_ID']) > 0) { $sAuthorForMail = str_replace(array('#URL#', '#TITLE#'), array('http://' . SITE_SERVER_NAME . CComponentEngine::MakePathFromTemplate($this->arPath['PATH_TO_USER'], array('user_id' => $arMessage['AUTHOR_ID'])), $arMessage['AUTHOR_NAME']), GetMessage('SONET_FORUM_LOG_TEMPLATE_AUTHOR')); } $arFieldsForSocnet = array('ENTITY_TYPE' => SONET_SUBSCRIBE_ENTITY_GROUP, 'ENTITY_ID' => intval($this->SonetGroupID), 'EVENT_ID' => 'wiki_comment', '=LOG_DATE' => $GLOBALS['DB']->CurrentTimeFunction(), 'MESSAGE' => $parser->convert($arMessage['POST_MESSAGE'], $arAllow), 'TEXT_MESSAGE' => $parser->convert4mail($arMessage['POST_MESSAGE'] . $sAuthorForMail), 'URL' => $url, 'MODULE_ID' => false, 'SOURCE_ID' => $ID, 'LOG_ID' => $log_id, 'RATING_TYPE_ID' => 'FORUM_POST', 'RATING_ENTITY_ID' => intval($arMessage['ID'])); if (intVal($arMessage['AUTHOR_ID']) > 0) { $arFieldsForSocnet['USER_ID'] = $arMessage['AUTHOR_ID']; } CSocNetLogComments::Add($arFieldsForSocnet); } else { $dbMessage = CForumMessage::GetListEx(array(), array('TOPIC_ID' => $arFields["TOPIC_ID"], "NEW_TOPIC" => "N")); while ($arMessage = $dbMessage->GetNext()) { if (intVal($arMessage['AUTHOR_ID']) > 0) { $sAuthorForMail = str_replace(array('#URL#', '#TITLE#'), array('http://' . SITE_SERVER_NAME . CComponentEngine::MakePathFromTemplate($this->arPath['PATH_TO_USER'], array('user_id' => $arMessage['AUTHOR_ID'])), $arMessage['AUTHOR_NAME']), GetMessage('SONET_FORUM_LOG_TEMPLATE_AUTHOR')); } $arFieldsForSocnet = array('ENTITY_TYPE' => SONET_SUBSCRIBE_ENTITY_GROUP, 'ENTITY_ID' => intval($this->SonetGroupID), 'EVENT_ID' => 'wiki_comment', '=LOG_DATE' => $GLOBALS['DB']->CharToDateFunction($arMessage['POST_DATE'], "FULL", SITE_ID), 'MESSAGE' => $parser->convert($arMessage['POST_MESSAGE'], $arAllow), 'TEXT_MESSAGE' => $parser->convert4mail($arMessage['POST_MESSAGE'] . $sAuthorForMail), 'URL' => $url, 'MODULE_ID' => false, 'SOURCE_ID' => $ID, 'LOG_ID' => $log_id, 'RATING_TYPE_ID' => 'FORUM_POST', 'RATING_ENTITY_ID' => intval($arMessage['ID'])); if (intVal($arMessage['AUTHOR_ID']) > 0) { $arFieldsForSocnet['USER_ID'] = $arMessage['AUTHOR_ID']; } CSocNetLogComments::Add($arFieldsForSocnet); } } } } }
private function createLogComment($messageID, $bSocNetLogRecordExists, $iblockElementID, $topicID, $arLogParams) { $dbComment = CSocNetLogComments::GetList(array(), array('EVENT_ID' => 'wiki_comment', 'SOURCE_ID' => $messageID), false, false, array('ID')); if (($arComment = $dbComment->Fetch()) && intval($arComment['ID']) > 0) { return false; } $arForum = CForumNew::GetByID($this->ForumID); $parser = new textParser(LANGUAGE_ID, $this->arPath['PATH_TO_SMILE']); $parser->image_params['width'] = false; $parser->image_params['height'] = false; $arAllow = array('HTML' => "N", 'ANCHOR' => "N", 'BIU' => "N", 'IMG' => "N", 'LIST' => "N", 'QUOTE' => "N", 'CODE' => "N", 'FONT' => "N", 'UPLOAD' => $arForum['ALLOW_UPLOAD'], 'NL2BR' => "N", 'SMILES' => "N"); if ($bSocNetLogRecordExists) { $arMessage = CForumMessage::GetByIDEx($messageID); $sAuthorForMail = str_replace('#TITLE#', $arMessage['AUTHOR_NAME'], GetMessage('SONET_FORUM_LOG_TEMPLATE_GUEST')); $parser = new textParser(LANGUAGE_ID, $this->arPath['PATH_TO_SMILE']); $parser->image_params['width'] = false; $parser->image_params['height'] = false; if (intVal($arMessage['AUTHOR_ID']) > 0) { $sAuthorForMail = str_replace(array('#URL#', '#TITLE#'), array('http://' . SITE_SERVER_NAME . CComponentEngine::MakePathFromTemplate($this->arPath['PATH_TO_USER'], array('user_id' => $arMessage['AUTHOR_ID'])), $arMessage['AUTHOR_NAME']), GetMessage('SONET_FORUM_LOG_TEMPLATE_AUTHOR')); } $arFieldsForSocnet = array('ENTITY_TYPE' => SONET_SUBSCRIBE_ENTITY_GROUP, 'ENTITY_ID' => intval($this->SonetGroupID), 'EVENT_ID' => 'wiki_comment', '=LOG_DATE' => $GLOBALS['DB']->CharToDateFunction($arMessage['POST_DATE'], "FULL", SITE_ID), 'MESSAGE' => $parser->convert($arMessage['POST_MESSAGE'], $arAllow), 'TEXT_MESSAGE' => $parser->convert4mail($arMessage['POST_MESSAGE'] . $sAuthorForMail), 'URL' => $arLogParams["URL"], 'MODULE_ID' => false, 'SOURCE_ID' => $messageID, 'LOG_ID' => $arLogParams["LOG_ID"], 'RATING_TYPE_ID' => 'FORUM_POST', 'RATING_ENTITY_ID' => intval($arMessage['ID'])); if (intVal($arMessage['AUTHOR_ID']) > 0) { $arFieldsForSocnet['USER_ID'] = $arMessage['AUTHOR_ID']; } $log_comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); if ($log_comment_id) { CSocNetLog::CounterIncrement($log_comment_id, false, false, "LC"); if (CModule::IncludeModule("im") && intval($arMessage["AUTHOR_ID"]) > 0 && $arMessage["AUTHOR_ID"] != $arLogParams["LOG_USER_ID"]) { $rsUnFollower = CSocNetLogFollow::GetList(array("USER_ID" => $arLogParams["LOG_USER_ID"], "CODE" => "L" . $arLogParams["LOG_ID"], "TYPE" => "N"), array("USER_ID")); $arUnFollower = $rsUnFollower->Fetch(); if (!$arUnFollower) { $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $arLogParams["LOG_USER_ID"], "FROM_USER_ID" => $arMessage["AUTHOR_ID"], "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "wiki", "NOTIFY_EVENT" => "comment"); $arParams["TITLE"] = str_replace(array("\r\n", "\n"), " ", $arLogParams["LOG_TITLE"]); $arParams["TITLE"] = TruncateText($arParams["TITLE"], 100); $arParams["TITLE_OUT"] = TruncateText($arParams["TITLE"], 255); $arTmp = CSocNetLogTools::ProcessPath(array("ELEMENT_URL" => $arLogParams["URL"]), $arLogParams["LOG_USER_ID"]); $serverName = $arTmp["SERVER_NAME"]; $url = $arTmp["URLS"]["ELEMENT_URL"]; $arMessageFields["NOTIFY_TAG"] = "WIKI|COMMENT|" . $iblockElementID; $arMessageFields["NOTIFY_MESSAGE"] = GetMessage("WIKI_SONET_IM_COMMENT", array("#title#" => "<a href=\"" . $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($arParams["TITLE"]) . "</a>")); $arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("WIKI_SONET_IM_COMMENT", array("#title#" => htmlspecialcharsbx($arParams["TITLE_OUT"]))) . " (" . $serverName . $url . ")#BR##BR#" . $arFieldsForSocnet["MESSAGE"]; CIMNotify::Add($arMessageFields); } } } } else { $dbMessage = CForumMessage::GetListEx(array(), array("TOPIC_ID" => $topicID, "NEW_TOPIC" => "N")); while ($arMessage = $dbMessage->GetNext()) { if (intVal($arMessage['AUTHOR_ID']) > 0) { $sAuthorForMail = str_replace(array('#URL#', '#TITLE#'), array('http://' . SITE_SERVER_NAME . CComponentEngine::MakePathFromTemplate($this->arPath['PATH_TO_USER'], array('user_id' => $arMessage['AUTHOR_ID'])), $arMessage['AUTHOR_NAME']), GetMessage('SONET_FORUM_LOG_TEMPLATE_AUTHOR')); } $arFieldsForSocnet = array('ENTITY_TYPE' => SONET_SUBSCRIBE_ENTITY_GROUP, 'ENTITY_ID' => intval($this->SonetGroupID), 'EVENT_ID' => 'wiki_comment', '=LOG_DATE' => $GLOBALS['DB']->CharToDateFunction($arMessage['POST_DATE'], "FULL", SITE_ID), 'MESSAGE' => $parser->convert($arMessage['POST_MESSAGE'], $arAllow), 'TEXT_MESSAGE' => $parser->convert4mail($arMessage['POST_MESSAGE'] . $sAuthorForMail), 'URL' => $arLogParams["URL"], 'MODULE_ID' => false, 'SOURCE_ID' => $arMessage['ID'], 'LOG_ID' => $arLogParams["LOG_ID"], 'RATING_TYPE_ID' => 'FORUM_POST', 'RATING_ENTITY_ID' => intval($arMessage['ID'])); if (intVal($arMessage['AUTHOR_ID']) > 0) { $arFieldsForSocnet['USER_ID'] = $arMessage['AUTHOR_ID']; } $log_comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); CSocNetLog::CounterIncrement($log_comment_id, false, false, "LC"); } } }
if ($arParams["FORUM_ID"]) { $FORUM_TOPIC_ID = 0; if ($arParams["REPORT_ID"]) { $dbReport = CTimeManReportFull::GetByID($arParams["REPORT_ID"]); $arReport = $dbReport->Fetch(); $FORUM_TOPIC_ID = $arReport["FORUM_TOPIC_ID"]; } else { if ($arParams['ENTRY_ID']) { $dbRes = CTimeManEntry::GetByID($arParams['ENTRY_ID']); $arEntry = $dbRes->Fetch(); $FORUM_TOPIC_ID = $arEntry["FORUM_TOPIC_ID"]; } } if ($FORUM_TOPIC_ID > 0) { CModule::IncludeModule("forum"); $parser = new forumTextParser(LANGUAGE_ID); $allow = forumTextParser::GetFeatures(CForumNew::GetByID($arParams["FORUM_ID"])); $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $FORUM_TOPIC_ID)); while ($ar_res = $db_res->Fetch()) { $dbAuthor = CUser::GetByID($ar_res["AUTHOR_ID"]); $arAuthor = $dbAuthor->Fetch(); $ar_res["AUTHOR_PHOTO"] = $arAuthor['PERSONAL_PHOTO'] > 0 ? CIntranetUtils::InitImage($arAuthor['PERSONAL_PHOTO'], 32, 0, BX_RESIZE_IMAGE_EXACT) : array(); $ar_res["AUTHOR_URL"] = str_replace(array('#ID#', '#USER_ID#'), $ar_res["AUTHOR_ID"], $user_url); $ar_res["POST_MESSAGE_HTML"] = $parser->convert(COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $ar_res["POST_MESSAGE_FILTER"] : $ar_res["POST_MESSAGE"], $allow, "html"); $arResult["COMMENTS"][] = $ar_res; } } $this->IncludeComponentTemplate(); } // ***************************************************************************************** // *****************************************************************************************
function SetStat($ID = 0, $arParams = array()) { global $DB; $ID = intVal($ID); if ($ID <= 0) { return false; } $arParams = is_array($arParams) ? $arParams : array(); $arMessage = is_array($arParams["MESSAGE"]) ? $arParams["MESSAGE"] : array(); if ($arMessage["FORUM_ID"] != $ID) { $arMessage = array(); } $arForum = CForumNew::GetByID($ID); $arParams["ACTION"] = $arParams["ACTION"] == "DECREMENT" || $arParams["ACTION"] == "UPDATE" ? $arParams["ACTION"] : "INCREMENT"; $arParams["POSTS"] = intVal($arParams["POSTS"] > 0 ? $arParams["POSTS"] : 1); $arFields = array(); if (empty($arMessage)) { // full recount } elseif ($arParams["ACTION"] == "INCREMENT") { if ($arMessage["ID"] > $arForum["ABS_LAST_MESSAGE_ID"]) { $arFields["ABS_LAST_POSTER_ID"] = intVal($arMessage["AUTHOR_ID"]) > 0 ? $arMessage["AUTHOR_ID"] : false; $arFields["ABS_LAST_POSTER_NAME"] = $arMessage["AUTHOR_NAME"]; $arFields["ABS_LAST_POST_DATE"] = $arMessage["POST_DATE"]; $arFields["ABS_LAST_MESSAGE_ID"] = $arMessage["ID"]; if ($arMessage["APPROVED"] == "Y") { $arFields["LAST_POSTER_ID"] = $arFields["ABS_LAST_POSTER_ID"]; $arFields["LAST_POSTER_NAME"] = $arFields["ABS_LAST_POSTER_NAME"]; $arFields["LAST_POST_DATE"] = $arFields["ABS_LAST_POST_DATE"]; $arFields["LAST_MESSAGE_ID"] = $arFields["ABS_LAST_MESSAGE_ID"]; } } if ($arMessage["APPROVED"] == "Y") { $arFields["=POSTS"] = "POSTS+1"; if ($arMessage["NEW_TOPIC"] == "Y") { $arFields["=TOPICS"] = "TOPICS+1"; } } else { $arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1"; } } elseif ($arMessage["ID"] > $arForum["ABS_LAST_MESSAGE_ID"]) { // full recount } elseif ($arParams["ACTION"] == "DECREMENT" && ($arMessage["ID"] == $arForum["ABS_LAST_MESSAGE_ID"] || $arMessage["ID"] == $arForum["LAST_MESSAGE_ID"])) { // full recount } elseif ($arParams["ACTION"] == "DECREMENT") { if ($arMessage["APPROVED"] == "Y") { $arFields["=POSTS"] = "POSTS-1"; if ($arMessage["NEW_TOPIC"] == "Y") { $arFields["=TOPICS"] = "TOPICS-1"; } } else { $arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED-1"; } } elseif ($arParams["ACTION"] == "UPDATE") { if ($arMessage["APPROVED"] == "Y") { if ($arMessage["ID"] > $arForum["LAST_MESSAGE_ID"]) { $arFields["LAST_POSTER_ID"] = intVal($arMessage["AUTHOR_ID"]) > 0 ? $arMessage["AUTHOR_ID"] : false; $arFields["LAST_POSTER_NAME"] = $arMessage["AUTHOR_NAME"]; $arFields["LAST_POST_DATE"] = $arMessage["POST_DATE"]; $arFields["LAST_MESSAGE_ID"] = $arMessage["ID"]; } $arFields["=POSTS"] = "POSTS+1"; $arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED-1"; if ($arMessage["NEW_TOPIC"] == "Y") { $arFields["=TOPICS"] = "TOPICS+1"; } } elseif ($arMessage["ID"] != $arForum["LAST_MESSAGE_ID"]) { $arFields["=POSTS"] = "POSTS-1"; $arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1"; if ($arMessage["NEW_TOPIC"] == "Y") { $arFields["=TOPICS"] = "TOPICS-1"; } } } if (empty($arFields)) { $res = CForumMessage::GetList(array(), array("FORUM_ID" => $ID), "cnt_not_approved"); $res = is_array($res) ? $res : array(); $res["CNT"] = intVal($res["CNT"]) - intVal($res["CNT_NOT_APPROVED"]); $res["CNT"] = $res["CNT"] > 0 ? $res["CNT"] : 0; $arFields = array("TOPICS" => CForumTopic::GetList(array(), array("FORUM_ID" => $ID, "APPROVED" => "Y"), true), "POSTS" => $res["CNT"], "LAST_POSTER_ID" => false, "LAST_POSTER_NAME" => false, "LAST_POST_DATE" => false, "LAST_MESSAGE_ID" => intVal($res["LAST_MESSAGE_ID"]), "POSTS_UNAPPROVED" => intVal($res["CNT_NOT_APPROVED"]), "ABS_LAST_POSTER_ID" => false, "ABS_LAST_POSTER_NAME" => false, "ABS_LAST_POST_DATE" => false, "ABS_LAST_MESSAGE_ID" => intVal($res["ABS_LAST_MESSAGE_ID"])); if ($arFields["ABS_LAST_MESSAGE_ID"] > 0) { $res = CForumMessage::GetByID($arFields["ABS_LAST_MESSAGE_ID"], array("FILTER" => "N")); $arFields["ABS_LAST_POSTER_ID"] = intVal($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false; $arFields["ABS_LAST_POSTER_NAME"] = $res["AUTHOR_NAME"]; $arFields["ABS_LAST_POST_DATE"] = $res["POST_DATE"]; if (intVal($arFields["LAST_MESSAGE_ID"]) > 0) { if ($arFields["LAST_MESSAGE_ID"] < $arFields["ABS_LAST_MESSAGE_ID"]) { $res = CForumMessage::GetByID($arFields["LAST_MESSAGE_ID"], array("FILTER" => "N")); } $arFields["LAST_POSTER_ID"] = intVal($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false; $arFields["LAST_POSTER_NAME"] = $res["AUTHOR_NAME"]; $arFields["LAST_POST_DATE"] = $res["POST_DATE"]; } } } if (!CForumNew::CheckFields("UPDATE", $arFields)) { return false; } $strUpdate = $DB->PrepareUpdate("b_forum", $arFields); if (!empty($arFields)) { $res = array(); foreach ($arFields as $key => $val) { if (substr($key, 0, 1) == "=") { $key = substr($key, 1); if (!empty($key)) { $res[] = $key . "=" . (empty($val) ? $key . "+1" : $val); } } } if (!empty($res)) { $strUpdate = empty($strUpdate) ? "" : $strUpdate . ","; $strUpdate .= implode(", ", $res); } } if (empty($strUpdate)) { return false; } $strSql = "UPDATE b_forum SET " . $strUpdate . " WHERE ID=" . $ID; return $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); }
die; } define("FORUM_MODULE_PAGE", "NEW_TOPIC"); if ($GLOBALS["SHOW_FORUM_DEBUG_INFO"]) { $prexectime = getmicrotime(); } if ($MESSAGE_TYPE == "EDIT") { $arMessage = CForumMessage::GetByID($MID); if (!$arMessage) { LocalRedirect("index.php"); die; } $FID = IntVal($arMessage["FORUM_ID"]); $TID = IntVal($arMessage["TOPIC_ID"]); } $arForum = CForumNew::GetByID($FID); ForumSetLastVisit(); if (!$arForum) { LocalRedirect("index.php"); die; } if ($MESSAGE_TYPE == "NEW" && !CForumTopic::CanUserAddTopic($FID, $USER->GetUserGroupArray(), $USER->GetID())) { $APPLICATION->AuthForm(GetMessage("FNT_NO_NPERMS")); } if ($MESSAGE_TYPE == "EDIT" && !CForumMessage::CanUserUpdateMessage($MID, $USER->GetUserGroupArray(), IntVal($USER->GetID()))) { $APPLICATION->AuthForm(GetMessage("FNT_NO_EPERMS")); } if ($GLOBALS["SHOW_FORUM_DEBUG_INFO"]) { $arForumDebugInfo[] = "<br><font color=\"#FF0000\">Initializing Variables: " . Round(getmicrotime() - $prexectime, 3) . " sec</font>"; } if ($GLOBALS["SHOW_FORUM_DEBUG_INFO"]) {
function AddComment_Files($arFields) { if (!CModule::IncludeModule("forum")) { return false; } if (!CModule::IncludeModule("iblock")) { return false; } $dbResult = CSocNetLog::GetList(array(), array("ID" => $arFields["LOG_ID"]), false, false, array("ID", "SOURCE_ID", "PARAMS")); $bFound = false; if ($arLog = $dbResult->Fetch()) { if (strlen($arLog["PARAMS"]) > 0) { $arFieldsParams = explode("&", $arLog["PARAMS"]); if (is_array($arFieldsParams) && count($arFieldsParams) > 0) { foreach ($arFieldsParams as $tmp) { list($key, $value) = explode("=", $tmp); if ($key == "forum_id") { $FORUM_ID = intval($value); break; } } } } if ($FORUM_ID > 0 && intval($arLog["SOURCE_ID"]) > 0) { $bFound = true; } } if ($bFound) { $arElement = false; $arFilter = array("ID" => $arLog["SOURCE_ID"]); $arSelectedFields = array("IBLOCK_ID", "ID", "NAME", "TAGS", "CODE", "IBLOCK_SECTION_ID", "DETAIL_PAGE_URL", "CREATED_BY", "PREVIEW_PICTURE", "PREVIEW_TEXT", "PROPERTY_FORUM_TOPIC_ID", "PROPERTY_FORUM_MESSAGE_CNT"); $db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields); if ($db_res && ($res = $db_res->GetNext())) { $arElement = $res; } if ($arElement) { // check iblock properties CSocNetLogTools::AddComment_Review_CheckIBlock_Forum($arElement); $dbMessage = CForumMessage::GetList(array(), array("PARAM1" => "IB", "PARAM2" => $arElement["ID"])); if (!($arMessage = $dbMessage->Fetch())) { // Add Topic and Root Message $arForum = CForumNew::GetByID($FORUM_ID); $sImage = ""; if (intVal($arElement["PREVIEW_PICTURE"]) > 0) { $arImage = CFile::GetFileArray($arElement["PREVIEW_PICTURE"]); if (!empty($arImage)) { $sImage = $arForum["ALLOW_IMG"] == "Y" ? "[IMG]" . $arImage["SRC"] . "[/IMG]" : ''; } } $sElementPreview = $arElement["~PREVIEW_TEXT"]; if ($arForum["ALLOW_HTML"] != "Y") { $sElementPreview = strip_tags($sElementPreview); } $strFirstMessage = str_replace(array("#IMAGE#", "#TITLE#", "#BODY#"), array($sImage, $arElement["~NAME"], $sElementPreview), GetMessage("WD_TEMPLATE_MESSAGE")); $TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot_Forum($arElement, $FORUM_ID, true, $strFirstMessage); $bNewTopic = true; } else { $TOPIC_ID = $arMessage["TOPIC_ID"]; } if (intval($TOPIC_ID) > 0) { // Add comment $messageID = false; $arFieldsMessage = array("POST_MESSAGE" => $arFields["TEXT_MESSAGE"], "USE_SMILES" => "Y", "PARAM2" => $arElement["ID"], "APPROVED" => "Y"); $messageID = ForumAddMessage("REPLY", $FORUM_ID, $TOPIC_ID, 0, $arFieldsMessage, $sError, $sNote); if (!$messageID) { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } else { CSocNetLogTools::AddComment_Review_UpdateElement_Forum($arElement, $TOPIC_ID, $bNewTopic); } } else { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } } else { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } } else { $strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR"); } return array("SOURCE_ID" => $messageID, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $messageID, "ERROR" => $strError, "NOTES" => ""); }
public function OnAfterPhotoCommentAddForum($ID, $arFields) { static $arSiteWorkgroupsPage; if (!CModule::IncludeModule('iblock')) { return; } if (!$this->IsSocnet) { return; } if ((!array_key_exists("PARAM1", $arFields) || $arFields["PARAM1"] != "IB") && array_key_exists("PARAM2", $arFields) && intval($arFields["PARAM2"]) > 0) { $bSocNetLogRecordExists = false; $dbRes = CSocNetLog::GetList(array("ID" => "DESC"), array("EVENT_ID" => "photo_photo", "SOURCE_ID" => $arFields["PARAM2"]), false, false, array("ID", "ENTITY_TYPE", "ENTITY_ID", "TMP_ID", "USER_ID", "TITLE", "URL", "PARAMS")); if ($arRes = $dbRes->Fetch()) { $log_id = $arRes["ID"]; $entity_type = $arRes["ENTITY_TYPE"]; $entity_id = $arRes["ENTITY_ID"]; $log_title = $arRes["TITLE"]; $log_url = $arRes["URL"]; $log_user_id = $arRes["USER_ID"]; if (strlen($arRes["PARAMS"]) > 0) { $arTmp = unserialize($arRes["PARAMS"]); if ($arTmp) { if (array_key_exists("SECTION_NAME", $arTmp) && strlen($arTmp["SECTION_NAME"]) > 0) { $log_section_name = $arTmp["SECTION_NAME"]; } if (array_key_exists("SECTION_URL", $arTmp) && strlen($arTmp["SECTION_URL"]) > 0) { $log_section_url = $arTmp["SECTION_URL"]; } } } $bSocNetLogRecordExists = true; } else { $rsElement = CIBlockElement::GetByID($arFields["PARAM2"]); if ($arElement = $rsElement->Fetch()) { $url = $this->arPath["DETAIL_URL"]; $sAuthorName = GetMessage("SONET_PHOTO_LOG_GUEST"); if (intval($arElement["CREATED_BY"]) > 0) { $rsUser = CUser::GetByID($arElement["CREATED_BY"]); if ($arUser = $rsUser->Fetch()) { $sAuthorName = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false); } } if (in_array($this->entity_type, array(SONET_ENTITY_USER, SONET_ENTITY_GROUP)) && intval($this->entity_id) > 0) { $entity_type = $this->entity_type; $entity_id = $this->entity_id; $alias = ($this->entity_type == SONET_ENTITY_GROUP ? "group" : "user") . "_" . $this->entity_id; } $arLogParams = array("FORUM_ID" => intval($this->ForumID)); $rsIBlock = CIBlock::GetByID($arElement["IBLOCK_ID"]); if ($arIBlock = $rsIBlock->Fetch()) { $arLogParams["IBLOCK_ID"] = $arIBlock["ID"]; $arLogParams["IBLOCK_TYPE"] = $arIBlock["IBLOCK_TYPE_ID"]; } $rsSection = CIBlockSection::GetByID($arElement["IBLOCK_SECTION_ID"]); if ($arSection = $rsSection->Fetch()) { $arLogParams["SECTION_ID"] = $arSection["ID"]; $arLogParams["SECTION_NAME"] = $arSection["NAME"]; $arLogParams["SECTION_URL"] = str_replace("#SECTION_ID#", $arSection["ID"], $this->arPath["SECTION_URL"]); $arSectionPath = array(); $bPassword = false; $dbSection = CIBlockSection::GetList(array("LEFT_MARGIN" => "ASC"), array("IBLOCK_ID" => intval($arLogParams["IBLOCK_ID"]), "<=LEFT_BORDER" => intval($arSection["LEFT_MARGIN"]), ">=RIGHT_BORDER" => intval($arSection["RIGHT_MARGIN"]), "<=DEPTH_LEVEL" => intval($arSection["DEPTH_LEVEL"])), false, array("ID", "IBLOCK_ID", "NAME", "CODE", "CREATED_BY", "DEPTH_LEVEL", "LEFT_MARGIN", "RIGHT_MARGIN", "UF_PASSWORD")); while ($arPath = $dbSection->Fetch()) { $arSectionPath[] = $arPath; if (strlen(trim($arPath["UF_PASSWORD"])) > 0) { $bPassword = true; break; } } if (!$alias) { $entity_type = SONET_ENTITY_USER; $entity_id = $arSectionPath[0]["CREATED_BY"]; $alias = $arSectionPath[0]["CODE"]; } if (!$arSiteWorkgroupsPage && IsModuleInstalled("extranet") && $entity_type == SONET_ENTITY_GROUP) { $rsSite = CSite::GetList($by = "sort", $order = "desc", array("ACTIVE" => "Y")); while ($arSite = $rsSite->Fetch()) { $arSiteWorkgroupsPage[$arSite["ID"]] = COption::GetOptionString("socialnetwork", "workgroups_page", $arSite["DIR"] . "workgroups/", $arSite["ID"]); } } if (is_set($arLogParams["SECTION_URL"]) && is_array($arSiteWorkgroupsPage) && $entity_type == SONET_ENTITY_GROUP) { foreach ($arSiteWorkgroupsPage as $groups_page) { if (strpos($arLogParams["SECTION_URL"], $groups_page) === 0) { $arLogParams["SECTION_URL"] = "#GROUPS_PATH#" . substr($arLogParams["SECTION_URL"], strlen($groups_page), strlen($arLogParams["SECTION_URL"]) - strlen($groups_page)); } } } } $arLogParams["ALIAS"] = $alias; $arSonetFields = array("ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "EVENT_ID" => "photo_photo", "LOG_DATE" => $arElement["TIMESTAMP_X"], "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $sAuthorName, GetMessage("SONET_PHOTOPHOTO_LOG_1")), "TITLE" => $arElement["NAME"], "MESSAGE" => "", "TEXT_MESSAGE" => "", "URL" => CComponentEngine::MakePathFromTemplate($url, array("ELEMENT_ID" => $arElement["ID"], "element_id" => $arElement["ID"], "SECTION_ID" => $arElement["IBLOCK_SECTION_ID"], "section_id" => $arElement["IBLOCK_SECTION_ID"])), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $arElement["ID"], "PARAMS" => serialize($arLogParams), "RATING_TYPE_ID" => "IBLOCK_ELEMENT", "RATING_ENTITY_ID" => $arElement["ID"]); if (intval($arElement["CREATED_BY"]) > 0) { $arSonetFields["USER_ID"] = $arElement["CREATED_BY"]; } $log_id = CSocNetLog::Add($arSonetFields, false); if (intval($log_id) > 0) { $log_title = $arSonetFields["TITLE"]; $log_url = $arSonetFields["URL"]; $log_section_name = $arLogParams["SECTION_NAME"]; $log_section_url = $arLogParams["SECTION_URL"]; $log_user_id = $arSonetFields["USER_ID"]; CSocNetLog::Update($log_id, array("TMP_ID" => $log_id)); if ($bPassword) { CSocNetLogRights::DeleteByLogID($log_id); CSocNetLogRights::Add($log_id, array("U" . $GLOBALS["USER"]->GetID(), "SA")); } else { CSocNetLogRights::SetForSonet($log_id, $entity_type, $entity_id, "photo", "view"); } } } } if (intval($log_id) > 0) { $arForum = CForumNew::GetByID($this->ForumID); $parser = new textParser(LANGUAGE_ID, $this->arPath["PATH_TO_SMILE"]); $parser->image_params["width"] = false; $parser->image_params["height"] = false; $arAllow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "LIST" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "UPLOAD" => $arForum["ALLOW_UPLOAD"], "NL2BR" => "N", "SMILES" => "N", "VIDEO" => "N"); $url = $this->arPath["DETAIL_URL"]; if ($bSocNetLogRecordExists) { $arMessage = CForumMessage::GetByIDEx($ID); $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arMessage["FORUM_ID"], "TID" => $arMessage["TOPIC_ID"], "MID" => $ID)); $arFieldsForSocnet = array("ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "EVENT_ID" => "photo_comment", "=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE" => $parser->convert(empty($arFields["POST_MESSAGE_FILTER"]) ? $arFields["POST_MESSAGE"] : $arFields["POST_MESSAGE_FILTER"], $arAllow), "TEXT_MESSAGE" => $parser->convert4mail(empty($arFields["POST_MESSAGE_FILTER"]) ? $arFields["POST_MESSAGE"] : $arFields["POST_MESSAGE_FILTER"]), "MODULE_ID" => false, "SOURCE_ID" => $ID, "LOG_ID" => $log_id, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $ID); if (intVal($arMessage["AUTHOR_ID"]) > 0) { $arFieldsForSocnet["USER_ID"] = $arMessage["AUTHOR_ID"]; } $comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); if ($comment_id) { CSocNetLog::CounterIncrement($comment_id, false, false, "LC"); $arFieldsIM = array("TYPE" => "COMMENT", "TITLE" => $log_title, "MESSAGE" => $arFieldsForSocnet["MESSAGE"], "URL" => $log_url, "SECTION_NAME" => $log_section_name, "SECTION_URL" => $log_section_url, "ID" => $arFields["PARAM2"], "PHOTO_AUTHOR_ID" => $log_user_id, "COMMENT_AUTHOR_ID" => $arMessage["AUTHOR_ID"]); CSocNetPhotoCommentEvent::NotifyIm($arFieldsIM); } } else { $dbComments = CForumMessage::GetListEx(array(), array('TOPIC_ID' => $arFields["TOPIC_ID"], "NEW_TOPIC" => "N")); while ($arComment = $dbComments->GetNext()) { $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $arComment["FORUM_ID"], "TID" => $arComment["TOPIC_ID"], "MID" => $arComment["ID"])); $arFieldsForSocnet = array("ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "EVENT_ID" => "photo_comment", "=LOG_DATE" => $GLOBALS["DB"]->CharToDateFunction($arComment["POST_DATE"], "FULL", SITE_ID), "MESSAGE" => $parser->convert(empty($arComment["POST_MESSAGE_FILTER"]) ? $arComment["POST_MESSAGE"] : $arComment["POST_MESSAGE_FILTER"], $arAllow), "TEXT_MESSAGE" => $parser->convert4mail(empty($arComment["POST_MESSAGE_FILTER"]) ? $arComment["POST_MESSAGE"] : $arComment["POST_MESSAGE_FILTER"]), "MODULE_ID" => false, "SOURCE_ID" => $arComment["ID"], "LOG_ID" => $log_id, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $arComment["ID"]); if (intVal($arComment["AUTHOR_ID"]) > 0) { $arFieldsForSocnet["USER_ID"] = $arComment["AUTHOR_ID"]; } $comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); if ($comment_id) { CSocNetLog::CounterIncrement($comment_id, false, false, "LC"); $arFieldsIM = array("TYPE" => "COMMENT", "TITLE" => $log_title, "MESSAGE" => $arFieldsForSocnet["MESSAGE"], "URL" => $log_url, "SECTION_NAME" => $log_section_name, "SECTION_URL" => $log_section_url, "ID" => $arFields["PARAM2"], "PHOTO_AUTHOR_ID" => $log_user_id, "COMMENT_AUTHOR_ID" => $arComment["AUTHOR_ID"]); CSocNetPhotoCommentEvent::NotifyIm($arFieldsIM); } } if ($arElement) { self::InheriteAlbumFollow($arElement["IBLOCK_SECTION_ID"], $log_id, intVal($arElement["CREATED_BY"]) > 0 ? $arElement["CREATED_BY"] : false); } } } } }
<td class="forumhead" align="center"> <font class="forumheadtext"><b>Название темы</b></font> </td> <td class="forumhead" align="center"> <font class="forumheadtext"><b>Дата подписки</b></font> </td> <td class="forumhead" align="center"> <font class="forumheadtext"><b>Последнее отправленное сообщение</b></font> </td> <td class="forumhead" align="center"> <font class="forumheadtext"><b>Действия</b></font> </td> </tr> <?php while ($res = $db_res->Fetch()) { $arForum_tmp = CForumNew::GetByID($res["FORUM_ID"]); $arTopic_tmp = CForumTopic::GetByID($res["TOPIC_ID"]); ?> <tr> <td class="forumbody"> <font class="forumbodytext"><a href="list.php?FID=<?php echo $res["FORUM_ID"]; ?> "><?php echo $arForum_tmp["NAME"]; ?> </a></font> </td> <td class="forumbody"> <font class="forumbodytext"> <?php
function CheckFields(&$arFields, &$arParams, $ACTION = "ADD", $extParams = array()) { $aMsg = array(); $arFiles = !is_array($arFields) ? array($arFields) : $arFields; $arParams = !is_array($arParams) ? array($arParams) : $arParams; $arParams["FORUM_ID"] = intVal($arParams["FORUM_ID"]); if (isset($arParams["TOPIC_ID"])) { $arParams["TOPIC_ID"] = intVal($arParams["TOPIC_ID"]); } $arParams["MESSAGE_ID"] = intVal($arParams["MESSAGE_ID"]); $arParams["USER_ID"] = intVal($arParams["USER_ID"]); if (empty($arFiles)) { return true; } elseif (!empty($arFiles["name"])) { $arFiles = array($arFiles); } $ACTION = $ACTION == "UPDATE" || "NOT_CHECK_DB" ? $ACTION : "ADD"; if ($arParams["FORUM_ID"] <= 0) { $aMsg[] = array("id" => 'bad_forum', "text" => GetMessage("F_ERR_EMPTY_FORUM_ID")); } else { // Y - Image files F - Files of specified type A - All files $arForum = !!$extParams["FORUM"] ? $extParams["FORUM"] : CForumNew::GetByID($arParams["FORUM_ID"]); if (empty($arForum)) { $aMsg[] = array("id" => 'bad_forum', "text" => GetMessage("F_ERR_FORUM_IS_LOST")); } elseif (!in_array($arForum["ALLOW_UPLOAD"], array("Y", "F", "A"))) { $aMsg[] = array("id" => 'bad_forum_permission', "text" => GetMessage("F_ERR_UPOAD_IS_DENIED")); } } if (empty($aMsg)) { $arFilesExists = array(); $iFileSize = intVal(COption::GetOptionString("forum", "file_max_size", 5242880)); foreach ($arFiles as $key => $val) { $res = ""; if (strLen($val["name"]) <= 0 && intVal($val["FILE_ID"]) <= 0) { unset($arFiles[$key]); continue; } elseif (strLen($val["name"]) > 0) { if ($arForum["ALLOW_UPLOAD"] == "Y") { $res = CFile::CheckImageFile($val, $iFileSize, 0, 0); } elseif ($arForum["ALLOW_UPLOAD"] == "F") { $res = CFile::CheckFile($val, $iFileSize, false, $arForum["ALLOW_UPLOAD_EXT"]); } else { $res = CFile::CheckFile($val, $iFileSize, false, false); } if (strLen($res) > 0) { $aMsg[] = array("id" => 'attach_error', "text" => $res); } } if (intVal($val["FILE_ID"]) > 0) { $arFiles[$key]["old_file"] = $val["FILE_ID"]; $arFilesExists[$val["FILE_ID"]] = $val; continue; } } if ($ACTION != "NOT_CHECK_DB" && !empty($arFilesExists)) { $arFilter = array("FILE_FORUM_ID" => $arParams["FORUM_ID"]); if (isset($arParams["TOPIC_ID"])) { $arFilter["FILE_TOPIC_ID"] = $arParams["TOPIC_ID"]; } if (isset($arParams["MESSAGE_ID"])) { $arFilter["FILE_MESSAGE_ID"] = $arParams["MESSAGE_ID"]; } $arFilter["@FILE_ID"] = array_keys($arFilesExists); $db_res = CForumFiles::GetList(array("FILE_ID" => "ASC"), $arFilter); if ($db_res && ($res = $db_res->Fetch())) { do { unset($arFilesExists[$res["FILE_ID"]]); } while ($res = $db_res->Fetch()); } if (!empty($arFilesExists)) { $aMsg[] = array("id" => 'attach_error', "text" => str_replace("#FILE_ID#", implode(", ", array_keys($arFilesExists)), GetMessage("F_ERR_UPOAD_FILES_IS_LOST"))); } } } if (!empty($aMsg)) { $e = new CAdminException($aMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } $arFields = $arFiles; return true; }
function MoveTopic2Forum($TID, $FID, $leaveLink = "N") { global $DB; $FID = intVal($FID); $arForum = CForumNew::GetByID($FID); $arTopics = is_array($TID) ? $TID : (intVal($TID) > 0 ? array($TID) : array()); $leaveLink = strToUpper($leaveLink) == "Y" ? "Y" : "N"; $arMsg = array(); $arForums = array(); if (empty($arForum)) { $arMsg[] = array("id" => "FORUM_NOT_EXIST", "text" => GetMessage("F_ERR_FORUM_NOT_EXIST", array("#FORUM_ID#" => $FID))); } if (empty($arTopics)) { $arMsg[] = array("id" => "TOPIC_EMPTY", "text" => GetMessage("F_ERR_EMPTY_TO_MOVE")); } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } $arTopicsCopy = $arTopics; $arTopics = array(); foreach ($arTopicsCopy as $res) { $arTopics[intVal($res)] = array("ID" => intVal($res)); } $db_res = CForumTopic::GetList(array(), array("@ID" => implode(", ", array_keys($arTopics)))); if ($db_res && ($res = $db_res->Fetch())) { do { if (intVal($res["FORUM_ID"]) == $FID) { $arMsg[] = array("id" => "FORUM_ID_IDENTICAL", "text" => GetMessage("F_ERR_THIS_TOPIC_IS_NOT_MOVE", array("#TITLE#" => $res["TITLE"], "#ID#" => $res["ID"]))); continue; } // $DB->StartTransaction(); if ($leaveLink != "N") { CForumTopic::Add(array("TITLE" => $res["TITLE"], "DESCRIPTION" => $res["DESCRIPTION"], "STATE" => "L", "USER_START_NAME" => $res["USER_START_NAME"], "START_DATE" => $res["START_DATE"], "ICON_ID" => $res["ICON_ID"], "POSTS" => "0", "VIEWS" => "0", "FORUM_ID" => $res["FORUM_ID"], "TOPIC_ID" => $res["ID"], "APPROVED" => $res["APPROVED"], "SORT" => $res["SORT"], "LAST_POSTER_NAME" => $res["LAST_POSTER_NAME"], "LAST_POST_DATE" => $res["LAST_POST_DATE"], "HTML" => $res["HTML"], "USER_START_ID" => $res["USER_START_ID"], "SOCNET_GROUP_ID" => $res["SOCNET_GROUP_ID"], "OWNER_ID" => $res["OWNER_ID"])); } CForumTopic::Update($res["ID"], array("FORUM_ID" => $FID), true); // move message $strSql = "UPDATE b_forum_message SET FORUM_ID=" . $FID . ", POST_MESSAGE_HTML='' WHERE TOPIC_ID=" . $res["ID"]; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); // move subscribe $strSql = "UPDATE b_forum_subscribe SET FORUM_ID=" . intVal($FID) . " WHERE TOPIC_ID=" . $res["ID"]; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arForums[$res["FORUM_ID"]] = $res["FORUM_ID"]; unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$res["ID"]]); unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$res["ID"]]); $arTopics[intVal($res["ID"])] = $res; // $DB->Commit(); CForumCacheManager::ClearTag("F", $res["ID"]); $res_log["DESCRIPTION"] = str_replace(array("#TOPIC_TITLE#", "#TOPIC_ID#", "#FORUM_TITLE#", "#FORUM_ID#"), array($res["TITLE"], $res["ID"], $arForum["NAME"], $arForum["ID"]), $leaveLink != "N" ? GetMessage("F_LOGS_MOVE_TOPIC_WITH_LINK") : GetMessage("F_LOGS_MOVE_TOPIC")); $res_log["FORUM_ID"] = $arForum["ID"]; $res_log["TOPIC_ID"] = $res["ID"]; $res_log["TITLE"] = $res["TITLE"]; $res_log["FORUM_TITLE"] = $arForum["NAME"]; CForumEventLog::Log("topic", "move", $res["ID"], serialize($res_log)); } while ($res = $db_res->Fetch()); } /***************** Cleaning cache **********************************/ unset($GLOBALS["FORUM_CACHE"]["FORUM"][$FID]); if (CACHED_b_forum !== false) { $GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum"); } /***************** Cleaning cache/**********************************/ CForumNew::SetStat($FID); foreach ($arForums as $key) { CForumNew::SetStat($key); } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); } else { CForumCacheManager::ClearTag("F", $FID); if ($leaveLink != "Y") { foreach ($arTopics as $key => $res) { CForumCacheManager::ClearTag("F", $res["FORUM_ID"]); } } } return true; }
function SocnetEMailMessageAdd($arMessageFields, $ACTION_VARS) { if (!is_array($arMessageFields["FORUM_EMAIL_FILTER"])) { return false; } if (!CModule::IncludeModule("socialnetwork")) { return false; } $arParams = $arMessageFields["FORUM_EMAIL_FILTER"]; if (!CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum")) { return false; } // Найдем кто отправитель $message_email = strlen($arMessageFields["FIELD_REPLY_TO"]) > 0 ? $arMessageFields["FIELD_REPLY_TO"] : $arMessageFields["FIELD_FROM"]; $message_email_addr = strtolower(CMailUtil::ExtractMailAddress($message_email)); $o = "LAST_LOGIN"; $b = "DESC"; $res = CUser::GetList($o, $b, array("ACTIVE" => "Y", "EMAIL" => $message_email_addr)); if (($arUser = $res->Fetch()) && strtolower(CMailUtil::ExtractMailAddress($arUser["EMAIL"])) == $message_email_addr) { $AUTHOR_USER_ID = $arUser["ID"]; } elseif ($arParams["NOT_MEMBER_POST"] == "Y") { $AUTHOR_USER_ID = false; } else { CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR1") . ": " . $message_email_addr)); return false; } if ($arParams["NOT_MEMBER_POST"] != "Y") { // Проверим права доступа if (CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "full")) { $PERMISSION = "Y"; } elseif (CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "newtopic")) { $PERMISSION = "M"; } elseif (CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "answer")) { $PERMISSION = "I"; } else { CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR2") . " " . $arUser["LOGIN"] . " [" . $AUTHOR_USER_ID . "] (" . $message_email_addr . ")")); return false; } } $body = $arMessageFields["BODY"]; //$body = preg_replace("/(\r\n)+/", "\r\n", $body); $p = strpos($body, "\r\nFrom:"); if ($p > 0) { $body = substr($body, 0, $p) . "\r\n[CUT]" . substr($body, $p) . "[/CUT]"; } $subject = $arMessageFields["SUBJECT"]; // обрежем все RE и FW $subject = trim(preg_replace('#^\\s*((RE[0-9\\[\\]]*:\\s*)|(FW:\\s*))+(.*)$#i', '\\4', $subject)); if ($subject == '') { $subject = GetMessage("FORUM_MAIL_EMPTY_TOPIC_TITLE") . " " . rand(); } // Найдем какая тема $arFields = array(); $FORUM_ID = IntVal($arParams["FORUM_ID"]); $SOCNET_GROUP_ID = IntVal($arParams["SOCNET_GROUP_ID"]); $TOPIC_ID = 0; global $DB; if ($arMessageFields["IN_REPLY_TO"] != '') { $dbTopic = $DB->Query("SELECT FT.ID FROM b_forum_topic FT INNER JOIN b_forum_message FM ON FM.TOPIC_ID=FT.ID WHERE FM.XML_ID='" . $DB->ForSQL($arMessageFields["IN_REPLY_TO"], 255) . "' AND FT.FORUM_ID=" . $FORUM_ID . " AND FT.SOCNET_GROUP_ID=" . $SOCNET_GROUP_ID); if ($arTopic = $dbTopic->Fetch()) { $TOPIC_ID = $arTopic["ID"]; } } if ($arParams["USE_SUBJECT"] == "Y" && $TOPIC_ID <= 0) { $dbTopic = $DB->Query("SELECT ID FROM b_forum_topic WHERE TITLE='" . $DB->ForSQL($subject, 255) . "' AND FORUM_ID=" . $FORUM_ID . " AND SOCNET_GROUP_ID=" . $SOCNET_GROUP_ID); // ограничить по старости? if ($arTopic = $dbTopic->Fetch()) { $TOPIC_ID = $arTopic["ID"]; } } if ($AUTHOR_USER_ID > 0) { if ($TOPIC_ID < 0 && $PERMISSION <= "I") { CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR3") . " " . $arUser["LOGIN"] . " [" . $AUTHOR_USER_ID . "] (" . $message_email_addr . ")")); return false; } $bSHOW_NAME = true; $res = CForumUser::GetByUSER_ID($AUTHOR_USER_ID); if ($res) { $bSHOW_NAME = $res["SHOW_NAME"] == "Y"; } if ($bSHOW_NAME) { $AUTHOR_NAME = $arUser["NAME"] . (strlen($arUser["NAME"]) <= 0 || strlen($arUser["LAST_NAME"]) <= 0 ? "" : " ") . $arUser["LAST_NAME"]; } if (strlen(Trim($AUTHOR_NAME)) <= 0) { $AUTHOR_NAME = $arUser["LOGIN"]; } } else { $AUTHOR_NAME = $arMessageFields["FIELD_FROM"]; $arFields["AUTHOR_EMAIL"] = $arMessageFields["FIELD_FROM"]; } $arFields["NEW_TOPIC"] = "N"; if ($PERMISSION >= "Q") { $arFields["APPROVED"] = "Y"; } else { $arFields["APPROVED"] = $arParams["MODERATION"] == "Y" ? "N" : "Y"; } // Добавим новую тему if ($TOPIC_ID <= 0) { $arTopicFields = array("TITLE" => $subject, "FORUM_ID" => $FORUM_ID, "USER_START_ID" => $AUTHOR_USER_ID, "OWNER_ID" => $AUTHOR_USER_ID, "SOCNET_GROUP_ID" => $SOCNET_GROUP_ID); $arTopicFields["XML_ID"] = $arMessageFields["MSG_ID"]; $arTopicFields["APPROVED"] = $arFields['APPROVED']; $arTopicFields["USER_START_NAME"] = $AUTHOR_NAME; $arTopicFields["LAST_POSTER_NAME"] = $AUTHOR_NAME; $TOPIC_ID = CForumTopic::Add($arTopicFields); if (IntVal($TOPIC_ID) <= 0) { CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR4"))); return false; } $arFields["NEW_TOPIC"] = "Y"; } // Добавим сообщение $arFields["POST_MESSAGE"] = $body; // Аттаченные файлы $arFILES = array(); $rsAttach = CMailAttachment::GetList(array(), array("MESSAGE_ID" => $arMessageFields["ID"])); while ($arAttach = $rsAttach->Fetch()) { $filename = CTempFile::GetFileName(md5(uniqid("")) . ".tmp"); CheckDirPath($filename); if (file_put_contents($filename, $arAttach["FILE_DATA"]) !== false) { $arFile = array("name" => $arAttach["FILE_NAME"], "type" => $arAttach["CONTENT_TYPE"], "size" => @filesize($filename), "tmp_name" => $filename, "MODULE_ID" => "forum"); $arFilter = array("FORUM_ID" => $FORUM_ID); $arFiles = array($arFile); if (CForumFiles::CheckFields($arFiles, $arFilter)) { $arFILES[] = $arFiles[0]; } else { $oError = $GLOBALS["APPLICATION"]->GetException(); CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR6") . " (" . $arAttach["FILE_NAME"] . "): " . ($oError && $oError->GetString() ? $oError->GetString() : ""))); } } } if (count($arFILES) > 0) { $arFields["FILES"] = $arFILES; } $arFields["AUTHOR_NAME"] = $AUTHOR_NAME; $arFields["AUTHOR_ID"] = $AUTHOR_USER_ID; $arFields["FORUM_ID"] = $FORUM_ID; $arFields["TOPIC_ID"] = $TOPIC_ID; $arFields["XML_ID"] = $arMessageFields["MSG_ID"]; $arFields["SOURCE_ID"] = "EMAIL"; $arRes = array(); if (!empty($arMessageFields["FIELD_FROM"])) { $arRes[] = "From: " . $arMessageFields["FIELD_FROM"]; } if (!empty($arMessageFields["FIELD_TO"])) { $arRes[] = "To: " . $arMessageFields["FIELD_TO"]; } if (!empty($arMessageFields["FIELD_CC"])) { $arRes[] = "Cc: " . $arMessageFields["FIELD_CC"]; } if (!empty($arMessageFields["FIELD_BCC"])) { $arRes[] = "Bcc: " . $arMessageFields["FIELD_BCC"]; } $arRes[] = "Subject: " . $arMessageFields["SUBJECT"]; $arRes[] = "Date: " . $arMessageFields["FIELD_DATE"]; $arFields["MAIL_HEADER"] = implode("\r\n", $arRes); preg_match_all('#Received:\\s+from\\s+(.*)by.*#i', $arMessageFields["HEADER"], $regs); if (is_array($regs) && is_array($regs[1])) { $arFields["AUTHOR_IP"] = $arFields["AUTHOR_REAL_IP"] = '<email: ' . $regs[1][count($regs[1]) - 1] . '>'; } else { $arFields["AUTHOR_IP"] = $arFields["AUTHOR_REAL_IP"] = '<email: no address>'; } /* $AUTHOR_IP = ForumGetRealIP(); $AUTHOR_IP_tmp = $AUTHOR_IP; $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR']; if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y") { $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP); if ($AUTHOR_IP_tmp==$AUTHOR_REAL_IP) $AUTHOR_REAL_IP = $AUTHOR_IP; else $AUTHOR_REAL_IP = @gethostbyaddr($AUTHOR_REAL_IP); } $arFields["AUTHOR_IP"] = ($AUTHOR_IP!==False) ? $AUTHOR_IP : "<no address>"; $arFields["AUTHOR_REAL_IP"] = ($AUTHOR_REAL_IP!==False) ? $AUTHOR_REAL_IP : "<no address>"; */ $strErrorMessage = ''; $MESSAGE_ID = CForumMessage::Add($arFields, false); if (intVal($MESSAGE_ID) <= 0) { $str = $GLOBALS['APPLICATION']->GetException(); if ($str && $str->GetString()) { $strErrorMessage .= "[" . $str->GetString() . "]"; } if ($arFields["NEW_TOPIC"] == 'Y') { CForumTopic::Delete($TOPIC_ID); } CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_ERROR", "MESSAGE" => GetMessage("FORUM_MAIL_ERROR5") . " " . $strErrorMessage)); } if ($MESSAGE_ID > 0) { CMailLog::AddMessage(array("MAILBOX_ID" => $arMessageFields["MAILBOX_ID"], "MESSAGE_ID" => $arMessageFields["ID"], "FILTER_ID" => $arParams["MAIL_FILTER_ID"], "LOG_TYPE" => "FILTER_COMPLETE", "MESSAGE" => GetMessage("FORUM_MAIL_OK") . " " . $MESSAGE_ID . " (TID#" . $TOPIC_ID . ")")); CForumMessage::SendMailMessage($MESSAGE_ID, array(), false, "NEW_FORUM_MESSAGE"); $dbSite = CSite::GetById($arMessageFields["LID"]); if ($arSite = $dbSite->Fetch()) { $lang = $arSite['LANGUAGE_ID']; } else { $lang = $LANGUAGE_ID; } $parser = new forumTextParser(); $arForum = CForumNew::GetByID($FORUM_ID); $arAllow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "LIST" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "SMILES" => "N", "UPLOAD" => $arForum["ALLOW_UPLOAD"], "NL2BR" => "N", "TABLE" => "N", "ALIGN" => "N"); if ($arFields["NEW_TOPIC"] == "Y") { $arFieldsForSocnet = array("ENTITY_TYPE" => SONET_ENTITY_GROUP, "ENTITY_ID" => $SOCNET_GROUP_ID, "EVENT_ID" => "forum", "=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $AUTHOR_NAME, CForumEmail::GetLangMessage("FORUM_MAIL_SOCNET_TITLE_TOPIC", $lang)), "TITLE" => $subject, "MESSAGE" => $parser->convert($body, $arAllow), "TEXT_MESSAGE" => $parser->convert4mail($body), "URL" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("UID" => $AUTHOR_USER_ID, "FID" => $FORUM_ID, "TID" => $TOPIC_ID, "MID" => $MESSAGE_ID)), "PARAMS" => serialize(array("PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("TID" => $TOPIC_ID)))), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $MESSAGE_ID, "RATING_TYPE_ID" => "FORUM_TOPIC", "RATING_ENTITY_ID" => intval($TOPIC_ID)); if (intVal($AUTHOR_USER_ID) > 0) { $arFieldsForSocnet["USER_ID"] = $AUTHOR_USER_ID; } $logID = CSocNetLog::Add($arFieldsForSocnet, false); if (intval($logID) > 0) { CSocNetLog::Update($logID, array("TMP_ID" => $logID)); CSocNetLogRights::SetForSonet($logID, $arFieldsForSocnet["ENTITY_TYPE"], $arFieldsForSocnet["ENTITY_ID"], "forum", "view", true); CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID); } } else { $dbForumMessage = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $TOPIC_ID)); if ($arForumMessage = $dbForumMessage->Fetch()) { $dbRes = CSocNetLog::GetList(array("ID" => "DESC"), array("EVENT_ID" => "forum", "SOURCE_ID" => $arForumMessage["ID"]), false, false, array("ID", "TMP_ID")); if ($arRes = $dbRes->Fetch()) { $log_id = $arRes["TMP_ID"]; } else { $dbFirstMessage = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $arForumMessage["TOPIC_ID"]), false, 1); if ($arFirstMessage = $dbFirstMessage->Fetch()) { $arTopic = CForumTopic::GetByID($arFirstMessage["TOPIC_ID"]); $sFirstMessageText = COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arFirstMessage["POST_MESSAGE_FILTER"] : $arFirstMessage["POST_MESSAGE"]; $sFirstMessageURL = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("UID" => $arFirstMessage["AUTHOR_ID"], "FID" => $arFirstMessage["FORUM_ID"], "TID" => $arFirstMessage["TOPIC_ID"], "MID" => $arFirstMessage["ID"])); $arFieldsForSocnet = array("ENTITY_TYPE" => SONET_ENTITY_GROUP, "ENTITY_ID" => $SOCNET_GROUP_ID, "EVENT_ID" => "forum", "LOG_DATE" => $arFirstMessage["POST_DATE"], "LOG_UPDATE" => $arFirstMessage["POST_DATE"], "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $arFirstMessage["AUTHOR_NAME"], GetMessage("SONET_FORUM_LOG_TOPIC_TEMPLATE")), "TITLE" => $arTopic["TITLE"], "MESSAGE" => $parser->convert($sFirstMessageText, $arAllow), "TEXT_MESSAGE" => $parser->convert4mail($sFirstMessageText), "URL" => $sFirstMessageURL, "PARAMS" => serialize(array("PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("TID" => $arFirstMessage["TOPIC_ID"])))), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $arFirstMessage["ID"], "RATING_TYPE_ID" => "FORUM_TOPIC", "RATING_ENTITY_ID" => intval($arFirstMessage["TOPIC_ID"])); if (intVal($arFirstMessage["AUTHOR_ID"]) > 0) { $arFieldsForSocnet["USER_ID"] = $arFirstMessage["AUTHOR_ID"]; } $log_id = CSocNetLog::Add($arFieldsForSocnet, false); if (intval($log_id) > 0) { CSocNetLog::Update($log_id, array("TMP_ID" => $log_id)); CSocNetLogRights::SetForSonet($log_id, $arFieldsForSocnet["ENTITY_TYPE"], $arFieldsForSocnet["ENTITY_ID"], "forum", "view", true); } } } if (intval($log_id) > 0) { $arFieldsForSocnet = array("ENTITY_TYPE" => SONET_ENTITY_GROUP, "ENTITY_ID" => $SOCNET_GROUP_ID, "EVENT_ID" => "forum", "LOG_ID" => $log_id, "=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE" => $parser->convert($body, $arAllow), "TEXT_MESSAGE" => $parser->convert4mail($body), "URL" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("UID" => $AUTHOR_USER_ID, "FID" => $FORUM_ID, "TID" => $TOPIC_ID, "MID" => $MESSAGE_ID)), "MODULE_ID" => false, "SOURCE_ID" => $MESSAGE_ID, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => intval($MESSAGE_ID)); if (intVal($AUTHOR_USER_ID) > 0) { $arFieldsForSocnet["USER_ID"] = $AUTHOR_USER_ID; } CSocNetLogComments::Add($arFieldsForSocnet); } } } } }
public static function __GetParam($lang, $site_id, $module_id = false, $param1 = false, $param2 = false, $item_id = false) { $name = ""; if ($module_id == "iblock" && CModule::IncludeModule("iblock")) { if ($item_id !== false) { $rs = CIBlockElement::GetByID($item_id); if ($ar = $rs->GetNext()) { $name = $ar["NAME"]; } } elseif ($param2 !== false) { $rs = CIBlock::GetByID($param2); if ($ar = $rs->GetNext()) { $name = $ar["NAME"]; } } elseif ($param1 !== false) { $rs = CIBlockType::GetByIDLang($param1, $lang); if (is_array($rs)) { $name = $rs["NAME"]; } } else { $name = GetMessage("customrank_iblocks"); } } elseif ($module_id == "forum" && CModule::IncludeModule("forum")) { if ($item_id !== false) { $name = ""; } elseif ($param2 !== false) { $rs = CForumTopic::GetByID($param2); if (is_array($rs)) { $name = htmlspecialcharsex($rs["TITLE"]); } } elseif ($param1 !== false) { $rs = CForumNew::GetByID($param1); if (is_array($rs)) { $name = htmlspecialcharsex($rs["NAME"]); } } else { $name = GetMessage("customrank_forum"); } } elseif ($module_id == "main") { if ($item_id !== false) { $name = ""; } else { $name = GetMessage("customrank_files"); } } elseif ($module_id === false) { $rs = CSite::GetByID($site_id); if ($ar = $rs->GetNext()) { $name = $ar["NAME"]; } } else { $name = false; } return $name; }
$arParams["AUTOSAVE"] = CForumAutosave::GetInstance(); /***************** STANDART ****************************************/ if ($arParams["CACHE_TYPE"] == "Y" || $arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y") { $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]); } else { $arParams["CACHE_TIME"] = 0; } $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; /******************************************************************** /Input params ********************************************************************/ /******************************************************************** Default params # 1 ********************************************************************/ $arResult["TOPIC"] = array(); $arResult["FORUM"] = CForumNew::GetByID($arParams["FID"]); $arParams["PERMISSION_ORIGINAL"] = ForumCurrUserPermissions($arParams["FID"]); $arParams["PERMISSION"] = "A"; $arError = array(); $arNote = array(); /******************************************************************** /Default params #1 ********************************************************************/ /******************************************************************** Main Data & Permissions ********************************************************************/ $bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin(); if (empty($arResult["FORUM"])) { ShowError(GetMessage("F_FID_IS_LOST")); CHTTP::SetStatus("404 Not Found"); return false;
protected function ProcessForum($forumId) { if (!CModule::IncludeModule('forum')) { return false; } $forumId = intval($forumId); if ($forumId <= 0) { $forumId = COption::GetOptionInt('meeting', 'comments_forum_id', 0, SITE_ID); $bNeedCreate = $forumId <= 0 || !CForumNew::GetByID($forumId); if ($bNeedCreate) { $arForumFields = array('NAME' => GetMessage('MEETING_FORUM_NAME'), 'ACTIVE' => 'Y', 'INDEXATION' => 'N', 'ALLOW_HTML' => 'N', 'ALLOW_UPLOAD' => 'A', 'MODERATION' => 'N', 'SITES' => array(SITE_ID => $this->forumPath), 'GROUP_ID' => array(1 => 'Y')); $forumId = CForumNew::Add($arForumFields); if ($forumId > 0) { COption::SetOptionInt('meeting', 'comments_forum_id', $forumId, '', SITE_ID); } } } $this->forumId = $forumId; }