Your IP : 3.129.245.116


Current Path : /var/www/admin_ftp_12/data/www/httpdocs/bitrix/modules/forum/lib/update/
Upload File :
Current File : /var/www/admin_ftp_12/data/www/httpdocs/bitrix/modules/forum/lib/update/topicservicecounter.php

<?
namespace Bitrix\Forum\Update;

use \Bitrix\Main\Update\Stepper;
use \Bitrix\Forum\Integration;
use \Bitrix\Main\Loader;
use \Bitrix\Main;
use \Bitrix\Forum\MessageTable;

class TopicServiceCounter extends Stepper
{
	protected static $moduleId = "forum";
	protected const TOPIC_LIMIT = 100;

	public function execute(array &$result)
	{
		if (!Loader::includeModule("forum"))
		{
			return self::finishExecution();
		}

		if (Main\Config\Option::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 \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)')
				]
			]);
			$topicData = $res->fetch();
			$result["count"] = (int)$topicData['CNT'];
		}

		$filter = [
			'>SERVICE_TYPE' => 0
		];
		if ($result["lastId"] > 0)
		{
			$filter["<TOPIC_ID"] = $result["lastId"];
		}

		Main\Config\Option::set("forum", "TopicServiceCounterStepper", "inProgress");

		$lastId = 0;

		$res = MessageTable::getList([
			"select" => ["TOPIC_ID", "CNT"],
			"filter" => $filter,
			'runtime' => [
				new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)')
			],
			"group" => ["TOPIC_ID"],
			"limit" => self::TOPIC_LIMIT,
			"order" => ["TOPIC_ID" => "DESC"]
		]);
		while($topicData = $res->fetch())
		{
			$topic = \Bitrix\Forum\EO_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;
	}

	protected static function finishExecution()
	{
		Main\Config\Option::delete("forum", ["name" => "TopicServiceCounterStepper"]);
		return self::FINISH_EXECUTION;
	}
}
?>