57 public static function HaveRole($role, $userID=
false)
62 if ($userID===
false && is_object(
$USER))
75 if ($userID===
false && is_object(
$USER))
76 $arrGroups =
$USER->GetUserGroupArray();
78 $arrGroups = CUser::GetUserGroup($userID);
81 $arRoles =
$APPLICATION->GetUserRoles(
"support", $arrGroups);
85 if (in_array($role, $arRoles))
94 public static function IsAdmin($userID=
false)
98 if ($userID===
false && is_object(
$USER))
100 if (
$USER->IsAdmin())
return true;
107 public static function IsDemo($userID=
false)
126 public static function IsOwner($ticketID, $userID=
false)
129 if ($userID===
false && is_object(
$USER)) $userID =
$USER->GetID();
130 $userID = intval($userID);
131 $ticketID = intval($ticketID);
132 if ($userID<=0 || $ticketID<=0)
return false;
134 $strSql =
"SELECT 'x' FROM b_ticket WHERE ID=$ticketID and (OWNER_USER_ID=$userID or CREATED_USER_ID=$userID)";
135 $rs =
$DB->Query($strSql);
136 if (
$ar =
$rs->Fetch())
return true;
142 public static function GetRoles(&$isDemo, &$isSupportClient, &$isSupportTeam, &$isAdmin, &$isAccess, &$userID, $checkRights=
true)
145 static $arTicketUserRoles;
146 $isDemo = $isSupportClient = $isSupportTeam = $isAdmin = $isAccess =
false;
147 if (is_object(
$USER)) $userID = intval(
$USER->GetID());
else $userID = 0;
152 if (is_array($arTicketUserRoles) && in_array($userID, array_keys($arTicketUserRoles)))
154 $isDemo = $arTicketUserRoles[$userID][
"isDemo"];
155 $isSupportClient = $arTicketUserRoles[$userID][
"isSupportClient"];
156 $isSupportTeam = $arTicketUserRoles[$userID][
"isSupportTeam"];
157 $isAdmin = $arTicketUserRoles[$userID][
"isAdmin"];
165 $arTicketUserRoles[$userID] =
array(
167 "isSupportClient" => $isSupportClient,
168 "isSupportTeam" => $isSupportTeam,
169 "isAdmin" => $isAdmin,
174 else $isAdmin =
true;
176 if ($isDemo || $isSupportClient || $isSupportTeam || $isAdmin) $isAccess =
true;
192 if (
$ar[
"G_ACCESS"] == $role)
195 $arBadGroups[] =
$ar[
"GROUP_ID"];
198 $right = COption::GetOptionString(
"support",
"GROUP_DEFAULT_RIGHT",
"D");
204 if (!in_array(
$ar[
"ID"],
$arGroups) && !in_array(
$ar[
"ID"],$arBadGroups))
244 $rsUser = CUser::GetList(
"id",
"desc",
array(
"ACTIVE" =>
"Y",
"GROUPS_ID" =>
$arGroups));
245 while ($arUser = $rsUser->Fetch()) $arEmail[$arUser[
"EMAIL"]] = $arUser[
"EMAIL"];
247 return array_unique($arEmail);
270 $sg = array_merge($sg, $stg);
274 $sg = array_merge($sg, $sag);
278 $cU = CUser::GetList(
"id",
"asc",
array(
"ACTIVE" =>
"Y",
"GROUPS_ID" => $sg));
279 while($arU = $cU->Fetch())
281 $arUser[] = intval($arU[
"ID"]);
288 return array_unique($arUser);
308 foreach($arDATES as
$key)
318 $GLOBALS[
"APPLICATION"]->ThrowException($e);
333 if (is_array($arRequired) &&
count($arRequired)>0)
335 foreach($arRequired as
$key)
354 foreach($arDate as
$key)
367 foreach($arEmail as
$key)
380 $GLOBALS[
"APPLICATION"]->ThrowException($e);
393 $arFields_i =
array();
418 "RESPONSIBLE_USER_ID",
419 "LAST_MESSAGE_USER_ID",
420 "LAST_MESSAGE_GUEST_ID",
421 "CURRENT_RESPONSIBLE_USER_ID",
433 foreach($arrNUMBER as
$key)
442 foreach($arrTYPE as
$key)
450 "LAST_MESSAGE_BY_SUPPORT_TEAM",
455 "MESSAGE_BY_SUPPORT_TEAM",
461 foreach($arrBOOLEAN as
$key)
476 foreach($arrTEXT as
$key)
484 "CREATED_MODULE_NAME",
485 "MODIFIED_MODULE_NAME",
493 "RESPONSE_TIME_UNIT",
498 foreach($arrSTRING as
$key)
508 foreach($arDate as
$key)
550 if (intval(
$arFields[
"CREATED_USER_ID"])>0) $arFields_i[
"CREATED_USER_ID"] = intval(
$arFields[
"CREATED_USER_ID"]);
552 elseif($id<=0 && $USER->IsAuthorized()) $arFields_i[
"CREATED_USER_ID"] = intval(
$USER->GetID());
556 if (intval(
$arFields[
"CREATED_GUEST_ID"])>0) $arFields_i[
"CREATED_GUEST_ID"] = intval(
$arFields[
"CREATED_GUEST_ID"]);
558 elseif($id<=0 && array_key_exists(
'SESS_GUEST_ID', $_SESSION)) $arFields_i[
"CREATED_GUEST_ID"] = intval($_SESSION[
"SESS_GUEST_ID"]);
562 if (intval(
$arFields[
"MODIFIED_USER_ID"])>0) $arFields_i[
"MODIFIED_USER_ID"] = intval(
$arFields[
"MODIFIED_USER_ID"]);
564 elseif (
$USER->IsAuthorized()) $arFields_i[
"MODIFIED_USER_ID"] = intval(
$USER->GetID());
568 if (intval(
$arFields[
"MODIFIED_GUEST_ID"])>0) $arFields_i[
"MODIFIED_GUEST_ID"] = intval(
$arFields[
"MODIFIED_GUEST_ID"]);
570 elseif (array_key_exists(
'SESS_GUEST_ID', $_SESSION)) $arFields_i[
"MODIFIED_GUEST_ID"] = intval($_SESSION[
"SESS_GUEST_ID"]);
574 if (
$arFields[
"DATE_CREATE"] <>
'') $arFields_i[
"DATE_CREATE"] =
$DB->CharToDateFunction(
$arFields[
"DATE_CREATE"]);
576 elseif ($id<=0) $arFields_i[
"DATE_CREATE"] =
$DB->CurrentTimeFunction();
581 if (
$arFields[
"LAST_MESSAGE_DATE"] <>
'') $arFields_i[
"LAST_MESSAGE_DATE"] =
$DB->CharToDateFunction(
$arFields[
"LAST_MESSAGE_DATE"]);
583 elseif ($id<=0) $arFields_i[
"LAST_MESSAGE_DATE"] =
$DB->CurrentTimeFunction();
589 if (
$arFields[
"DATE_MODIFY"] <>
'') $arFields_i[
"DATE_MODIFY"] =
$DB->CharToDateFunction(
$arFields[
"DATE_MODIFY"]);
591 else $arFields_i[
"DATE_MODIFY"] =
$DB->CurrentTimeFunction();
594 unset($arFields_i[
"ID"]);
595 $ar1 =
$DB->GetTableFieldsList($table);
596 $ar2 = array_keys($arFields_i);
597 $arDiff = array_diff($ar2, $ar1);
598 if (is_array($arDiff) &&
count($arDiff)>0)
foreach($arDiff as $value) unset($arFields_i[$value]);
607 $intLastTicketID = intval($arParam[
'SOURCE_TICKET_ID']);
608 $arTicket =
CTicket::GetByID($intLastTicketID,
$lang = LANG, $checkRights=
"N", $get_user_name=
"N", $get_extra_names=
"N")->Fetch();
609 $arSite = CSite::GetById($arTicket[
'SITE_ID'])->Fetch();
611 $intSplitMesageID = intval($arParam[
'SOURCE_MESSAGE_NUM']);
612 $stSplitMesageDate =
MakeTimeStamp($arParam[
'SOURCE_MESSAGE_DATE'],
"DD.MM.YYYY HH:MI:SS") ? $arParam[
'SOURCE_MESSAGE_DATE'] :
'';
618 "MESSAGE_CREATED_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
619 "MESSAGE_CREATED_MODULE_NAME" =>
"support",
620 "MESSAGE_CREATED_GUEST_ID" =>
"null",
621 "MESSAGE_SOURCE_ID" => $arParam[
'SOURCE_MESSAGE_ID'],
622 "MESSAGE" => \
Bitrix\Main\Localization\Loc::getMessage(
"SUP_SPLIT_MESSAGE_USER_1",
array(
"#MESSAGE_DATE#" => $stSplitMesageDate,
"#TITLE#" =>
'# '.$arParam[
'SPLIT_TICKET_ID'].
' "'.$arParam[
'SPLIT_TICKET_TITLE'].
'"'), $arSite[
'LANGUAGE_ID']),
625 "NOT_CHANGE_STATUS" =>
"Y",
626 "MESSAGE_AUTHOR_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
632 $arFields_log =
array(
633 "MESSAGE_CREATED_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
634 "MESSAGE_CREATED_MODULE_NAME" =>
"support",
635 "MESSAGE_CREATED_GUEST_ID" =>
"null",
636 "MESSAGE_SOURCE_ID" => $arParam[
'SOURCE_MESSAGE_ID'],
637 "MESSAGE" => \
Bitrix\Main\Localization\Loc::getMessage(
"SUP_SPLIT_MESSAGE_LOG_1",
array(
"#MESSAGE_ID#" => $intSplitMesageID,
"#TITLE#" =>
'<a href="ticket_edit.php?ID='.$arParam[
'SPLIT_TICKET_ID'].
'&lang='.LANGUAGE_ID.
'"> # '.$arParam[
'SPLIT_TICKET_ID'].
' "'.$arParam[
'SPLIT_TICKET_TITLE'].
'"</a>'), $arSite[
'LANGUAGE_ID']),
645 "MESSAGE_CREATED_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
646 "MESSAGE_CREATED_MODULE_NAME" =>
"support",
647 "MESSAGE_CREATED_GUEST_ID" =>
"null",
648 "MESSAGE_SOURCE_ID" => $arParam[
'SOURCE_MESSAGE_ID'],
649 "MESSAGE" => \
Bitrix\Main\Localization\Loc::getMessage(
"SUP_SPLIT_MESSAGE_USER_2",
array(
"#MESSAGE_DATE#" => $stSplitMesageDate,
"#TITLE#" =>
'# '.$intLastTicketID.
' "'.$stLastTicketTitle.
'"'), $arSite[
'LANGUAGE_ID']),
652 "NOT_CHANGE_STATUS" =>
"Y",
653 "MESSAGE_AUTHOR_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
659 $arFields_log =
array(
660 "MESSAGE_CREATED_USER_ID" => $arParam[
'SPLIT_MESSAGE_USER_ID'],
661 "MESSAGE_CREATED_MODULE_NAME" =>
"support",
662 "MESSAGE_CREATED_GUEST_ID" =>
"null",
663 "MESSAGE_SOURCE_ID" => $arParam[
'SOURCE_MESSAGE_ID'],
664 "MESSAGE" => \
Bitrix\Main\Localization\Loc::getMessage(
"SUP_SPLIT_MESSAGE_LOG_2",
array(
"#MESSAGE_ID#" => $intSplitMesageID,
"#TITLE#" =>
'<a href="ticket_edit.php?ID='.$intLastTicketID.
'&lang='.LANGUAGE_ID.
'"> # '.$intLastTicketID.
' "'.$stLastTicketTitle.
'"</a>'), $arSite[
'LANGUAGE']),
671 if (isset($arParam[
'SPLIT_ATTACH_FILE']))
674 $MESSAGE =
$res->Fetch();
675 foreach($arParam[
'SPLIT_ATTACH_FILE'] as
$key => $iAttachFile)
677 $fid = CFile::CopyFile(intval($iAttachFile));
680 $arFields_fi =
array(
681 "HASH" =>
"'".
$DB->ForSql(md5(uniqid(mt_rand(),
true).time()), 255).
"'",
682 "MESSAGE_ID" => $MESSAGE[
'ID'],
684 "TICKET_ID" => $arParam[
'SPLIT_TICKET_ID'],
685 "EXTENSION_SUFFIX" =>
"null"
687 $DB->Insert(
"b_ticket_message_2_file",$arFields_fi);
700 $messageID = intval($messageID);
701 if ($messageID<=0)
return;
705 if ($checkRights==
"Y")
716 if ((
$bAdmin==
"Y" || $bSupportTeam==
"Y") && CModule::IncludeModule(
"mail"))
718 $exactly = ($exactly==
"Y" &&
$bAdmin==
"Y") ?
"Y" :
"N";
721 if ($arMessage = $rsMessage->Fetch())
723 if ($arMessage[
"IS_LOG"]!=
"Y")
725 $email_id = intval($arMessage[
"EXTERNAL_ID"]);
726 $header = $arMessage[
"EXTERNAL_FIELD_1"];
728 $DB->Update(
"b_ticket_message",
$arFields,
"WHERE ID=".$messageID);
730 $exactly = ($exactly==
"Y") ?
true :
false;
732 if ($rsEmail->Fetch())
738 CmailFilter::MarkAsSpam($header.
" \n\r ".$arMessage[
"MESSAGE"], $exactly);
749 $messageID = intval($messageID);
750 if ($messageID<=0)
return;
754 if ($checkRights==
"Y")
765 if ((
$bAdmin==
"Y" || $bSupportTeam==
"Y") && CModule::IncludeModule(
"mail"))
768 if ($arMessage = $rsMessage->Fetch())
771 $DB->Update(
"b_ticket_message",
$arFields,
"WHERE ID=".$messageID);
773 $email_id = intval($arMessage[
"EXTERNAL_ID"]);
774 $header = $arMessage[
"EXTERNAL_FIELD_1"];
776 if ($rsEmail->Fetch())
782 CmailFilter::DeleteFromSpamBase($header.
" \n\r ".$arMessage[
"MESSAGE"],
true);
783 CmailFilter::MarkAsSpam($header.
" \n\r ".$arMessage[
"MESSAGE"],
false);
789 public static function MarkAsSpam($ticketID, $exactly=
"Y", $checkRights=
"Y")
792 $ticketID = intval($ticketID);
793 if ($ticketID<=0)
return;
797 if ($checkRights==
"Y")
808 if (
$bAdmin==
"Y" || $bSupportTeam==
"Y")
810 $exactly = ($exactly==
"Y" &&
$bAdmin==
"Y") ?
"Y" :
"N";
812 $arFilter =
array(
"TICKET_ID" => $ticketID,
"TICKET_ID_EXACT_MATCH" =>
"Y",
"IS_LOG" =>
"N");
816 if ($arMessage = $rsMessages->Fetch())
822 $DB->Update(
"b_ticket",
$arFields,
"WHERE ID=".$ticketID);
829 $ticketID = intval($ticketID);
830 if ($ticketID<=0)
return;
832 if ($checkRights==
"Y")
843 if (
$bAdmin==
"Y" || $bSupportTeam==
"Y")
845 $arFilter =
array(
"TICKET_ID" => $ticketID,
"TICKET_ID_EXACT_MATCH" =>
"Y");
849 if ($arMessage = $rsMessages->Fetch())
855 $DB->Update(
"b_ticket",
$arFields,
"WHERE ID=".$ticketID);
1066 public static function UpdateLastParamsN($ticketID, $dateType, $recalculateSupportDeadline =
true, $setReopenDefault =
true)
1069 $ticketID = intval($ticketID);
1070 if ($ticketID<=0)
return;
1075 "LAST_MESSAGE_DATE" =>
"null",
1076 "LAST_MESSAGE_USER_ID" =>
"null",
1077 "LAST_MESSAGE_GUEST_ID" =>
"null",
1078 "LAST_MESSAGE_SID" =>
"null",
1079 "D_1_USER_M_AFTER_SUP_M" =>
"null",
1080 "ID_1_USER_M_AFTER_SUP_M" =>
"null",
1081 "LAST_MESSAGE_BY_SUPPORT_TEAM" =>
"'Y'",
1083 if ($setReopenDefault)
1088 $DB->StartUsingMasterOnly();
1095 " .
$DB->DateToCharFunction(
"T.DEADLINE_SOURCE_DATE",
"FULL") .
" DEADLINE_SOURCE_DATE,
1096 " .
$DB->DateToCharFunction(
"T.D_1_USER_M_AFTER_SUP_M",
"FULL") .
" DATE_OLD,
1098 SLA.RESPONSE_TIME_UNIT,
1100 SLA.NOTICE_TIME_UNIT,
1104 INNER JOIN b_ticket_sla SLA
1105 ON T.SLA_ID = SLA.ID
1106 AND T.ID = $ticketID
1108 $rs =
$DB->Query($strSql);
1109 $arTicket =
$rs->Fetch();
1112 $DB->StopUsingMasterOnly();
1116 $arMessagesAll =
array();
1118 $arFirstUserMessAfterSupportMess =
null;
1121 $messAfterSupportMess =
true;
1126 ".$DB->DateToCharFunction(
"DATE_CREATE",
"FULL").
" DATE_CREATE,
1138 AND(NOT(IS_LOG='Y'))
1146 $rs =
$DB->Query($strSql);
1147 $DB->StopUsingMasterOnly();
1149 while($arM =
$rs->Fetch())
1151 $arMessagesAll[] = $arM;
1152 if($arM[
"IS_OVERDUE"] !==
'Y')
1154 if($arM[
"IS_HIDDEN"] !==
'Y')
1156 if($arM[
"NOT_CHANGE_STATUS"] !==
'Y')
1162 $allTime += intval($arM[
"TASK_TIME"]);
1164 if($arM[
"IS_HIDDEN"] !==
'Y' && $arM[
"NOT_CHANGE_STATUS"] !==
'Y')
1166 if(in_array(intval($arM[
"OWNER_USER_ID"]), $arSupportTeam))
1168 $arFirstUserMessAfterSupportMess =
null;
1169 $messAfterSupportMess =
true;
1171 elseif($messAfterSupportMess)
1173 $arFirstUserMessAfterSupportMess = $arM;
1174 $messAfterSupportMess =
false;
1179 if($arLastMess !==
null)
1181 $arFields[
"LAST_MESSAGE_USER_ID"] = $arLastMess[
"OWNER_USER_ID"];
1184 $arFields[
"LAST_MESSAGE_DATE"] =
$DB->CharToDateFunction($arLastMess[
"DATE_CREATE"]);
1186 $arFields[
"LAST_MESSAGE_GUEST_ID"] = intval($arLastMess[
"OWNER_GUEST_ID"]);
1187 $arFields[
"LAST_MESSAGE_SID"] =
"'" .
$DB->ForSql($arLastMess[
"OWNER_SID"], 255) .
"'";
1192 if($arFirstUserMessAfterSupportMess !==
null)
1194 $arFields[
"D_1_USER_M_AFTER_SUP_M"] =
$DB->CharToDateFunction($arFirstUserMessAfterSupportMess[
"DATE_CREATE"]);
1195 $arFields[
"ID_1_USER_M_AFTER_SUP_M"] = intval($arFirstUserMessAfterSupportMess[
"ID"]);
1196 $arFields[
"LAST_MESSAGE_BY_SUPPORT_TEAM"] =
"'N'";
1199 if(is_array($dateType[
"EVENT"]) && in_array(
CTicket::REOPEN, $dateType[
"EVENT"]))
1201 $arFields[
"DEADLINE_SOURCE_DATE"] =
$DB->CharToDateFunction(
GetTime(time() + CTimeZone::GetOffset(),
"FULL"));
1203 elseif($arTicket[
"IS_OVERDUE"] ==
"Y")
1205 $recalculateSupportDeadline =
false;
1208 $recalculateSupportDeadline = $recalculateSupportDeadline && (intval($arTicket[
"DATE_CLOSE"]) <= 0) && (
$arFields[
"LAST_MESSAGE_BY_SUPPORT_TEAM"] ==
"'N'");
1210 if(!$recalculateSupportDeadline)
1212 if (
$arFields[
"LAST_MESSAGE_BY_SUPPORT_TEAM"] ==
"'Y'" || intval($arTicket[
"DATE_CLOSE"]) > 0)
1214 $arFields[
"SUPPORT_DEADLINE_NOTIFY"] =
"null";
1221 $DB->Update(
"b_ticket",
$arFields,
"WHERE ID='" . $ticketID .
"'");
1223 if($recalculateSupportDeadline)
1225 $arTicket[
"M_ID"] = $arFirstUserMessAfterSupportMess[
"ID"];
1226 $arTicket[
"D_1_USER_M_AFTER_SUP_M"] = $arFirstUserMessAfterSupportMess[
"DATE_CREATE"];
1254 $ticketID = intval($ticketID);
1255 if ($ticketID<=0)
return;
1262 SUM(CASE WHEN IS_HIDDEN='Y' THEN 0 ELSE 1 END) MESSAGES,
1263 SUM(TASK_TIME) ALL_TIME
1267 TICKET_ID = $ticketID
1268 and (IS_LOG='N' or IS_LOG is null or ".$DB->Length(
"IS_LOG").
"<=0)
1269 and (IS_OVERDUE='N' or IS_OVERDUE is null or ".
$DB->Length(
"IS_OVERDUE").
"<=0)
1271 $z =
$DB->Query($strSql);
1276 $DB->Update(
"b_ticket",
$arFields,
"WHERE ID='".$ticketID.
"'");
1282 $arSqlSearch = Array();
1287 $filterKeysCount =
count($filter_keys);
1288 for (
$i=0;
$i<$filterKeysCount;
$i++)
1294 $match_value_set = (in_array(
$key.
"_EXACT_MATCH", $filter_keys)) ?
true :
false;
1299 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $match_value_set) ?
"Y" :
"N";
1307 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $match_value_set) ?
"Y" :
"N";
1313 if ($by ==
"s_id") $strSqlOrder =
"ORDER BY MF.ID";
1314 elseif ($by ==
"s_file_id") $strSqlOrder =
"ORDER BY F.ID";
1315 elseif ($by ==
"s_message_id") $strSqlOrder =
"ORDER BY MF.MESSAGE_ID";
1318 $strSqlOrder =
"ORDER BY MF.ID";
1323 $strSqlOrder .=
" desc ";
1327 $strSqlOrder .=
" asc ";
1333 if ($checkRights ==
'Y')
1341 if (
$bAdmin!=
'Y' && $bSupportTeam!=
'Y' && $bSupportClient!=
'Y' && $bDemo!=
'Y')
return false;
1343 if (!(
$bAdmin ==
'Y' || $bDemo ==
'Y'))
1349 $result =
$DB->Query(
'SELECT GROUP_ID FROM b_ticket_user_ugroup WHERE USER_ID = '.
$uid.
' AND CAN_VIEW_GROUP_MESSAGES = \'Y\'');
1355 while ($row =
$result->Fetch())
1357 $uGroups[] = $row[
'GROUP_ID'];
1360 if (!empty($uGroups))
1362 $result =
$DB->Query(
'SELECT USER_ID FROM b_ticket_user_ugroup WHERE GROUP_ID IN ('.join(
',', $uGroups).
')');
1365 while ($row =
$result->Fetch())
1367 $ticketUsers[] = $row[
'USER_ID'];
1374 $strSqlSearchUser =
"";
1376 if($bSupportTeam ==
'Y')
1378 $strSqlSearchUser =
'T.RESPONSIBLE_USER_ID IN ('.join(
',', $ticketUsers).
')';
1380 elseif ($bSupportClient ==
'Y')
1382 $strSqlSearchUser =
'T.OWNER_USER_ID IN ('.join(
',', $ticketUsers).
')';
1385 if ($strSqlSearchUser)
1387 $ticketJoin =
'INNER JOIN b_ticket T ON (T.ID = MF.TICKET_ID)';
1388 $arSqlSearch[] = $strSqlSearchUser;
1392 if ($bSupportTeam!=
"Y" &&
$bAdmin!=
"Y" && $bDemo!=
'Y')
1394 $messageJoin =
'INNER JOIN b_ticket_message M ON (M.ID = MF.MESSAGE_ID)';
1396 $arSqlSearch[] =
"M.IS_HIDDEN='N'";
1397 $arSqlSearch[] =
"M.IS_LOG='N'";
1404 F.*, ".$DB->DateToCharFunction(
"F.TIMESTAMP_X").
" as TIMESTAMP_X,
1411 b_ticket_message_2_file MF
1412 INNER JOIN b_file F ON (MF.FILE_ID = F.ID)
1428 public static function GetByID($id,
$lang=LANG, $checkRights=
"Y", $get_user_name=
"Y", $get_extra_names=
"Y",
$arParams = Array())
1430 return CTicket::GetList(
'',
'',
array(
"ID" => $id,
"ID_EXACT_MATCH" =>
"Y"),
null, $checkRights, $get_user_name, $get_extra_names,
$lang,
$arParams);
1439 $result =
$DB->Query(
"SELECT MAX(ID) as MAX_ID FROM b_ticket");
1443 $id = $row[
'MAX_ID'];
1449 public static function Delete($ticketID, $checkRights=
"Y")
1452 $ticketID = intval($ticketID);
1453 if ($ticketID<=0)
return;
1455 if ($checkRights==
"Y")
1473 b_ticket_message_2_file MF,
1476 MF.TICKET_ID = '$ticketID'
1479 $z =
$DB->Query($strSql);
1480 while (
$zr =
$z->Fetch()) CFile::Delete(
$zr[
"ID"]);
1483 $DB->Query(
"DELETE FROM b_ticket_message_2_file WHERE TICKET_ID='$ticketID'");
1484 $DB->Query(
"DELETE FROM b_ticket_message WHERE TICKET_ID='$ticketID'");
1485 $GLOBALS[
"USER_FIELD_MANAGER"]->Delete(
"SUPPORT", $ticketID);
1486 $DB->Query(
"DELETE FROM b_ticket WHERE ID='$ticketID'");
1495 public static function UpdateOnline($ticketID, $userID=
false, $currentMode=
"")
1498 if ($userID===
false && is_object(
$USER)) $userID =
$USER->GetID();
1499 $ticketID = intval($ticketID);
1500 $userID = intval($userID);
1501 if ($ticketID<=0 || $userID<=0)
return;
1503 "TIMESTAMP_X" =>
$DB->GetNowFunction(),
1504 "TICKET_ID" => $ticketID,
1505 "USER_ID" => $userID,
1507 if ($currentMode!==
false)
1509 $arFields[
"CURRENT_MODE"] = $currentMode <>
'' ?
"'".$DB->ForSQL($currentMode, 20).
"'" :
"null";
1511 $rows =
$DB->Update(
"b_ticket_online",
$arFields,
"WHERE TICKET_ID=$ticketID and USER_ID=$userID");
1512 if (intval(
$rows)<=0)
1518 public static function SetTicket(
$arFields, $ticketID=
"", $checkRights=
"Y", $sendEmailToAuthor=
"Y", $sendEmailToTechsupport=
"Y")
1523 $x = CTicket::Set(
$arFields, $messageID, $ticketID, $checkRights, $sendEmailToAuthor, $sendEmailToTechsupport);
1541 $arEmails = explode(
",",
$emails);
1542 if(is_array($arEmails) &&
count($arEmails) > 0)
1544 foreach($arEmails as
$email)
1549 preg_match_all(
"#[<\[\(](.*?)[>\]\)]#iu",
$email,
$arr);
1581 "b_ticket" =>
array(
1582 "ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" => 0,
"AUTO_CALCULATED" =>
true),
1583 "SITE_ID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
"",
"MAX_STR_LEN" => 2),
1584 "DATE_CREATE" =>
array(
"TYPE" => $dt,
"DEF_VAL" =>
null ),
1585 "DAY_CREATE" =>
array(
"TYPE" => $d,
"DEF_VAL" =>
null ),
1586 "TIMESTAMP_X" =>
array(
"TYPE" => $dt,
"DEF_VAL" =>
null ),
1587 "DATE_CLOSE" =>
array(
"TYPE" => $dt,
"DEF_VAL" =>
null ),
1588 "AUTO_CLOSED" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
null ),
1589 "AUTO_CLOSE_DAYS" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1590 "SLA_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" => 1 ),
1591 "NOTIFY_AGENT_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1592 "EXPIRE_AGENT_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1593 "OVERDUE_MESSAGES" =>
array(
"TYPE" =>
$n,
"DEF_VAL" => 0 ),
1594 "IS_NOTIFIED" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
"N" ),
1595 "IS_OVERDUE" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
"N" ),
1596 "CATEGORY_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1597 "CRITICALITY_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1598 "STATUS_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1599 "MARK_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1600 "SOURCE_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1601 "DIFFICULTY_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1602 "TITLE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
"",
"MAX_STR_LEN" => 255),
1603 "MESSAGES" =>
array(
"TYPE" =>
$n,
"DEF_VAL" => 0 ),
1604 "IS_SPAM" =>
array(
"TYPE" => $ynn,
"DEF_VAL" =>
null ),
1605 "OWNER_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1606 "OWNER_GUEST_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1607 "OWNER_SID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null,
"MAX_STR_LEN" => 255),
1608 "CREATED_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1609 "CREATED_GUEST_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1610 "CREATED_MODULE_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
"support",
"MAX_STR_LEN" => 255),
1611 "RESPONSIBLE_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1612 "MODIFIED_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1613 "MODIFIED_GUEST_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1614 "MODIFIED_MODULE_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null,
"MAX_STR_LEN" => 255),
1615 "LAST_MESSAGE_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1616 "LAST_MESSAGE_GUEST_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1617 "LAST_MESSAGE_SID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null,
"MAX_STR_LEN" => 255),
1618 "LAST_MESSAGE_BY_SUPPORT_TEAM" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
"N" ),
1619 "LAST_MESSAGE_DATE" =>
array(
"TYPE" => $dt,
"DEF_VAL" =>
null ),
1620 "SUPPORT_COMMENTS" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null,
"MAX_STR_LEN" => 255),
1621 "PROBLEM_TIME" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1622 "HOLD_ON" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
"N" ),
1623 "REOPEN" =>
array(
"TYPE" => $yn,
"DEF_VAL" =>
"N" ),
1624 "COUPON" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null,
"MAX_STR_LEN" => 255),
1625 "DEADLINE_SOURCE_DATE" =>
array(
"TYPE" => $dt,
"DEF_VAL" =>
null ),
1628 "EventFields" =>
array(
1629 "ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1630 "LANGUAGE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1631 "LANGUAGE_ID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1632 "WHAT_CHANGE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1633 "DATE_CREATE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1634 "TIMESTAMP" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1635 "DATE_CLOSE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1636 "TITLE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1637 "STATUS" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1638 "DIFFICULTY" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1639 "CATEGORY" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1640 "CRITICALITY" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1641 "RATE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1642 "SLA" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1643 "SOURCE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1644 "MESSAGES_AMOUNT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1645 "SPAM_MARK" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1646 "ADMIN_EDIT_URL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1647 "PUBLIC_EDIT_URL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1648 "OWNER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1649 "OWNER_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1650 "OWNER_USER_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1651 "OWNER_USER_LOGIN" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1652 "OWNER_USER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1653 "OWNER_TEXT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1654 "OWNER_SID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1655 "SUPPORT_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1656 "RESPONSIBLE_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1657 "RESPONSIBLE_USER_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1658 "RESPONSIBLE_USER_LOGIN" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1659 "RESPONSIBLE_USER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1660 "RESPONSIBLE_TEXT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1661 "SUPPORT_ADMIN_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1662 "CREATED_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1663 "CREATED_USER_LOGIN" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1664 "CREATED_USER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1665 "CREATED_USER_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1666 "CREATED_MODULE_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1667 "CREATED_TEXT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1668 "MODIFIED_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1669 "MODIFIED_USER_LOGIN" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1670 "MODIFIED_USER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1671 "MODIFIED_USER_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1672 "MODIFIED_MODULE_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1673 "MODIFIED_TEXT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1674 "MESSAGE_AUTHOR_USER_ID" =>
array(
"TYPE" =>
$n,
"DEF_VAL" =>
null ),
1675 "MESSAGE_AUTHOR_USER_NAME" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1676 "MESSAGE_AUTHOR_USER_LOGIN" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1677 "MESSAGE_AUTHOR_USER_EMAIL" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1678 "MESSAGE_AUTHOR_TEXT" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1679 "MESSAGE_AUTHOR_SID" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1680 "MESSAGE_SOURCE" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1681 "MESSAGE_HEADER" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1682 "MESSAGE_BODY" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1683 "MESSAGE_FOOTER" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1684 "FILES" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1685 "FILES_LINKS" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1686 "IMAGE_LINK" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1687 "SUPPORT_COMMENTS" =>
array(
"TYPE" => $s,
"DEF_VAL" =>
null ),
1692 if(!array_key_exists(
$name, $tables))
return null;
1706 $fl .= (CMain::IsHTTPS()?
"https" :
"http").
"://" .
$_SERVER[
"HTTP_HOST"] .
"/bitrix/tools/ticket_show_file.php?hash=" . $arFile[
"HASH"] .
"&action=download&lang=" . $lID .
"\n";
1708 if ($fl <>
'') $fl .=
"\n";
1718 $v->change_hidden =
"";
1722 $v->arChange =
array();
1723 if($nf->SLA_NAME <>
'') $v->arChange[
"SLA_ID"] =
"Y";
1724 if($nf->CATEGORY_NAME <>
'') $v->arChange[
"CATEGORY_ID"] =
"Y";
1725 if($nf->CRITICALITY_NAME <>
'') $v->arChange[
"CRITICALITY_ID"] =
"Y";
1726 if($nf->STATUS_NAME <>
'') $v->arChange[
"STATUS_ID"] =
"Y";
1727 if($nf->DIFFICULTY_NAME <>
'') $v->arChange[
"DIFFICULTY_ID"] =
"Y";
1728 if($mf->RESPONSIBLE_TEXT <>
'') $v->arChange[
"RESPONSIBLE_USER_ID"] =
"Y";
1732 if(!is_array($v->arChange) ||
count($v->arChange) <= 0)
return;
1734 foreach($v->arChange as
$key => $value)
1736 if ($value !=
"Y")
continue;
1741 $v->change .=
GetMessage(
"SUP_REQUEST_CLOSED").
"\n";
1742 $change_log .=
"<li>".GetMessage(
"SUP_REQUEST_CLOSED_LOG");
1745 $v->change .=
GetMessage(
"SUP_REQUEST_OPENED").
"\n";
1746 $change_log .=
"<li>".GetMessage(
"SUP_REQUEST_OPENED_LOG");
1750 $v->change .=
GetMessage(
"SUP_HOLD_ON_ON") .
"\n";
1751 $change_log .=
"<li>" .
GetMessage(
"SUP_HOLD_ON_ON_LOG");
1754 $v->change .=
GetMessage(
"SUP_HOLD_ON_OFF") .
"\n";
1755 $change_log .=
"<li>" .
GetMessage(
"SUP_HOLD_ON_OFF_LOG");
1758 case "RESPONSIBLE_USER_ID":
1759 $v->change .=
GetMessage(
"SUP_RESPONSIBLE_CHANGED") .
"\n";
1763 $v->change .=
GetMessage(
"SUP_CATEGORY_CHANGED") .
"\n";
1766 case "CRITICALITY_ID":
1767 $v->change .=
GetMessage(
"SUP_CRITICALITY_CHANGED") .
"\n";
1771 $v->change .=
GetMessage(
"SUP_STATUS_CHANGED") .
"\n";
1774 case "DIFFICULTY_ID":
1775 $v->change_hidden .=
GetMessage(
"SUP_DIFFICULTY_CHANGED") .
"\n";
1779 $v->change .=
GetMessage(
"SUP_MARK_CHANGED") .
"\n";
1783 $v->change .=
GetMessage(
"SUP_SLA_CHANGED") .
"\n";
1787 $v->change .=
GetMessage(
"SUP_TITLE_CHANGED") .
"\n";
1791 $v->change .=
GetMessage(
"SUP_NEW_MESSAGE") .
"\n";
1793 case "HIDDEN_MESSAGE":
1794 $v->change_hidden .=
GetMessage(
"SUP_NEW_HIDDEN_MESSAGE").
"\n";
1795 $line1 = str_repeat(
"=", 20);
1796 $line2 = str_repeat(
"=", 30);
1797 $mf->MESSAGE_HEADER = $line1 .
" " .
GetMessage(
"SUP_MAIL_HIDDEN_MESSAGE") .
" " . $line2;
1802 if(!$v->isNew) $mf->WHAT_CHANGE = $v->change;
1805 if($change_log <>
'')
1807 $arFields_log = $v->arFields_log;
1808 $arFields_log[
"MESSAGE"] = $change_log;
1810 $arFields_log[
"IS_LOG"] =
"Y";
1820 if(!$v->isNew) $U_Email =
"Y";
1821 else $I_Email =
"Y";
1827 $mf->ADMIN_EDIT_URL =
"/bitrix/admin/ticket_edit.php";
1828 $mf->LANGUAGE = $v->arrSite[
"LANGUAGE_ID"];
1829 $mf->LANGUAGE_ID = $v->arrSite[
"LANGUAGE_ID"];
1833 "DATE_CREATE" =>
"DATE_CREATE",
1834 "TIMESTAMP" =>
"TIMESTAMP_X",
1835 "DATE_CLOSE" =>
"DATE_CLOSE",
1837 "CATEGORY" =>
"CATEGORY_NAME",
1838 "CRITICALITY" =>
"CRITICALITY_NAME",
1839 "DIFFICULTY" =>
"DIFFICULTY_NAME",
1840 "STATUS" =>
"STATUS_NAME",
1841 "SLA" =>
"SLA_NAME",
1842 "OWNER_USER_ID" =>
"OWNER_USER_ID",
1843 "OWNER_GUEST_ID" =>
"OWNER_GUEST_ID",
1844 "OWNER_SID" =>
"OWNER_SID",
1845 "OWNER_USER_NAME" =>
"OWNER_NAME",
1846 "OWNER_USER_LOGIN" =>
"OWNER_LOGIN",
1847 "OWNER_USER_EMAIL" =>
"OWNER_EMAIL",
1848 "RESPONSIBLE_USER_ID" =>
"RESPONSIBLE_USER_ID",
1849 "RESPONSIBLE_USER_NAME" =>
"RESPONSIBLE_NAME",
1850 "RESPONSIBLE_USER_LOGIN" =>
"RESPONSIBLE_LOGIN",
1851 "RESPONSIBLE_USER_EMAIL" =>
"RESPONSIBLE_EMAIL",
1852 "CREATED_USER_ID" =>
"CREATED_USER_ID",
1853 "CREATED_GUEST_ID" =>
"CREATED_GUEST_ID",
1854 "CREATED_USER_LOGIN" =>
"CREATED_LOGIN",
1855 "CREATED_USER_EMAIL" =>
"CREATED_EMAIL",
1856 "CREATED_USER_NAME" =>
"CREATED_NAME"
1861 $arrSet[
"MODIFIED_USER_ID"] =
"MODIFIED_USER_ID";
1862 $arrSet[
"MODIFIED_GUEST_ID"] =
"MODIFIED_GUEST_ID";
1863 $arrSet[
"MODIFIED_USER_LOGIN"] =
"MODIFIED_LOGIN";
1864 $arrSet[
"MODIFIED_USER_EMAIL"] =
"MODIFIED_EMAIL";
1865 $arrSet[
"MODIFIED_USER_NAME"] =
"MODIFIED_NAME";
1866 $arrSet[
"RATE"] =
"MARK_NAME";
1867 $arrSet[
"MESSAGES_AMOUNT"] =
"MESSAGES";
1871 $mf->FromArray((
array)$nf, $arrSet);
1873 $arUserIDs =
array($mf->OWNER_USER_ID, $mf->CREATED_USER_ID, $mf->MODIFIED_USER_ID, $mf->RESPONSIBLE_USER_ID);
1874 $arGuestIDs =
array($mf->OWNER_GUEST_ID, $mf->CREATED_GUEST_ID, $mf->MODIFIED_GUEST_ID);
1878 $userCategories =
array(
'OWNER',
'RESPONSIBLE',
'CREATED');
1882 $userCategories[] =
'MODIFIED';
1885 foreach ($userCategories as $userCategory)
1887 $propertyId = $userCategory.
'_USER_ID';
1889 if ($mf->$propertyId > 0 && isset($arStrUsers[
'arUsers'][$mf->$propertyId]))
1891 $name = CUser::FormatName(CSite::GetNameFormat(), $arStrUsers[
'arUsers'][$mf->$propertyId],
true,
true);
1892 $propertyName = $userCategory.
'_USER_NAME';
1893 $mf->$propertyName =
$name;
1895 $propertyLogin = $userCategory.
'_USER_LOGIN';
1896 $mf->$propertyLogin = $arStrUsers[
'arUsers'][$mf->$propertyId][
'LOGIN'];
1898 $propertyEmail = $userCategory.
'_USER_EMAIL';
1899 $mf->$propertyEmail = $arStrUsers[
'arUsers'][$mf->$propertyId][
'EMAIL'];
1903 $mf->FILES = $v->arrFILES;
1905 $mf->IMAGE_LINK = $mf->FILES_LINKS;
1915 if($mf->OWNER_USER_ID > 0 && isset($arStrUsers[
"arUsers"][$mf->OWNER_USER_ID]))
1917 $ownerEmail = $arStrUsers[
"arUsers"][$mf->OWNER_USER_ID][
"EMAIL"];
1919 elseif($mf->OWNER_GUEST_ID > 0 && isset($arStrUsers[
"arGuests"][$mf->OWNER_GUEST_ID]))
1921 $ownerEmail = $arStrUsers[
"arGuests"][$mf->OWNER_GUEST_ID][
"EMAIL"];
1924 if(intval($mf->OWNER_USER_ID) > 0)
1927 while($arr0 =
$rs->Fetch())
1929 if($arr0[
'EMAIL'] <>
'')
1931 $arrOwnerEmails[] = $arr0[
'EMAIL'];
1936 $mf->OWNER_EMAIL = implode(
", ", array_unique($arrOwnerEmails));
1940 if(!is_array($arrAdminEMails))
1942 $arrAdminEMails =
array();
1951 $arrSupportEmails =
array();
1952 if($mf->RESPONSIBLE_USER_ID > 0 && isset($arStrUsers[
"arUsers"][$mf->RESPONSIBLE_USER_ID]))
1954 $arrSupportEmails[] = $arStrUsers[
"arUsers"][$mf->RESPONSIBLE_USER_ID][
"EMAIL"];
1958 while($arr0 =
$rs->Fetch())
if($arr0[
'EMAIL'] <>
'')
1960 $arrSupportEmails[] = $arr0[
'EMAIL'];
1963 if(
count($arrSupportEmails) <= 0)
1965 $arrSupportEmails = $arrAdminEMails;
1967 if(
count($arrSupportEmails) <= 0)
1969 $se = COption::GetOptionString(
"main",
"email_from",
"");
1970 if($se <>
'') $arrSupportEmails[] = $se;
1974 $mf->SUPPORT_EMAIL =
count($arrSupportEmails) > 0 ? trim(implode(
",", array_unique($arrSupportEmails)),
",") :
"";
1978 if(
count($arrSupportEmails) > 0)
1980 foreach($arrSupportEmails as $e)
1982 unset($arrAdminEMails[$e]);
1985 $mf->SUPPORT_ADMIN_EMAIL =
count($arrAdminEMails) > 0 ? trim(implode(
",", $arrAdminEMails),
",") :
"";
1987 if(array_key_exists(
'PUBLIC_EDIT_URL',
$arFields) &&
$arFields[
'PUBLIC_EDIT_URL'] <>
'')
1989 $mf->PUBLIC_EDIT_URL =
$arFields[
'PUBLIC_EDIT_URL'];
1993 $peurl = COption::GetOptionString(
"support",
"SUPPORT_DIR");
1994 $peurl = str_replace(
"#LANG_DIR#", $v->arrSite[
"DIR"], $peurl);
1995 $peurl = str_replace(
"#SITE_DIR#", $v->arrSite[
"DIR"], $peurl);
1996 $peurl = str_replace(
"\\",
"/", $peurl);
1997 $peurl = str_replace(
"//",
"/", $peurl);
1998 $peurl = trim($peurl,
"/");
1999 $mf->PUBLIC_EDIT_URL =
"/".$peurl.
"/".COption::GetOptionString(
"support",
"SUPPORT_EDIT");
2003 if($mf->SUPPORT_COMMENTS <>
'') $mf->SUPPORT_COMMENTS =
"\n\n" . $mf->SUPPORT_COMMENTS .
"\n";
2005 $mf->SOURCE = $nf->SOURCE_NAME ==
'' ?
"" :
"[" . $nf->SOURCE_NAME .
"] ";
2007 $oUID = intval($mf->OWNER_USER_ID);
2008 $oGID = intval($mf->OWNER_GUEST_ID);
2011 $mf->OWNER_TEXT = $arStrUsers[
"arGuests"][$oGID][
"HTML_NAME_S"];
2019 $mf->OWNER_TEXT = $arStrUsers[
"arUsers"][$oUID][
"HTML_NAME_S"];
2022 if(trim($mf->OWNER_SID) <>
'' && $mf->OWNER_SID !=
null)
2024 $mf->OWNER_TEXT =
" / " . $mf->OWNER_TEXT;
2028 if($nf->CREATED_MODULE_NAME ==
"support" || $nf->CREATED_MODULE_NAME ==
'')
2030 $cUID = intval($mf->CREATED_USER_ID);
2031 $cGID = intval($mf->CREATED_GUEST_ID);
2034 $mf->CREATED_TEXT = $arStrUsers[
"arGuests"][$cGID][
"HTML_NAME_S"];
2038 $mf->CREATED_TEXT = $arStrUsers[
"arUsers"][$cUID][
"HTML_NAME_S"];
2043 $mf->CREATED_MODULE_NAME =
"[" . $nf->CREATED_MODULE_NAME .
"]";
2046 $rUID = intval($mf->RESPONSIBLE_USER_ID);
2049 $mf->RESPONSIBLE_TEXT = $arStrUsers[
"arUsers"][$rUID][
"HTML_NAME_S"];
2097 if($nf->MODIFIED_MODULE_NAME ==
"support" || $nf->MODIFIED_MODULE_NAME ==
'')
2099 $rUID = intval($mf->MODIFIED_USER_ID);
2100 $rGID = intval($mf->MODIFIED_GUEST_ID);
2103 $mf->MODIFIED_TEXT = $arStrUsers[
"arGuests"][$rGID][
"HTML_NAME_S"];
2111 $mf->MODIFIED_TEXT = $arStrUsers[
"arUsers"][$rUID][
"HTML_NAME_S"];
2117 $mf->MODIFIED_MODULE_NAME =
"[" . $nf->MODIFIED_MODULE_NAME .
"]";
2120 $mf->MESSAGE_SOURCE =
"";
2123 $arSource = $rsSource->Fetch();
2124 $mf->MESSAGE_SOURCE = (array_key_exists(
"NAME", $arSource) && $arSource[
"NAME"] <>
'') ?
"[" . $arSource[
"NAME"] .
"] " :
"";
2127 if((trim(
$arFields[
"MESSAGE_AUTHOR_SID"]) <>
'' || intval(
$arFields[
"MESSAGE_AUTHOR_USER_ID"]) > 0) && $v->bSupportTeam)
2129 $mf->MESSAGE_AUTHOR_USER_ID =
$arFields[
"MESSAGE_AUTHOR_USER_ID"];
2130 $mf->MESSAGE_AUTHOR_SID =
$arFields[
"MESSAGE_AUTHOR_SID"];
2132 else $mf->MESSAGE_AUTHOR_USER_ID = $v->uid;
2135 if($rsMA = CUser::GetByID($mf->MESSAGE_AUTHOR_USER_ID)) $arMA = $rsMA->Fetch();
2137 if($mf->MESSAGE_AUTHOR_USER_ID > 0 || trim($arMA[
"LOGIN"]) <>
'')
2139 $mf->MESSAGE_AUTHOR_TEXT =
"[" . $mf->MESSAGE_AUTHOR_USER_ID .
"] (" . $arMA[
"LOGIN"] .
") " . $arMA[
"NAME"] .
" " . $arMA[
"LAST_NAME"];
2140 if(trim(
$arFields[
"MESSAGE_AUTHOR_SID"]) <>
'') $mf->MESSAGE_AUTHOR_TEXT =
" / " . $mf->MESSAGE_AUTHOR_TEXT;
2141 if($mf->MESSAGE_AUTHOR_USER_ID > 0) $mf->MESSAGE_AUTHOR_TEXT .=
self::addSupportText($mf->MESSAGE_AUTHOR_USER_ID);
2144 if(trim($arMA[
"NAME"]) <>
'' || trim($arMA[
"LAST_NAME"]) <>
'') $mf->MESSAGE_AUTHOR_USER_NAME = trim($arMA[
"NAME"]) .
" ". trim($arMA[
"LAST_NAME"]);
2145 if(trim($arMA[
"LOGIN"]) <>
'') $mf->MESSAGE_AUTHOR_USER_LOGIN = $arMA[
"LOGIN"];
2146 if(trim($arMA[
"EMAIL"]) <>
'') $mf->MESSAGE_AUTHOR_USER_EMAIL = $arMA[
"EMAIL"];
2148 $mf->MESSAGE_HEADER = str_repeat(
"=", 23) .
" " .
GetMessage(
"SUP_MAIL_MESSAGE") .
" " . str_repeat(
"=", 34);
2153 $mf->SPAM_MARK =
"";
2154 if($nf->IS_SPAM <>
'')
2156 if($nf->IS_SPAM ==
"Y") $mf->SPAM_MARK =
"\n" .
GetMessage(
"SUP_EXACTLY_SPAM") .
"\n";
2157 else $mf->SPAM_MARK =
"\n" .
GetMessage(
"SUP_POSSIBLE_SPAM") .
"\n";
2165 $mf->MESSAGE_FOOTER = str_repeat(
"=", mb_strlen($mf->MESSAGE_HEADER));
2168 if ($v->isNew && $v->bActiveCoupon) $mf->COUPON = $v->V_COUPON;
2171 $arEventFields_support = $arEventFields_author;
2174 if($v->SEND_EMAIL_TO_AUTHOR ==
"Y" && ($v->isNew || $v->change <>
''))
2176 $EventType =
"TICKET_NEW_FOR_AUTHOR";
2182 $arrUnsetHidden =
array(
"MESSAGE_BODY",
"IMAGE_LINK");
2183 foreach($arrUnsetHidden as $value) $arEventFields_author[$value] =
"";
2185 $EventType =
"TICKET_CHANGE_BY_AUTHOR_FOR_AUTHOR";
2187 $EventType =
"TICKET_CHANGE_BY_SUPPORT_FOR_AUTHOR";
2189 $arEventFields_author =
CTicket::ExecuteEvents(
'OnBeforeSendMailToAuthor' , $arEventFields_author, $v->isNew, $EventType);
2190 if ($arEventFields_author) CEvent::Send($EventType, $v->arrSite[
"ID"], $arEventFields_author);
2194 if($v->SEND_EMAIL_TO_TECHSUPPORT ==
"Y" && ($v->isNew || $v->change <>
'' || $v->change_hidden <>
''))
2196 $EventType =
"TICKET_NEW_FOR_TECHSUPPORT";
2199 $arEventFields_support[
"WHAT_CHANGE"] .= $v->change_hidden;
2200 $EventType =
"TICKET_CHANGE_FOR_TECHSUPPORT";
2202 $arEventFields_support =
CTicket::ExecuteEvents(
'OnBeforeSendMailToSupport', $arEventFields_support, $v->isNew);
2203 if ($arEventFields_support) CEvent::Send($EventType, $v->arrSite[
"ID"], $arEventFields_support);
2214 $f->RESPONSIBLE_USER_ID =
null;
2216 if(
$f->RESPONSIBLE_USER_ID ==
null) unset(
$arFields[
"RESPONSIBLE_USER_ID"]);
2225 SELECT ID, C_TYPE, RESPONSIBLE_USER_ID, EVENT1, EVENT2, EVENT3
2226 FROM b_ticket_dictionary
2228 (ID=" .
$f->CATEGORY_ID .
" AND C_TYPE='C') OR
2229 (ID=" .
$f->CRITICALITY_ID .
" AND C_TYPE='K') OR
2230 (ID=" .
$f->SOURCE_ID .
" AND C_TYPE='SR')
2234 $z =
$DB->Query($strSql);
2235 $v->category_set =
false;
2236 while(
$zr =
$z->Fetch())
2242 if (
$zr[
"C_TYPE"]==
"C")
2244 $v->T_EVENT1 = trim(
$zr[
"EVENT1"]);
2245 $v->T_EVENT2 = trim(
$zr[
"EVENT2"]);
2246 $v->T_EVENT3 = trim(
$zr[
"EVENT3"]);
2247 $v->category_set =
true;
2249 if(
$f->RESPONSIBLE_USER_ID ==
null && intval(
$zr[
"RESPONSIBLE_USER_ID"]) > 0)
2251 $RU_ID = intval(
$zr[
"RESPONSIBLE_USER_ID"]);
2259 if(
$f->RESPONSIBLE_USER_ID ==
null)
2264 if($rsSLA !==
false && $arSLA = $rsSLA->Fetch())
2266 if(intval($arSLA[
"RESPONSIBLE_USER_ID"]) > 0)
2268 $f->RESPONSIBLE_USER_ID = $arSLA[
"RESPONSIBLE_USER_ID"];
2274 if (
$f->RESPONSIBLE_USER_ID ==
null)
2277 $RU_ID = intval(COption::GetOptionString(
"support",
"DEFAULT_RESPONSIBLE_ID"));
2278 $f->RESPONSIBLE_USER_ID = $RU_ID;
2294 if($v->bActiveCoupon)
2299 if($arCoupon = $rsCoupon->Fetch())
2301 if(intval($arCoupon[
'SLA_ID']) > 0)
2303 $slaID= intval($arCoupon[
'SLA_ID']);
2317 $f->SLA_ID = $slaID;
2333 $v = (object)
array();
2335 if(!is_object(
$USER))
2345 $f->ID = intval($id);
2346 $v->isNew = (
$f->ID <= 0);
2348 $v->CHECK_RIGHTS = ($checkRights ==
"Y") ?
"Y" :
"N";
2349 $v->SEND_EMAIL_TO_AUTHOR = ($sendEmailToAuthor ==
"Y") ?
"Y" :
"N";
2350 $v->SEND_EMAIL_TO_TECHSUPPORT = ($sendEmailToTechsupport ==
"Y") ?
"Y" :
"N";
2388 $v->bAdmin = $v->bSupportTeam = $v->bSupportClient = $v->bDemo = $v->bOwner =
false;
2389 if($v->CHECK_RIGHTS ==
"Y")
2396 if($v->isNew) $v->bOwner =
true;
2401 $v->bAdmin = $v->bSupportTeam = $v->bSupportClient = $v->bDemo = $v->bOwner =
true;
2404 if(!$v->bAdmin && !$v->bSupportTeam && !$v->bSupportClient)
return false;
2405 if (!$v->bAdmin && !$v->bSupportTeam && ($v->bDemo && !$v->bOwner))
return false;
2410 $v->bActiveCoupon =
false;
2424 "CRITICALITY" =>
"K",
2428 "MESSAGE_SOURCE" =>
"SR",
2440 return array(
"v" => $v,
"f" =>
$f);
2443 public static function Set(
$arFields, &$MID, $id=
"", $checkRights=
"Y", $sendEmailToAuthor=
"Y", $sendEmailToTechsupport=
"Y")
2448 if(!is_array($v0))
return $v0;
2463 $v->arrOldFields =
array();
2465 "TITLE" =>
"T.TITLE",
2466 "RESPONSIBLE_USER_ID" =>
"T.RESPONSIBLE_USER_ID",
2467 "SLA_ID" =>
"T.SLA_ID",
2468 "CATEGORY_ID" =>
"T.CATEGORY_ID",
2469 "CRITICALITY_ID" =>
"T.CRITICALITY_ID",
2470 "STATUS_ID" =>
"T.STATUS_ID",
2471 "MARK_ID" =>
"T.MARK_ID",
2472 "DIFFICULTY_ID" =>
"T.DIFFICULTY_ID",
2473 "DATE_CLOSE" =>
"T.DATE_CLOSE",
2474 "HOLD_ON" =>
"T.HOLD_ON",
2475 "RESPONSE_TIME" =>
"S.RESPONSE_TIME",
2476 "RESPONSE_TIME_UNIT" =>
"S.RESPONSE_TIME_UNIT"
2479 foreach (
$arr as $s)
$str .=
"," . $s;
2480 $strSql =
"SELECT " .
$str .
", SITE_ID FROM b_ticket T LEFT JOIN b_ticket_sla S ON T.SLA_ID = S.ID WHERE T.ID='" .
$f->ID .
"'";
2481 $z =
$DB->Query($strSql);
2484 $f->SITE_ID =
$zr[
"SITE_ID"];
2485 if(intval($v->uid) ==
$zr[
"RESPONSIBLE_USER_ID"]) $v->bSupportTeam =
"Y";
2491 "SITE_ID,MODIFIED_MODULE_NAME,SLA_ID,SOURCE_ID",
2495 if (!
$f->MODIFIED_MODULE_NAME)
2497 $f->MODIFIED_MODULE_NAME =
'';
2502 "CATEGORY_ID,RESPONSIBLE_USER_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SUPPORT_COMMENTS"
2509 $f->setCurrentTime(
"TIMESTAMP_X");
2512 $f->setCurrentTime(
"DATE_CLOSE");
2516 $v->IS_GROUP_USER =
'N';
2517 if($v->bAdmin) $IS_GROUP_USER =
'Y';
2518 elseif($v->CHECK_RIGHTS ==
'Y' && ($v->bSupportClient || $v->bSupportTeam))
2520 if($v->bSupportTeam) $join_query =
'(T.RESPONSIBLE_USER_ID IS NOT NULL AND T.RESPONSIBLE_USER_ID=O.USER_ID)';
2521 else $join_query =
'(T.OWNER_USER_ID IS NOT NULL AND T.OWNER_USER_ID=O.USER_ID)';
2523 $strSql =
"SELECT 'x'
2525 INNER JOIN b_ticket_user_ugroup O ON $join_query
2526 INNER JOIN b_ticket_user_ugroup C ON (O.GROUP_ID=C.GROUP_ID)
2527 INNER JOIN b_ticket_ugroups G ON (O.GROUP_ID=G.ID)
2528 WHERE T.ID='" .
$f->ID .
"' AND C.USER_ID='" . $v->uid .
"' AND C.CAN_VIEW_GROUP_MESSAGES='Y' AND G.IS_TEAM_GROUP='" . ($v->bSupportTeam ?
"Y" :
"N") .
"'";
2529 $z =
$DB->Query($strSql);
2530 if(
$zr =
$z->Fetch()) $v->IS_GROUP_USER =
'Y';
2536 if (intval(
$arFields[
"AUTO_CLOSE_DAYS"]) == 0)
2543 $f->AUTO_CLOSE_DAYS =
$arFields[
"AUTO_CLOSE_DAYS"];
2547 if(is_array($v->arrOldFields) && is_array(
$arFields) &&
$arFields[
"CLOSE"] ==
"N" && $v->arrOldFields[
"DATE_CLOSE"] <>
'')
2549 $f->DATE_CLOSE =
null;
2554 $v->FirstUpdateRes =
false;
2556 if($v->bSupportTeam || $v->bAdmin)
2559 if($v->CHECK_RIGHTS ==
"N" && isset(
$arFields[
"MARK_ID"]) && intval(
$arFields[
"MARK_ID"]) > 0)
2561 $arFields_i[
"MARK_ID"] = intval(
$arFields[
"MARK_ID"]);
2563 if(
count($arFields_i) > 0)
2565 $v->SupportTeamUpdateRes =
$DB->Update(
"b_ticket", $arFields_i,
"WHERE ID='" .
$f->ID .
"'");
2571 $v->newSLA = (isset($arFields_i[
"SLA_ID"]) && $v->arrOldFields[
"SLA_ID"] != $arFields_i[
"SLA_ID"]);
2574 elseif($v->bOwner || $v->bSupportClient)
2578 $arFields_i[
"MARK_ID"] = intval(
$arFields[
"MARK_ID"]);
2579 if(
count($arFields_i) > 0)
2581 $v->SupportClientUpdateRes =
$DB->Update(
"b_ticket",
2583 "WHERE ID='" .
$f->ID .
"' AND (OWNER_USER_ID='" . $v->uid .
"' OR CREATED_USER_ID='" . $v->uid .
"' OR '" . $v->CHECK_RIGHTS .
"'='N' OR '" . $v->IS_GROUP_USER .
"'='Y')"
2598 $v->arFields_log =
array(
2600 "MESSAGE_CREATED_USER_ID" =>
$f->MODIFIED_USER_ID,
2601 "MESSAGE_CREATED_MODULE_NAME" =>
$f->MODIFIED_MODULE_NAME,
2602 "MESSAGE_CREATED_GUEST_ID" =>
$f->MODIFIED_GUEST_ID,
2603 "MESSAGE_SOURCE_ID" =>
$f->SOURCE_ID
2607 if($v->CHECK_RIGHTS ==
"Y")
2610 if(intval($v->SupportTeamUpdateRes) <= 0)
2613 unset($v->arrOldFields[
"RESPONSIBLE_USER_ID"]);
2614 unset($v->arrOldFields[
"SLA_ID"]);
2615 unset($v->arrOldFields[
"CATEGORY_ID"]);
2616 unset($v->arrOldFields[
"DIFFICULTY_ID"]);
2617 unset($v->arrOldFields[
"STATUS_ID"]);
2620 if (intval($v->SupportClientUpdateRes) <=0)
2623 unset($v->arrOldFields[
"MARK_ID"]);
2628 if(intval($v->SupportTeamUpdateRes) > 0 || intval($v->SupportClientUpdateRes) > 0)
2637 $MID = intval($MID);
2639 $dateType =
array();
2644 $dateType[
"OLD_SLA_RESPONSE_TIME"] = $v->arrOldFields[
"RESPONSE_TIME"];
2645 $dateType[
"OLD_SLA_RESPONSE_TIME_UNIT"] = $v->arrOldFields[
"RESPONSE_TIME_UNIT"];
2647 if(
$f->REOPEN ==
"Y")
2661 if(is_array($v->arrOldFields) && is_array(
$arFields))
2664 $v->arChange =
array();
2667 if(
$arFields[
"HIDDEN"] !=
"Y") $v->arChange[
"MESSAGE"] =
"Y";
2668 else $v->arChange[
"HIDDEN_MESSAGE"] =
"Y";
2670 if(
$arFields[
"CLOSE"] ==
"Y" && $v->arrOldFields[
"DATE_CLOSE"] ==
'')
2672 $v->arChange[
"CLOSE"] =
"Y";
2674 elseif(
$arFields[
"CLOSE"] ==
"N" && $v->arrOldFields[
"DATE_CLOSE"] <>
'')
2676 $v->arChange[
"OPEN"] =
"Y";
2679 if(array_key_exists(
"HOLD_ON",
$arFields))
2681 if($v->arrOldFields[
"HOLD_ON"] ==
null)
2683 $v->arrOldFields[
"HOLD_ON"] =
'N';
2689 if($v->arrOldFields[
"HOLD_ON"] !=
$arFields[
"HOLD_ON"])
2693 $v->arChange[
"HOLD_ON_ON"] =
"Y";
2697 $v->arChange[
"HOLD_ON_OFF"] =
"Y";
2701 unset($v->arrOldFields[
"HOLD_ON"]);
2704 foreach($v->arrOldFields as
$key => $value)
2710 $v->arChange[
$key] =
"Y";
2714 $v->arChange[
$key] =
"Y";
2724 if(
$zr =
$z->Fetch())
2729 $v->arrSite = $rsSite->Fetch();
2743 if (isset(
$arFields[
'SLA_ID']) && !($v->bSupportTeam || $v->bAdmin || $v->bDemo || $v->bActiveCoupon))
2752 if(!((trim(
$arFields[
"OWNER_SID"]) <>
'' || intval(
$arFields[
"OWNER_USER_ID"]) > 0) && ($v->bSupportTeam || $v->bAdmin)))
2754 $f->OWNER_USER_ID = ($v->uid > 0) ? $v->uid : null;
2755 $f->OWNER_SID =
null;
2756 $f->OWNER_GUEST_ID = intval($_SESSION[
"SESS_GUEST_ID"]) > 0 ? intval($_SESSION[
"SESS_GUEST_ID"]) : null;
2759 $f->FromArray(
$arFields,
"CREATED_USER_ID,CREATED_MODULE_NAME,CATEGORY_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SOURCE_ID,TITLE",
array(
CSupportTableFields::MORE0,
CSupportTableFields::NOT_EMTY_STR));
2761 if (!
$f->CREATED_USER_ID)
2766 $f->setCurrentTime(
"LAST_MESSAGE_DATE,DAY_CREATE,TIMESTAMP_X,DEADLINE_SOURCE_DATE");
2771 if($v->bSupportTeam || $v->bAdmin || $v->Demo)
2776 if(!self::Set_getCOUPONandSLA($v,
$f,
$arFields))
return false;
2779 if ($v->bActiveCoupon)
$f->COUPON = $v->V_COUPON;
2785 $v->arFields_log =
array(
2787 "MESSAGE_CREATED_USER_ID" =>
$f->CREATED_USER_ID,
2788 "MESSAGE_CREATED_MODULE_NAME" =>
$f->CREATED_MODULE_NAME,
2789 "MESSAGE_CREATED_GUEST_ID" =>
$f->MODIFIED_GUEST_ID,
2790 "MESSAGE_SOURCE_ID" =>
$f->SOURCE_ID
2794 $acd0 = intval(COption::GetOptionString(
"support",
"DEFAULT_AUTO_CLOSE_DAYS"));
2795 $f->AUTO_CLOSE_DAYS = (($acd0 <= 0) ? 7 : $acd0);
2796 $arFields[
"AUTO_CLOSE_DAYS"] =
$f->AUTO_CLOSE_DAYS;
2799 $id =
$DB->Insert(
"b_ticket", $arFields_i);
2800 if(!($id > 0))
return $id;
2805 $arFields[
"MESSAGE_AUTHOR_USER_ID"] =
$f->OWNER_USER_ID;
2806 $arFields[
"MESSAGE_CREATED_MODULE_NAME"] =
$f->CREATED_MODULE_NAME;
2816 $MID = intval($MID);
2818 if(intval($MID) > 0)
2834 if(
$zr =
$z->Fetch())
2839 $v->arrSite = $rsSite->Fetch();
2844 if(CModule::IncludeModule(
"statistic"))
2846 if(!$v->category_set)
2848 $v->T_EVENT1 =
"ticket";
2852 if($v->T_EVENT3 ==
'') $v->T_EVENT3 =
"http://" .
$_SERVER[
"HTTP_HOST"] .
"/bitrix/admin/ticket_edit.php?ID=" .
$f->ID .
"&lang=" . $v->arrSite[
"LANGUAGE_ID"];
2890 $arFilter[
"TICKET_ID_EXACT_MATCH"] =
"Y";
2918 if($CMGM !=
null) $condition .=
"
2919 AND TUG2.CAN_MAIL_GROUP_MESSAGES = '" . ($CMGM ==
"Y" ?
"Y" :
"N") .
"'";
2920 if($CMUGM !=
null) $condition .=
"
2921 AND TUG2.CAN_MAIL_UPDATE_GROUP_MESSAGES = '" . ($CMUGM ==
"Y" ?
"Y" :
"N") .
"'";
2924 if($SG !=
null) $condition2 .=
"
2925 AND TG.IS_TEAM_GROUP = '" . ($SG ==
"Y" ?
"Y" :
"N") .
"'";
2938 TUG2.USER_ID AS USER_ID
2941 INNER JOIN b_ticket_user_ugroup TUG
2942 ON TG.ID = TUG.GROUP_ID" . $condition2 .
"
2943 INNER JOIN b_ticket_user_ugroup TUG2
2944 ON TUG.USER_ID = '" . intval($userID) .
"'
2945 AND TUG.GROUP_ID = TUG2.GROUP_ID" . $condition .
"
2950 ON TU.USER_ID = U.ID
2961 $arGuestUserIDs =
array();
2962 $arResUsers =
array();
2963 $arResGuests =
array();
2964 $siteNameFormat = CSite::GetNameFormat();
2965 $isActive = CModule::IncludeModule(
"statistic");
2966 $arUserIDs = array_map(
'intval', $arUserIDs);
2968 if(
count($arGuestIDs) > 0)
2970 $arGuestIDsU = array_unique($arGuestIDs);
2971 $arGuestIDsU = array_map(
'intval', $arGuestIDsU);
2972 $arGuestIDs =
array();
2975 $strGuests = implode(
"|", $arGuestIDsU);
2977 while(
$ar =
$rs->Fetch())
2979 $arGuestUserIDs[] = intval(
$ar[
"LAST_USER_ID"]);
2980 $arGuestIDs[intval(
$ar[
"ID"])] = intval(
$ar[
"LAST_USER_ID"]);
2985 foreach($arGuestIDs as
$k => $v)
2987 $arGuestIDs[$v] = 0;
2992 if(
count($arUserIDs) > 0)
2994 $arRespUserIDs = array_unique(array_merge($arUserIDs, $arGuestUserIDs));
2995 $strUsers = implode(
"|", $arRespUserIDs);
2996 $rs = CUser::GetList(
'id',
'asc',
array(
"ID" => $strUsers),
array(
"FIELDS"=>
array(
"NAME",
"SECOND_NAME",
"LAST_NAME",
"LOGIN",
"ID",
"EMAIL")));
2997 while(
$ar =
$rs->Fetch())
2999 $arResUsers[intval(
$ar[
"ID"])] =
$ar;
3003 foreach($arUserIDs as
$k => $v)
3005 if(!isset($arResUsers[$v]))
3007 $arResUsers[$v] =
array(
"NAME" =>
GetMessage(
"SUP_UNKNOWN_USER"),
"SECOND_NAME" =>
"",
"LAST_NAME" =>
"",
"LOGIN" =>
GetMessage(
"SUP_UNKNOWN_USER"),
"ID" => $v,
"EMAIL" =>
"");
3009 $name = CUser::FormatName($siteNameFormat, $arResUsers[$v],
true,
true);
3010 $arResUsers[$v][
"HTML_NAME"] =
"[<a title=\"" .
GetMessage(
"SUP_USER_PROFILE") .
"\" href=\"/bitrix/admin/user_edit.php?lang=" . LANGUAGE_ID .
"&ID=" . $v .
"\">" . $v.
"</a>] (" .
htmlspecialcharsbx($arResUsers[$v][
'LOGIN']) .
") " .
$name;
3012 $arResUsers[$v][
"HTML_NAME_S"] =
"[" . $v .
"] " .
$name;
3015 foreach($arGuestIDs as
$k => $v)
3017 if(isset($arResUsers[$v]))
3019 $arResGuests[
$k] = $arResUsers[$v];
3020 $arResGuests[
$k][
"UNKNOWN"] =
false;
3024 $arResGuests[
$k] =
array(
"NAME" =>
GetMessage(
"SUP_UNKNOWN_GUEST"),
"SECOND_NAME" =>
"",
"LAST_NAME" =>
"",
"LOGIN" =>
GetMessage(
"SUP_UNKNOWN_GUEST"),
"ID" => $v,
"UNKNOWN" =>
true,
"EMAIL" =>
"");
3026 $name = CUser::FormatName($siteNameFormat, $arResGuests[
$k],
true,
true);
3027 $arResGuests[
$k][
"HTML_NAME"] =
"[<a title=\"" .
GetMessage(
"SUP_USER_PROFILE") .
"\" href=\"/bitrix/admin/user_edit.php?lang=" . LANGUAGE_ID .
"&ID=" . $v .
"\">" . $v.
"</a>] " .
$name .
3028 " [<a title='" .
GetMessage(
"SUP_GUEST_ID") .
"' href='/bitrix/admin/guest_list.php?lang=" . LANG .
"&find_id=" .
$k .
"&find_id_exact_match=Y&set_filter=Y'>" .
$k .
"</a>]";
3029 $arResUsers[$v][
"HTML_NAME_S"] =
"[" . $v .
"] " .
$name .
" [" .
$k .
"]";
3032 return array(
"arUsers" => $arResUsers,
"arGuests" => $arResGuests);
static loadLanguageFile($file, $language=null, $normalize=true)
static GetList($by='c_sort', $order='asc', $arFilter=[], $SHOW_USERS_AMOUNT="N")
static GetList($by='s_last_date', $order='desc', $arFilter=[])
static MarkAsSpam($ID, $bIsSPAM=true, $arRow=false)
static GetOptionString($module_id, $name, $def="", $site=false, $bExactSite=false)
static AddCurrent($event1, $event2="", $event3="", $money="", $currency="", $goto="", $chargeback="N", $site_id=false)
static GetBySID($sid, $type, $siteID=SITE_ID)
static UnMarkAsSpam($ticketID, $checkRights="Y")
static UpdateOnline($ticketID, $userID=false, $currentMode="")
static GetSupportClientRoleID()
static GetMessages($ticketID, $arFilter=array(), $checkRights="Y")
static GetMessageByID($id, $checkRights="Y", $get_user_name="Y")
static GetGroupsByRole($role)
static Set_sendMails($nf, $v, $arFields)
static IsSupportTeam($userID=false)
static GetCSupportTableFields($name, $arrOrTable=CSupportTableFields::C_Array)
static IsAdmin($userID=false)
static GetRefBookValues($type, $site_id=false)
static IsSupportClient($userID=false)
static GetRoles(&$isDemo, &$isSupportClient, &$isSupportTeam, &$isAdmin, &$isAccess, &$userID, $checkRights=true)
static PrepareFields($arFields, $table, $id)
static MarkMessageAsSpam($messageID, $exactly="Y", $checkRights="Y")
static Set_WriteLog($nf, $v, $mf)
static ExecuteEvents($message, $arFields, $isNew, &$eventType=false)
static Set_getFilesLinks($arFiles, $lID)
static CheckFields($arFields, $id, $arRequired)
static IsDemo($userID=false)
static GetResponsibleList($userID, $CMGM=null, $CMUGM=null, $SG=null)
static EmailsFromStringToArray($emails, $res=null)
static Set_InitVar(&$arFields, $id, $checkRights, $sendEmailToAuthor, $sendEmailToTechsupport)
static MarkAsSpam($ticketID, $exactly="Y", $checkRights="Y")
static IsOwner($ticketID, $userID=false)
static SplitTicket($arParam)
static GetSupportTeamGroups()
static GetFileList($by='s_id', $order='asc', $arFilter=[], $checkRights='N')
static UpdateMessages($ticketID)
static GetSupportTeamAndAdminUsers()
static GetEmailsByRole($role)
static Delete($ticketID, $checkRights="Y")
static UnMarkMessageAsSpam($messageID, $checkRights="Y")
static GetSupportTeamEmails()
static addSupportText($cn)
static IsResponsible($userID=false)
static UpdateLastParamsN($ticketID, $dateType, $recalculateSupportDeadline=true, $setReopenDefault=true)
static Set_getResponsibleUser($v, $f, &$arFields)
static SetTicket($arFields, $ticketID="", $checkRights="Y", $sendEmailToAuthor="Y", $sendEmailToTechsupport="Y")
static Set_getCOUPONandSLA($v, $f, $arFields)
static HaveRole($role, $userID=false)
static GetByID($id, $lang=LANG, $checkRights="Y", $get_user_name="Y", $get_extra_names="Y", $arParams=Array())
static CheckFilter($arFilter)
static GetUsersPropertiesArray($arUserIDs=array(), $arGuestIDs=array())
static GetSupportTeamRoleID()
static RecalculateSupportDeadlineForOneTicket($arTicket, $arFields=array(), $dateType=array("EVENT"=>array(CTicket::IGNORE)))
static GetSLA( $siteID, $userID, $categoryID=null, $coupon="")
static reindexTicket($ticket, $messages=null)
static UseCoupon($coupon)
static GetList($arOrder=array(), $arFilter=array())
static GetList($by='s_c_sort', $order='asc', $arFilter=[])
static GetSupportTeamList()
static AddMessage($ticketID, $arFields, &$arrFILES, $checkRights="Y")
static GetMessageList($by='s_number', $order='asc', $arFilter=[], $isFiltered=null, $checkRights="Y", $getUserName="Y")
static isnull( $field, $alternative)
static GetOffset($USER_ID=null, $forced=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($group=$gr->Fetch()) $bAdmin
global $SUPPORT_CACHE_USER_ROLES
$_SERVER["DOCUMENT_ROOT"]
if(!defined('SITE_ID')) $lang
ExecuteModuleEventEx($arEvent, $arParams=[])
TrimArr(&$arr, $trim_value=false)
PrepareTxtForEmail($text, $lang=false, $convert_url_tag=true, $convert_image_tag=true)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
GetTime($timestamp, $type="SHORT", $site=false, $bSearchInSitesOnly=false)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
check_email($email, $strict=false, $domainCheck=false)
CheckDateTime($datetime, $format=false)
MakeTimeStamp($datetime, $format=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
$GLOBALS['_____370096793']