• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/search/reindex/baseobjectindex.php
  • Класс: BitrixDiskSearchReindexBaseObjectIndex
  • Вызов: BaseObjectIndex::execute
public function execute(array &$result)
{
	$statusAgent = self::getStatus();
	if ($statusAgent === self::STATUS_STOP || $statusAgent === self::STATUS_PAUSE)
	{
		return self::FINISH_EXECUTION;
	}

	$status = $this->loadCurrentStatus();
	if (empty($status['count']) || $status['count'] < 0 || $status['steps'] >= $status['count'])
	{
		self::stopExecution();

		return self::FINISH_EXECUTION;
	}

	$newStatus = array(
		'count' => $status['count'],
		'steps' => $status['steps'],
	);
	$objectRows = ObjectTable::getList(
		array(
			'select' => array('*', 'HAS_SEARCH_INDEX'),
			'filter' => array(
				'>ID' => $status['lastId'],
			),
			'order' => array('ID' => 'ASC'),
			'offset' => 0,
			'limit' => $this->portionSize,
		)
	);

	$indexManager = Driver::getInstance()->getIndexManager();
	$indexManager->disableUsingSearchModule();

	$contentManager = new ContentManager();

	foreach ($objectRows as $objectRow)
	{
		if (empty($objectRow['HAS_SEARCH_INDEX']))
		{
			try
			{
				$object = BaseObject::buildFromArray($objectRow);
				if ($object instanceof Folder)
				{
					$indexManager->indexFolder($object);
				}
				elseif ($object instanceof File)
				{
					$indexManager->indexFile(
						$object,
						array(
							'content' => $contentManager->getFileContentFromIndex($object),
						)
					);
				}
			}
			catch (ArgumentTypeException $exception)
			{
			}
		}

		$newStatus['lastId'] = $objectRow['ID'];
		$newStatus['steps']++;
	}

	if (!empty($newStatus['lastId']))
	{
		Option::set('disk', 'baseobjectindex', serialize($newStatus));
		$result = array(
			'count' => $newStatus['count'],
			'steps' => $newStatus['steps'],
		);

		return self::CONTINUE_EXECUTION;
	}

	self::stopExecution();

	return self::FINISH_EXECUTION;
}