- Модуль: support
- Путь к файлу: ~/bitrix/modules/support/classes/general/support.php
- Класс: CAllTicket
- Вызов: CAllTicket::UpdateLastParamsN
static function UpdateLastParamsN($ticketID, $dateType, $recalculateSupportDeadline = true, $setReopenDefault = true)
{
$err_mess = (CAllTicket::err_mess())."
Function: UpdateLastParamsN
Line: ";
global $DB, $USER;
$ticketID = intval($ticketID);
if ($ticketID<=0) return;
$arSupportTeam = CTicket::GetSupportTeamAndAdminUsers();
$arFields = array(
"LAST_MESSAGE_DATE" => "null",
"LAST_MESSAGE_USER_ID" => "null",
"LAST_MESSAGE_GUEST_ID" => "null",
"LAST_MESSAGE_SID" => "null",
"D_1_USER_M_AFTER_SUP_M" => "null",
"ID_1_USER_M_AFTER_SUP_M" => "null",
"LAST_MESSAGE_BY_SUPPORT_TEAM" => "'Y'",
);
if ($setReopenDefault)
{
$arFields["REOPEN"] = "'N'";
}
$DB->StartUsingMasterOnly();
$strSql = "
SELECT
T.ID,
T.SLA_ID,
T.DATE_CLOSE,
" . $DB->DateToCharFunction("T.DEADLINE_SOURCE_DATE", "FULL") . " DEADLINE_SOURCE_DATE,
" . $DB->DateToCharFunction("T.D_1_USER_M_AFTER_SUP_M", "FULL") . " DATE_OLD,
T.IS_OVERDUE,
SLA.RESPONSE_TIME_UNIT,
SLA.RESPONSE_TIME,
SLA.NOTICE_TIME_UNIT,
SLA.NOTICE_TIME
FROM
b_ticket T
INNER JOIN b_ticket_sla SLA
ON T.SLA_ID = SLA.ID
AND T.ID = $ticketID
";
$rs = $DB->Query($strSql, false, $err_mess . __LINE__);
$arTicket = $rs->Fetch();
if(!$arTicket)
{
$DB->StopUsingMasterOnly();
return;
}
$arMessagesAll = array();
$arLastMess = null;
$arFirstUserMessAfterSupportMess = null;
$allTime = 0;
$messages = 0;
$messAfterSupportMess = true;
$strSql = "
SELECT
ID,
".$DB->DateToCharFunction("DATE_CREATE","FULL")." DATE_CREATE,
OWNER_USER_ID,
OWNER_GUEST_ID,
OWNER_SID,
TASK_TIME,
IS_OVERDUE,
IS_HIDDEN,
NOT_CHANGE_STATUS
FROM
b_ticket_message
WHERE
TICKET_ID=$ticketID
AND(NOT(IS_LOG='Y'))
ORDER BY
C_NUMBER
";
//NOT_CHANGE_STATUS
//IS_HIDDEN
//IS_OVERDUE
$rs = $DB->Query($strSql,false,$err_mess.__LINE__);
$DB->StopUsingMasterOnly();
while($arM = $rs->Fetch())
{
$arMessagesAll[] = $arM;
if($arM["IS_OVERDUE"] !== 'Y')
{
if($arM["IS_HIDDEN"] !== 'Y')
{
if($arM["NOT_CHANGE_STATUS"] !== 'Y')
{
$arLastMess = $arM;
}
$messages++;
}
$allTime += intval($arM["TASK_TIME"]);
}
if($arM["IS_HIDDEN"] !== 'Y' && $arM["NOT_CHANGE_STATUS"] !== 'Y')
{
if(in_array(intval($arM["OWNER_USER_ID"]), $arSupportTeam))
{
$arFirstUserMessAfterSupportMess = null;
$messAfterSupportMess = true;
}
elseif($messAfterSupportMess)
{
$arFirstUserMessAfterSupportMess = $arM;
$messAfterSupportMess = false;
}
}
}
if($arLastMess !== null)
{
$arFields["LAST_MESSAGE_USER_ID"] = $arLastMess["OWNER_USER_ID"];
//if ($changeLastMessageDate)
//{
$arFields["LAST_MESSAGE_DATE"] = $DB->CharToDateFunction($arLastMess["DATE_CREATE"]);
//}
$arFields["LAST_MESSAGE_GUEST_ID"] = intval($arLastMess["OWNER_GUEST_ID"]);
$arFields["LAST_MESSAGE_SID"] = "'" . $DB->ForSql($arLastMess["OWNER_SID"], 255) . "'";
}
$arFields["MESSAGES"] = $messages;
$arFields["PROBLEM_TIME"] = $allTime;
if($arFirstUserMessAfterSupportMess !== null)
{
$arFields["D_1_USER_M_AFTER_SUP_M"] = $DB->CharToDateFunction($arFirstUserMessAfterSupportMess["DATE_CREATE"]);
$arFields["ID_1_USER_M_AFTER_SUP_M"] = intval($arFirstUserMessAfterSupportMess["ID"]);
$arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] = "'N'";
}
if(is_array($dateType["EVENT"]) && in_array(CTicket::REOPEN, $dateType["EVENT"]))
{
$arFields["DEADLINE_SOURCE_DATE"] = $DB->CharToDateFunction(GetTime(time() + CTimeZone::GetOffset(),"FULL"));
}
elseif($arTicket["IS_OVERDUE"] == "Y")
{
$recalculateSupportDeadline = false;
}
$recalculateSupportDeadline = $recalculateSupportDeadline && (intval($arTicket["DATE_CLOSE"]) <= 0) && ($arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] == "'N'");
if(!$recalculateSupportDeadline)
{
if ($arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] == "'Y'" || intval($arTicket["DATE_CLOSE"]) > 0)
{
$arFields["SUPPORT_DEADLINE_NOTIFY"] = "null";
$arFields["SUPPORT_DEADLINE"] = "null";
$arFields["IS_OVERDUE"] = "'N'";
$arFields["IS_NOTIFIED"] = "'N'";
}
}
$DB->Update("b_ticket", $arFields, "WHERE ID='" . $ticketID . "'", $err_mess . __LINE__);
if($recalculateSupportDeadline)
{
$arTicket["M_ID"] = $arFirstUserMessAfterSupportMess["ID"];
$arTicket["D_1_USER_M_AFTER_SUP_M"] = $arFirstUserMessAfterSupportMess["DATE_CREATE"];
CTicketReminder::RecalculateSupportDeadlineForOneTicket($arTicket, $arFields, $dateType);
}
/*
LAST_MESSAGE_DATE
LAST_MESSAGE_USER_ID
LAST_MESSAGE_GUEST_ID
LAST_MESSAGE_SID
MESSAGES
REOPEN
PROBLEM_TIME
D_1_USER_M_AFTER_SUP_M
ID_1_USER_M_AFTER_SUP_M
LAST_MESSAGE_BY_SUPPORT_TEAM
DEADLINE_SOURCE_DATE
SUPPORT_DEADLINE_NOTIFY
SUPPORT_DEADLINE
IS_OVERDUE
IS_NOTIFIED
*/
}