• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/update/forumcommentsindex.php
  • Класс: BitrixTasksUpdateForumCommentsIndex
  • Вызов: ForumCommentsIndex::execute
public function execute(array &$result)
{
	if (!(BitrixMainLoader::includeModule("tasks") &&
		CTasksTools::getForumIdForIntranet() > 0 &&
		BitrixMainLoader::includeModule("forum") &&
		BitrixMainLoader::includeModule("search")
	))
		return false;

	$params = BitrixMainConfigOption::get("tasks", "update1758", "");
	$params = ($params !== "" ? @unserialize($params) : array());
	$params = (is_array($params) ? $params : array());
	if (empty($params))
	{
		$params = array(
			"lastMessageId" => 0,
			"number" => 0,
			"count" => BitrixForumMessageTable::getCount(
				array(
					"FORUM_ID" => CTasksTools::getForumIdForIntranet(),
					"APPROVED" => "Y",
					"=%XML_ID" => "TASK_%"
				)
			)
		);
	}
	$return = false;

	if ($params["count"] > 0)
	{
		$result["count"] = $params["count"];
		$result["progress"] = 1;
		$result["steps"] = "";

		$NS = array(
			"CLEAR" => "N",
			"MODULE" => "forum",
			"ID" => $params["lastMessageId"] + 1,
			"CNT" => 0,
			"SESS_ID" => md5(uniqid("")),
			"TO_MODULE_ID" => "forum",
			"FILTER" => array(
				"F.ID=".CTasksTools::getForumIdForIntranet(),
				"FM.XML_ID LIKE 'TASK_%'"
			)
		);

		$oCallBack = new CSearchCallback;
		$oCallBack->MODULE = $NS["TO_MODULE_ID"];
		$oCallBack->CNT = 0;
		$oCallBack->SESS_ID = $NS["SESS_ID"];

		$cnt = intval(BitrixMainConfigOption::get("forum", "search_message_count", 0));
		BitrixMainConfigOption::set("forum", "search_message_count", 15);

		$params["lastMessageId"] = CForumNew::reindex($NS, $oCallBack, "Index");
		$params["number"] += $oCallBack->CNT;

		if (isset($NS["SKIPPED"]) && is_array($NS["SKIPPED"]))
		{
			while($id = array_pop($NS["SKIPPED"]))
			{
				CSearch::DeleteIndex("forum", $id);
				$params["number"]++;
			}
		}

		if ($params["lastMessageId"] > 0)
		{
			$params = array(
				"lastMessageId" => $params["lastMessageId"],
				"number" => $params["number"],
				"count" => $params["count"]
			);

			BitrixMainConfigOption::set("tasks", "update1758", serialize($params));
			CSearch::DeleteOld($NS["SESS_ID"], $NS["TO_MODULE_ID"]);
			$return = true;
		}

		if ($cnt > 0)
			BitrixMainConfigOption::set("forum", "search_message_count", $cnt);
		else
			BitrixMainConfigOption::delete("forum", array("name" => "search_message_count"));

		$result["steps"] = $params["number"];
		if ($return === false)
			BitrixMainConfigOption::delete("tasks", array("name" => "update1758"));
	}
	return $return;
}