• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/lib/update/topicservicecounter.php
  • Класс: BitrixForumUpdateTopicServiceCounter
  • Вызов: TopicServiceCounter::execute
public function execute(array &$result)
{
	if (!Loader::includeModule("forum"))
	{
		return self::finishExecution();
	}

	if (MainConfigOption::get("forum", "LivefeedConvertServiceMessageStepper") === "inProgress")
	{
		return self::CONTINUE_EXECUTION;
	}

	if (!array_key_exists("lastId", $result) || (int)$result["lastId"] <= 0)
	{
		$result["lastId"] = 0;

		$res = MessageTable::getList([
			"select" => [ "CNT"],
			"filter" => [
				'>SERVICE_TYPE' => 0
			],
			'runtime' => [
				new BitrixMainEntityExpressionField('CNT', 'COUNT(*)')
			]
		]);
		$topicData = $res->fetch();
		$result["count"] = (int)$topicData['CNT'];
	}

	$filter = [
		'>SERVICE_TYPE' => 0
	];
	if ($result["lastId"] > 0)
	{
		$filter[" ["TOPIC_ID", "CNT"],
		"filter" => $filter,
		'runtime' => [
			new BitrixMainEntityExpressionField('CNT', 'COUNT(*)')
		],
		"group" => ["TOPIC_ID"],
		"limit" => self::TOPIC_LIMIT,
		"order" => ["TOPIC_ID" => "DESC"]
	]);
	while($topicData = $res->fetch())
	{
		$topic = BitrixForumEO_Topic::wakeUp($topicData["TOPIC_ID"]);
		$topic->setPostsService($topicData["CNT"]);
		$topic->save();
		$lastId = $topicData["TOPIC_ID"];
	}

	if ($lastId > 0)
	{
		$result["lastId"] = $lastId;
	}
	else
	{
		return self::finishExecution();
	}

	return self::CONTINUE_EXECUTION;
}