• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/update/linkurlmigration.php
  • Класс: BitrixImUpdateLinkUrlMigration
  • Вызов: LinkUrlMigration::makeMigrationIteration
private function makeMigrationIteration(array &$option): bool
{
	$isFinished = Option::get(self::$moduleId, self::OPTION_NAME, '');

	if ($isFinished === '')
	{
		Option::set(self::$moduleId, self::OPTION_NAME, 'N');
	}

	if ($isFinished === 'Y')
	{
		return self::FINISH_EXECUTION;
	}

	$lastId = $option['lastId'] ?? 0;
	$params = $this->getParams($lastId);

	if ($params->count() === 0)
	{
		Option::set(self::$moduleId, self::OPTION_NAME, 'Y');
		if (BitrixMainLoader::includeModule('pull'))
		{
			Event::add(
				Event::SHARED_CHANNEL,
				[
					'module_id' => 'im',
					'command' => 'linkUrlMigrationFinished',
					'extra' => Common::getPullExtra(),
				],
				CPullChannel::TYPE_SHARED
			);
		}

		return self::FINISH_EXECUTION;
	}

	$ids = $params->getParamValueList();
	$lastId = max($params->getIdList());

	$urlsPreview = BitrixMainUrlPreviewUrlPreview::getMetadataByIds($ids);
	$urlCollection = new EO_LinkUrl_Collection();

	foreach ($params as $param)
	{
		$urlPreview = $urlsPreview[$param->getParamValue()];
		$uri = new Uri($urlPreview['URL']);
		if ($uri->getHost() === '')
		{
			continue;
		}
		$message = $param->getMessage();
		if ($message === null)
		{
			continue;
		}
		$url = new EO_LinkUrl();
		$url
			->setChatId($message->getChatId())
			->setAuthorId($message->getAuthorId())
			->setMessageId($param->getMessageId())
			->setDateCreate($message->getDateCreate())
			->setPreviewUrlId((int)$urlPreview['ID'])
			->setUrl($urlPreview['URL'])
		;
		$urlCollection[] = $url;
	}
	$urlCollection->save(true);
	LinkUrlIndexTable::index((int)Option::get(self::$moduleId, self::OPTION_NAME_LIMIT, self::LIMIT_DEFAULT));
	$option['lastId'] = $lastId;
	$steps = LinkUrlTable::getCount();
	$count = MessageParamTable::getCount(Query::filter()->where('PARAM_NAME', 'URL_ID'));
	$option['steps'] = $steps;
	$option['count'] = $count;

	return self::CONTINUE_EXECUTION;
}