• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/search.php
  • Класс: CSupportSearch
  • Вызов: CSupportSearch::performAllTicketsIndexing
static function performAllTicketsIndexing($startFromId = 0, $timeLimit = 10, $removeOldIndex = false)
{
	if (!static::CheckModule())
	{
		return false;
	}

	$endTime = time() + $timeLimit;

	global $DB;

	$lastId = intval($startFromId);

	while (time() < $endTime)
	{
		$tickets = array();
		$messages = array();

		$result = $DB->Query($DB->TopSql("
			SELECT
				T.ID, T.SITE_ID, T.TITLE, TM.MESSAGE
			FROM
				b_ticket T,
				b_ticket_message TM
			WHERE
				TM.TICKET_ID = T.ID AND T.ID > " . $lastId . " AND TM.IS_LOG='N' AND IS_HIDDEN='N'
			ORDER BY
				T.ID ASC"
		, 100));

		while ($row = $result->Fetch())
		{
			$tickets[$row['ID']] = $row;
			$messages[$row['ID']][] = array('MESSAGE' => $row['MESSAGE']);
			$endTicketId = $row['ID'];
		}

		// empty result
		if (empty($tickets))
		{
			// set option allows to use new index
			COption::SetOptionString('support', 'SEARCH_VERSION', '12.0.3');

			// delete updater notification
			CAdminNotify::DeleteByTag('SUPORT_SEARCH_CONVERT_12_0_3');

			return -1;
		}

		// reselect last ticket's messages to complete them because of previous limit in query
		unset($messages[$endTicketId]);
		$result = $DB->Query("SELECT MESSAGE FROM b_ticket_message WHERE TICKET_ID = ".$endTicketId." AND IS_LOG='N' AND IS_HIDDEN='N'");
		while ($row = $result->Fetch())
		{
			$messages[$endTicketId][] = $row;
		}

		// remove old index
		if ($removeOldIndex)
		{
			$ticketIds 	  = array_keys($tickets);
			$removeFromId = min($ticketIds);
			$removeToId   = max($ticketIds);

			$DB->Query("DELETE FROM ".static::TABLE_NAME." WHERE TICKET_ID >= ".$removeFromId." AND TICKET_ID <= ".$removeToId);
		}

		// add new index
		foreach ($tickets as $ticket)
		{
			static::indexTicket($ticket, $messages[$ticket['ID']]);
			$lastId = $ticket['ID'];
		}
	}

	return $lastId;
}