Ejemplo n.º 1
0
 function Update($ID, $arFields, $skip_counts = false, $strUploadDir = false)
 {
     global $DB;
     $ID = intVal($ID);
     $strSql = "";
     $strUploadDir = $strUploadDir === false ? "forum" : $strUploadDir;
     if ($ID <= 0 || !CForumMessage::CheckFields("UPDATE", $arFields, $ID) || empty($arFields)) {
         return false;
     }
     //		if (!$skip_counts || IsModuleInstalled("search") || is_array($arFields["ATTACH_IMG"]) || is_array($arFields["FILES"]))
     //		{
     $arMessage_prev = CForumMessage::GetByID($ID, array("FILTER" => "N"));
     //		}
     if (is_set($arFields, "POST_MESSAGE") || is_set($arFields, "FORUM_ID")) {
         $arFields["POST_MESSAGE_HTML"] = '';
         $arFields["POST_MESSAGE_FILTER"] = '';
     }
     $arr = array("AUTHOR_NAME" => $arMessage_prev["AUTHOR_NAME"], "AUTHOR_EMAIL" => $arMessage_prev["AUTHOR_EMAIL"], "EDITOR_NAME" => $arMessage_prev["EDITOR_NAME"], "EDITOR_EMAIL" => $arMessage_prev["EDITOR_EMAIL"], "EDIT_REASON" => $arMessage_prev["EDIT_REASON"]);
     $bUpdateHTML = false;
     foreach ($arr as $key => $val) {
         if (is_set($arFields, $key) && $val != $arFields[$key]) {
             $bUpdateHTML = true;
             break;
         }
     }
     if ($bUpdateHTML) {
         $arFields["HTML"] = '';
     }
     if (is_set($arFields, "POST_DATE") && strLen(trim($arFields["POST_DATE"])) <= 0) {
         $strSql = ", POST_DATE=" . $DB->GetNowFunction();
         unset($arFields["POST_DATE"]);
     }
     if (!is_set($arFields, "EDIT_DATE")) {
         $strSql .= ", EDIT_DATE=" . $DB->GetNowFunction();
     } else {
         if (strLen(trim($arFields["EDIT_DATE"])) <= 0) {
             $strSql .= ", EDIT_DATE=" . $DB->GetNowFunction();
             unset($arFields["EDIT_DATE"]);
         }
     }
     /***************** Event onBeforeMessageUpdate *********************/
     foreach (GetModuleEvents("forum", "onBeforeMessageUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields, &$strUploadDir)) === false) {
             return false;
         }
     }
     /***************** /Event ******************************************/
     /***************** 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" => $arMessage_prev["FORUM_ID"], "TOPIC_ID" => $arMessage_prev["TOPIC_ID"], "MESSAGE_ID" => $ID, "USER_ID" => $arFields["EDITOR_ID"], "upload_dir" => $strUploadDir);
         $arFiles = CForumFiles::Save($arFields["FILES"], $res, false);
         $db_res = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $ID));
         if ($db_res && ($res = $db_res->Fetch())) {
             do {
                 $arFiles[$res["FILE_ID"]] = $res;
             } while ($db_res && ($res = $db_res->Fetch()));
         }
         if (!empty($arFiles)) {
             $arFiles = array_keys($arFiles);
             sort($arFiles);
             $arFields["ATTACH_IMG"] = $arFiles[0];
         } else {
             $arFields["ATTACH_IMG"] = 0;
         }
         unset($arFields["FILES"]);
     }
     /***************** Attach/******************************************/
     if (empty($arFields) && empty($strSql)) {
         return false;
     }
     $strUpdate = $DB->PrepareUpdate("b_forum_message", $arFields, $strUploadDir);
     $strSql = "UPDATE b_forum_message SET " . $strUpdate . $strSql . " WHERE ID = " . $ID;
     $DB->QueryBind($strSql, array("POST_MESSAGE" => $arFields["POST_MESSAGE"], "POST_MESSAGE_HTML" => $arFields["POST_MESSAGE_HTML"], "POST_MESSAGE_FILTER" => $arFields["POST_MESSAGE_FILTER"], "EDIT_REASON" => $arFields["EDIT_REASON"], "HTML" => $arFields["HTML"]));
     /***************** Attach ******************************************/
     if (!empty($arFiles)) {
         $res = array("FORUM_ID" => is_set($arFields, "FORUM_ID") ? $arFields["FORUM_ID"] : $arMessage_prev["FORUM_ID"], "TOPIC_ID" => is_set($arFields, "TOPIC_ID") ? $arFields["TOPIC_ID"] : $arMessage_prev["TOPIC_ID"], "MESSAGE_ID" => $ID);
         CForumFiles::UpdateByID($arFiles, $res);
     }
     /***************** Attach/******************************************/
     /***************** Quota *******************************************/
     $_SESSION["SESS_RECOUNT_DB"] = "Y";
     $GLOBALS["USER_FIELD_MANAGER"]->Update("FORUM_MESSAGE", $ID, $arFields);
     /***************** Event onAfterMessageUpdate **********************/
     foreach (GetModuleEvents("forum", "onAfterMessageUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields, $arMessage_prev));
     }
     /***************** /Event ******************************************/
     unset($GLOBALS["FORUM_CACHE"]["MESSAGE"][$ID]);
     unset($GLOBALS["FORUM_CACHE"]["MESSAGE_FILTER"][$ID]);
     if (!$skip_counts || IsModuleInstalled("search")) {
         $arMessage = CForumMessage::GetByIDEx($ID, array("GET_TOPIC_INFO" => "Y", "GET_FORUM_INFO" => "Y", "FILTER" => "Y"));
         if (!$skip_counts) {
             // author
             if ($arMessage["AUTHOR_ID"] != $arMessage_prev["AUTHOR_ID"]) {
                 CForumUser::SetStat($arMessage_prev["AUTHOR_ID"], array("MESSAGE" => $arMessage_prev, "ACTION" => "DECREMENT"));
                 CForumUser::SetStat($arMessage["AUTHOR_ID"], array("MESSAGE" => $arMessage, "ACTION" => "INCREMENT"));
             }
             // Topic
             if ($arMessage["TOPIC_ID"] != $arMessage_prev["TOPIC_ID"]) {
                 CForumTopic::SetStat($arMessage_prev["TOPIC_ID"]);
                 CForumTopic::SetStat($arMessage["TOPIC_ID"]);
             }
             // Forum
             if ($arMessage["FORUM_ID"] != $arMessage_prev["FORUM_ID"]) {
                 CForumNew::SetStat($arMessage_prev["FORUM_ID"], array("MESSAGE" => $arMessage_prev, "ACTION" => "DECREMENT"));
                 CForumNew::SetStat($arMessage["FORUM_ID"], array("MESSAGE" => $arMessage, "ACTION" => "INCREMENT"));
             }
             if ($arMessage["APPROVED"] != $arMessage_prev["APPROVED"]) {
                 if ($arMessage["AUTHOR_ID"] == $arMessage_prev["AUTHOR_ID"]) {
                     CForumUser::SetStat($arMessage["AUTHOR_ID"], array("MESSAGE" => $arMessage, "ACTION" => "UPDATE"));
                 }
                 if ($arMessage["TOPIC_ID"] == $arMessage_prev["TOPIC_ID"]) {
                     CForumTopic::SetStat($arMessage["TOPIC_ID"]);
                 }
                 if ($arMessage["FORUM_ID"] == $arMessage_prev["FORUM_ID"]) {
                     CForumNew::SetStat($arMessage["FORUM_ID"], array("MESSAGE" => $arMessage, "ACTION" => "UPDATE"));
                 }
                 $bUpdatedStatistic = true;
             }
         }
         $arForum = CForumNew::GetByID($arMessage["FORUM_ID"]);
         if (CModule::IncludeModule("search") && $arForum["INDEXATION"] == "Y") {
             // if message was removed from indexing forum to no-indexing forum we must delete index
             if ($arMessage_prev["FORUM_INFO"]["INDEXATION"] == "Y" && $arMessage["FORUM_INFO"]["INDEXATION"] != "Y") {
                 CSearch::DeleteIndex("forum", $ID);
             } elseif ($arMessage["FORUM_INFO"]["INDEXATION"] == "Y" && $arMessage_prev["APPROVED"] != "N" && $arMessage["APPROVED"] == "N") {
                 CSearch::DeleteIndex("forum", $ID);
             } elseif ($arMessage["APPROVED"] == "Y") {
                 CForumMessage::Reindex($ID, $arMessage);
             }
         }
     }
     return $ID;
 }
Ejemplo n.º 2
0
	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;
	}