• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/update/chatindex.php
  • Класс: BitrixImUpdateChatIndex
  • Вызов: ChatIndex::execute
public function execute(array &$result)
{
	if (!Loader::includeModule(self::$moduleId))
	{
		return false;
	}

	$return = false;

	$params = Option::get(self::$moduleId, self::OPTION_NAME, "");
	$params = ($params !== "" ? @unserialize($params, ['allowed_classes' => false]) : []);
	$params = (is_array($params) ? $params : []);

	if (empty($params))
	{
		$lastIdQuery =
			ChatTable::query()
				->addSelect('ID')
				->whereIn('TYPE', [Chat::TYPE_OPEN, Chat::TYPE_GROUP])
				->setOrder(['ID' => 'DESC'])
				->setLimit(1)
				->fetch()
		;
		$params = [
			"lastId" => (int)$lastIdQuery['ID'] + 1,
			"number" => 0,
			"count" => ChatTable::getCount([
				'=TYPE' => [Chat::TYPE_OPEN, Chat::TYPE_GROUP],
			]),
		];
	}

	if ($params["count"] > 0)
	{
		$result["title"] = Loc::getMessage("IM_UPDATE_CHAT_INDEX");
		$result["progress"] = 1;
		$result["steps"] = "";
		$result["count"] = $params["count"];

		$cursor = ChatTable::getList([
			'order' => ['ID' => 'DESC'],
			'filter' => [
				' $params["lastId"],
				'=TYPE' => [Chat::TYPE_OPEN, Chat::TYPE_GROUP],
			],
			'select' => ['ID', 'ENTITY_TYPE'],
			'offset' => 0,
			'limit' => 500
		]);

		$found = false;
		while ($row = $cursor->fetch())
		{
			if ($row['ENTITY_TYPE'] != 'LIVECHAT')
			{
				CIMChat::index($row['ID']);
			}

			$params["lastId"] = $row['ID'];
			$params["number"]++;
			$found = true;
		}

		if ($found)
		{
			Option::set(self::$moduleId, self::OPTION_NAME, serialize($params));
			$return = true;
		}

		$result["progress"] = intval($params["number"] * 100/ $params["count"]);
		$result["steps"] = $params["number"];

		if ($found === false)
		{
			Option::delete(self::$moduleId, ["name" => self::OPTION_NAME]);
			if (!IsModuleInstalled('bitrix24'))
			{
				CAdminNotify::Add([
					"MESSAGE" => Loc::getMessage(
						'IM_UPDATE_CHAT_INDEX_OPTIMIZE',
						['#B_TAG_START#' => '', '#B_TAG_END#' => '']
					),
					"TAG" => "IM_CHAT_INDEX_OPTIMIZE_1",
					"MODULE_ID" => "IM",
				]);
			}
		}
	}
	return $return;
}