- Модуль: 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;
}