• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/update/tasksfulltextindexer.php
  • Класс: BitrixTasksUpdateTasksFulltextIndexer
  • Вызов: TasksFulltextIndexer::execute
public function execute(array &$result)
{
	global $DB;

	if (!Loader::includeModule("tasks")
		|| Option::get('tasks', 'tasksNeedIndex', 'Y') == 'N'
	)
	{
		return false;
	}
	$return = false;

	$params = Option::get("tasks", "tasksindextask", "");
	$params = ($params !== "" ? @unserialize($params, ['allowed_classes' => false]) : array());
	$params = (is_array($params) ? $params : array());
	if (empty($params))
	{
		$filter = Query::filter();
		$filter->whereNull('SEARCH_INDEX');

		$params = array(
			"lastId" => 0,
			"number" => 0,
			"count" => TaskTable::getCount($filter)
		);
	}

	$found = false;

	if ($params["count"] > 0)
	{
		$res = $DB->Query("SELECT ID FROM b_tasks WHERE SEARCH_INDEX IS NULL AND ID > ".(int)$params["lastId"]." LIMIT {$this->countAtHit}");
		while($t = $res->Fetch())
		{
			$taskId = (int)$t['ID'];
			$task = new BitrixTasksItemTask($taskId);

			$controllerDefault = $task->getAccessController();
			$controller = $controllerDefault->spawn();
			$controller->disable();
			$task->setAccessController($controller);

			$index = $DB->ForSql(BitrixTasksManagerTask::prepareSearchIndex($task->getData()));
			$sql = "UPDATE b_tasks SET SEARCH_INDEX = '{$index}' WHERE ID = {$taskId}";
			$DB->Query($sql);

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

		$result["steps"] = $params["number"];
		$result["count"] = $params["count"];

		if ($found)
		{
			Option::set("tasks", "tasksindextask", serialize($params));
			$return = true;
		}
	}

	if (!$found)
	{
		Option::delete("tasks", array("name" => "tasksindextask"));
		Option::set('tasks', 'tasksNeedIndex', 'N');
	}

	return $return;
}