• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/update/landing/searchcontent.php
  • Класс: Bitrix\Landing\Update\Landing\SearchContent
  • Вызов: SearchContent::execute
public function execute(array &$result)
{
	$lastId = Option::get('landing', self::OPTION_CODE, 0);
	$scopes = Option::get('landing', self::OPTION_CODE_SCOPES, '');
	$scopes = unserialize($scopes, ['allowed_classes' => false]);
	$finished = true;

	\Bitrix\Landing\Rights::setGlobalOff();

	if (!isset($result['steps']))
	{
		$result['steps'] = 0;
	}

	if (!is_array($scopes))
	{
		$scopes = [];
	}

	if (isset($scopes[0]))
	{
		\Bitrix\Landing\Site\Type::clearScope();
		\Bitrix\Landing\Site\Type::setScope($scopes[0]);
	}

	// calculate count of records, which we need
	$res = LandingTable::getList([
		'select' => [
			new \Bitrix\Main\Entity\ExpressionField(
				'CNT', 'COUNT(*)'
			)
		],
		'filter' => [
			'=DELETED' => ['Y', 'N'],
			'=SITE.DELETED' => ['Y', 'N']
		]
	]);
	if ($row = $res->fetch())
	{
		$result['count'] = $row['CNT'];
	}

	// one group for update
	$res = LandingTable::getList([
		'select' => [
			'ID',
			'SITE_TYPE' => 'SITE.TYPE'
		],
		'filter' => [
			'>ID' => $lastId,
			'=DELETED' => ['Y', 'N'],
			'=SITE.DELETED' => ['Y', 'N']
		],
		'order' => [
			'ID' => 'ASC'
		],
		'limit' => 20
	]);
	while ($row = $res->fetch())
	{
		$finished = false;
		$lastId = $row['ID'];
		$result['steps']++;

		\Bitrix\Landing\Hook::indexLanding(
			$row['ID']
		);
	}

	if ($finished && $scopes)
	{
		array_shift($scopes);
		if ($scopes)
		{
			$finished = false;
			$lastId = 0;
			$result['steps'] = 0;
		}
	}

	\Bitrix\Landing\Rights::setGlobalOn();

	if (!$finished)
	{
		$scopes = array_values($scopes);
		Option::set('landing', self::OPTION_CODE, $lastId);
		Option::set('landing', self::OPTION_CODE_SCOPES, serialize($scopes));
		return true;
	}
	else
	{
		Option::delete('landing', ['name' => self::OPTION_CODE]);
		Option::delete('landing', ['name' => self::OPTION_CODE_SCOPES]);
		return false;
	}
}