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