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