2require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/support/classes/general/support.php");
6 public static function isnull( $field, $alternative )
8 return "ifnull(" . $field .
"," . $alternative .
")";
25 $nowTime =
$DB->CharToDateFunction(
GetTime(time() + CTimeZone::GetOffset(),
"FULL"));
33 and (T.DATE_CLOSE is null or length(T.DATE_CLOSE)<=0)
34 and (UNIX_TIMESTAMP($nowTime)-UNIX_TIMESTAMP(T.LAST_MESSAGE_DATE))/86400 > T.AUTO_CLOSE_DAYS
35 and T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y'
38 $rsTickets =
$DB->Query($strSql);
39 while ($arTicket = $rsTickets->Fetch())
42 "TIMESTAMP_X" =>
$DB->GetNowFunction(),
43 "DATE_CLOSE" =>
$DB->GetNowFunction(),
44 "MODIFIED_USER_ID" =>
"null",
45 "MODIFIED_GUEST_ID" =>
"null",
46 "MODIFIED_MODULE_NAME" =>
"'auto closing'",
48 "AUTO_CLOSED" =>
"'Y'"
50 $DB->Update(
"b_ticket",
$arFields,
"WHERE ID='".$arTicket[
"ID"].
"'");
52 return "CTicket::AutoClose();";
58 $onlineInterval = intval(COption::GetOptionString(
"support",
"ONLINE_INTERVAL"));
60 DELETE FROM b_ticket_online WHERE
61 TIMESTAMP_X < DATE_ADD(now(), INTERVAL - $onlineInterval SECOND)
64 return "CTicket::CleanUpOnline();";
70 $ticketID = intval($ticketID);
71 $onlineInterval = intval(COption::GetOptionString(
"support",
"ONLINE_INTERVAL"));
74 ".$DB->DateToCharFunction(
"max(T.TIMESTAMP_X)").
" TIMESTAMP_X,
79 concat(ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) USER_NAME
84 T.TICKET_ID = $ticketID
85 and T.TIMESTAMP_X >= DATE_ADD(now(), INTERVAL - $onlineInterval SECOND)
88 T.USER_ID, U.EMAIL, U.LOGIN, U.NAME, U.LAST_NAME
93 $z =
$DB->Query($strSql);
104 if ($checkRights==
"Y")
121 LEFT JOIN b_ticket_message_2_file MF ON (MF.MESSAGE_ID = M.ID)
122 LEFT JOIN b_file F ON (F.ID = MF.FILE_ID)
127 $z =
$DB->Query($strSql);
128 while (
$zr =
$z->Fetch())
130 $ticketID =
$zr[
"TICKET_ID"];
131 if (intval(
$zr[
"FILE_ID"])>0)
133 CFile::Delete(
$zr[
"FILE_ID"]);
137 $z =
$DB->Query(
"DELETE FROM b_ticket_message WHERE ID='$ID'");
138 if (intval(
$z->AffectedRowsCount())>0)
156 $MESSAGE_ID = intval($MESSAGE_ID);
159 if ($checkRights==
"Y")
175 $ownerUserID =
$arFields[
"OWNER_USER_ID"];
177 "TIMESTAMP_X" =>
$DB->GetNowFunction(),
178 "C_NUMBER" => intval(
$arFields[
"C_NUMBER"]),
180 "MESSAGE_SEARCH" =>
"'".mb_strtoupper(
$DB->ForSql(
$arFields[
"MESSAGE"])).
"'",
181 "SOURCE_ID" => (intval(
$arFields[
"SOURCE_ID"])>0 ? intval(
$arFields[
"SOURCE_ID"]) :
"null"),
182 "OWNER_SID" =>
"'".
$DB->ForSql($ownerSid, 255).
"'",
183 "OWNER_USER_ID" => (intval($ownerUserID)>0 ? intval($ownerUserID) :
"null"),
184 "MODIFIED_USER_ID" => (intval(
$uid)>0 ? intval(
$uid) :
"null"),
185 "MODIFIED_GUEST_ID" => (intval($_SESSION[
"SESS_GUEST_ID"])>0 ? intval($_SESSION[
"SESS_GUEST_ID"]) :
"null"),
186 "EXTERNAL_ID" => (intval(
$arFields[
"EXTERNAL_ID"])>0 ? intval(
$arFields[
"EXTERNAL_ID"]) :
"null"),
187 "TASK_TIME" => (intval(
$arFields[
"TASK_TIME"])>0 ? intval(
$arFields[
"TASK_TIME"]) :
"null"),
188 "EXTERNAL_FIELD_1" =>
"'".
$DB->ForSql(
$arFields[
"EXTERNAL_FIELD_1"]).
"'",
189 "IS_SPAM" => (
$arFields[
"IS_SPAM"] <>
'' ?
"'".$arFields[
"IS_SPAM"].
"'" :
"null"),
190 "IS_HIDDEN" => (
$arFields[
"IS_HIDDEN"]==
"Y" ?
"'Y'" :
"'N'"),
191 "IS_LOG" => (
$arFields[
"IS_LOG"]==
"Y" ?
"'Y'" :
"'N'"),
192 "IS_OVERDUE" => (
$arFields[
"IS_OVERDUE"]==
"Y" ?
"'Y'" :
"'N'"),
193 "NOT_CHANGE_STATUS" => (
$arFields[
"NOT_CHANGE_STATUS"]==
"Y" ?
"'Y'" :
"'N'")
203 $rows =
$DB->Update(
"b_ticket_message",$arFields_u,
"WHERE ID='".$MESSAGE_ID.
"'");
207 if ($arMessage = $rsMessage->Fetch())
209 $ticketID = $arMessage[
"TICKET_ID"];
212 $not_image_extension_suffix = COption::GetOptionString(
"support",
"NOT_IMAGE_EXTENSION_SUFFIX");
213 $not_image_upload_dir = COption::GetOptionString(
"support",
"NOT_IMAGE_UPLOAD_DIR");
214 $max_size = COption::GetOptionString(
"support",
"SUPPORT_MAX_FILESIZE");
217 if (is_array($arrFiles) &&
count($arrFiles)>0)
219 foreach ($arrFiles as $arFile)
221 if ($arFile[
"name"] <>
'' || $arFile[
"del"]==
"Y")
223 if ($bSupportTeam!=
"Y" &&
$bAdmin!=
"Y") $max_file_size = intval($max_size)*1024;
225 $upload_dir =
"support";
226 if (!CFile::IsImage($arFile[
"name"], $arFile[
"type"]))
228 $fes = $not_image_extension_suffix;
229 $arFile[
"name"] .= $fes;
230 $upload_dir = $not_image_upload_dir;
233 if (!array_key_exists(
"MODULE_ID", $arFile) || $arFile[
"MODULE_ID"] ==
'')
234 $arFile[
"MODULE_ID"] =
"support";
236 $fid = intval(CFile::SaveFile($arFile, $upload_dir, $max_file_size));
239 if ($arFile[
"del"]==
"Y")
244 b_ticket_message_2_file
246 FILE_ID=".intval($arFile[
"old_file"]).
"
255 if (intval($arFile[
"old_file"])<=0)
258 $md5 = md5(uniqid(mt_rand(),
true).time());
259 $arFields_fi =
array(
260 "HASH" =>
"'".
$DB->ForSql(
$md5, 255).
"'",
261 "MESSAGE_ID" => $MESSAGE_ID,
263 "TICKET_ID" => $ticketID,
264 "EXTENSION_SUFFIX" => ($fes <>
'') ?
"'".$DB->ForSql($fes, 255).
"'" :
"null"
266 $DB->Insert(
"b_ticket_message_2_file",$arFields_fi);
271 $arFields_fu =
array(
273 "EXTENSION_SUFFIX" => ($fes <>
'') ?
"'".
$DB->ForSql($fes, 255).
"'" :
"null"
275 $DB->Update(
"b_ticket_message_2_file", $arFields_fu,
"WHERE FILE_ID = ".intval($arFile[
"old_file"]));
309 $bSupportClient =
"N";
310 if ($checkRights==
"Y")
321 $bSupportClient =
"Y";
325 if (
$bAdmin!=
"Y" && $bSupportTeam!=
"Y" && $bSupportClient!=
"Y")
330 $ticketID = intval($ticketID);
336 $strSql =
"SELECT RESPONSIBLE_USER_ID, LAST_MESSAGE_USER_ID, REOPEN, SITE_ID, TITLE FROM b_ticket WHERE ID='$ticketID'";
337 $rsTicket =
$DB->Query($strSql);
338 $arTicket = $rsTicket->Fetch();
339 $currentResponsibleUserID = $arTicket[
"RESPONSIBLE_USER_ID"];
340 $siteID = $arTicket[
"SITE_ID"];
341 $tTitle = $arTicket[
"TITLE"];
343 $strSql =
"SELECT max(C_NUMBER) MAX_NUMBER FROM b_ticket_message WHERE TICKET_ID='$ticketID'";
344 $z =
$DB->Query($strSql);
346 $maxNumber = intval(
$zr[
'MAX_NUMBER']);
348 if ((trim(
$arFields[
"MESSAGE_AUTHOR_SID"]) <>
'' || intval(
$arFields[
"MESSAGE_AUTHOR_USER_ID"])>0 || intval(
$arFields[
"MESSAGE_CREATED_USER_ID"])>0) && ($bSupportTeam==
"Y" ||
$bAdmin==
"Y"))
350 $ownerUserID = intval(
$arFields[
"MESSAGE_AUTHOR_USER_ID"]);
351 $ownerSid =
"'".$DB->ForSql(
$arFields[
"MESSAGE_AUTHOR_SID"],2000).
"'";
352 $ownerGuestID = intval(
$arFields[
"MESSAGE_AUTHOR_GUEST_ID"])>0 ? intval(
$arFields[
"MESSAGE_AUTHOR_GUEST_ID"]) :
"null";
354 $createdUserID = intval(
$arFields[
"MESSAGE_CREATED_USER_ID"])>0 ? intval(
$arFields[
"MESSAGE_CREATED_USER_ID"]) : intval(
$uid);
355 $createdGuestID = intval(
$arFields[
"MESSAGE_CREATED_GUEST_ID"])>0 ? intval(
$arFields[
"MESSAGE_CREATED_GUEST_ID"]) : intval($_SESSION[
"SESS_GUEST_ID"]);
359 $ownerUserID = intval(
$uid);
361 $ownerGuestID = intval($_SESSION[
"SESS_GUEST_ID"]);
363 $createdUserID = intval(
$uid);
364 $createdGuestID = intval($_SESSION[
"SESS_GUEST_ID"]);
367 if (intval($ownerGuestID)<=0)
369 $ownerGuestID =
"null";
372 $MessageBySupportTeam =
"null";
375 $ownerUserID =
"null";
379 $MessageBySupportTeam =
"'N'";
382 $MessageBySupportTeam =
"'Y'";
386 if ($createdUserID<=0)
388 $createdUserID =
"null";
390 if (intval($createdGuestID)<=0)
392 $createdGuestID =
"null";
395 $createdModuleName = (
$arFields[
"MESSAGE_CREATED_MODULE_NAME"] <>
'') ?
"'".
$DB->ForSql(
$arFields[
"MESSAGE_CREATED_MODULE_NAME"],255).
"'" :
"'support'";
397 $externalID = intval(
$arFields[
"EXTERNAL_ID"])>0 ? intval(
$arFields[
"EXTERNAL_ID"]) :
"null";
398 $externalField1 =
$arFields[
"EXTERNAL_FIELD_1"];
402 $hidden = (
$arFields[
"HIDDEN"]==
"Y") ?
"Y" :
"N";
406 $hidden = (
$arFields[
"IS_HIDDEN"]==
"Y") ?
"Y" :
"N";
408 $hidden = ($hidden==
"Y") ?
"Y" :
"N";
416 $changeLastMessageDate =
true;
417 if ($arTicket[
"LAST_MESSAGE_USER_ID"] ==
$uid && $arTicket[
"REOPEN"] !=
"Y")
419 $changeLastMessageDate =
false;
422 $TASK_TIME = intval(
$arFields[
"TASK_TIME"])>0 ? intval(
$arFields[
"TASK_TIME"]) :
"null";
426 $log = (
$arFields[
"LOG"]==
"Y") ?
"Y" :
"N";
430 $log = (
$arFields[
"IS_LOG"]==
"Y") ?
"Y" :
"N";
432 $log = ($log==
"Y") ?
"Y" :
"N";
436 $overdue = (
$arFields[
"OVERDUE"]==
"Y") ?
"Y" :
"N";
440 $overdue = (
$arFields[
"IS_OVERDUE"]==
"Y") ?
"Y" :
"N";
442 $overdue = ($overdue==
"Y") ?
"Y" :
"N";
445 "TIMESTAMP_X" =>
$DB->GetNowFunction(),
446 "DAY_CREATE" =>
$DB->CurrentDateFunction(),
447 "C_NUMBER" => $maxNumber + 1,
448 "TICKET_ID" => $ticketID,
449 "IS_HIDDEN" =>
"'".$hidden.
"'",
450 "IS_LOG" =>
"'".$log.
"'",
451 "IS_OVERDUE" =>
"'".$overdue.
"'",
452 "MESSAGE" =>
"'".$DB->ForSql(
$arFields[
"MESSAGE"]).
"'",
453 "MESSAGE_SEARCH" =>
"'".$DB->ForSql(mb_strtoupper(
$arFields[
"MESSAGE"])).
"'",
454 "EXTERNAL_ID" => $externalID,
455 "EXTERNAL_FIELD_1" => ($externalField1 <>
'' ?
"'".
$DB->ForSql($externalField1).
"'" :
"null"),
456 "OWNER_USER_ID" => $ownerUserID,
457 "OWNER_GUEST_ID" => $ownerGuestID,
458 "OWNER_SID" => $ownerSid,
459 "SOURCE_ID" => intval(
$arFields[
"MESSAGE_SOURCE_ID"]),
460 "CREATED_USER_ID" => $createdUserID,
461 "CREATED_GUEST_ID" => $createdGuestID,
462 "CREATED_MODULE_NAME" => $createdModuleName,
463 "MODIFIED_USER_ID" => $createdUserID,
464 "MODIFIED_GUEST_ID" => $createdGuestID,
465 "MESSAGE_BY_SUPPORT_TEAM" => $MessageBySupportTeam,
466 "TASK_TIME" => $TASK_TIME,
467 "NOT_CHANGE_STATUS" =>
"'".$notChangeStatus.
"'"
470 CTimeZone::Disable();
471 $arFieldsI[
"DATE_CREATE"] =
$DB->CharToDateFunction(
GetTime( time() ,
"FULL" ) );
486 if (intval($currentResponsibleUserID)>0) $arFieldsI[
"CURRENT_RESPONSIBLE_USER_ID"] = $currentResponsibleUserID;
490 $mid =
$DB->Insert(
"b_ticket_message",$arFieldsI);
493 $not_image_extension_suffix = COption::GetOptionString(
"support",
"NOT_IMAGE_EXTENSION_SUFFIX");
494 $not_image_upload_dir = COption::GetOptionString(
"support",
"NOT_IMAGE_UPLOAD_DIR");
495 $max_size = COption::GetOptionString(
"support",
"SUPPORT_MAX_FILESIZE");
498 if (is_array($arFILES) &&
count($arFILES)>0)
500 foreach ($arFILES as $arFILE)
502 if ($arFILE[
"name"] <>
'')
504 if ($bSupportTeam!=
"Y" &&
$bAdmin!=
"Y")
506 $max_file_size = intval($max_size) * 1024;
509 $upload_dir =
"support";
510 if (!CFile::IsImage($arFILE[
"name"], $arFILE[
"type"]))
512 $fes = $not_image_extension_suffix;
513 $arFILE[
"name"] .= $fes;
514 $upload_dir = $not_image_upload_dir;
517 if (!array_key_exists(
"MODULE_ID", $arFILE) || $arFILE[
"MODULE_ID"] ==
'')
519 $arFILE[
"MODULE_ID"] =
"support";
522 $fid = intval(CFile::SaveFile($arFILE, $upload_dir, $max_file_size));
525 $md5 = md5(uniqid(mt_rand(),
true).time());
526 $arFILE[
"HASH"] =
$md5;
527 $arFILE[
"FILE_ID"] = $fid;
528 $arFILE[
"MESSAGE_ID"] =
$mid;
529 $arFILE[
"TICKET_ID"] = $ticketID;
530 $arFILE[
"EXTENSION_SUFFIX"] = $fes;
531 $arFields_fi =
array(
532 "HASH" =>
"'".
$DB->ForSql(
$md5, 255).
"'",
533 "MESSAGE_ID" =>
$mid,
535 "TICKET_ID" => $ticketID,
536 "EXTENSION_SUFFIX" => ($fes <>
'') ?
"'".$DB->ForSql($fes, 255).
"'" :
"null"
538 $link_id =
$DB->Insert(
"b_ticket_message_2_file",$arFields_fi);
539 if (intval($link_id)>0)
541 $arFILE[
"LINK_ID"] = $link_id;
542 $arrFILES[] = $arFILE;
568 if ($notChangeStatus ==
"Y" || $hidden ==
"Y")
579 $ticketID = intval($ticketID);
580 if ($ticketID<=0)
return false;
588 if ($bSupportTeam==
"Y" ||
$bAdmin==
"Y" || $bDemo==
"Y")
591 if(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',
592 if(ifnull(T.LAST_MESSAGE_USER_ID,0)='$uid', 'green',
593 if(ifnull(T.OWNER_USER_ID,0)='$uid', 'red',
594 if(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y','green_s',
595 if(ifnull(T.RESPONSIBLE_USER_ID,0)='$uid', 'red',
602 if(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',
603 if(ifnull(T.LAST_MESSAGE_USER_ID,0)='$uid', 'green', 'red'))
615 $rs =
$DB->Query($strSql);
616 if (
$ar =
$rs->Fetch())
return $ar[
"LAMP"];
621 public static function GetList($by =
's_default',
$order =
'desc',
$arFilter = [], $isFiltered =
null, $checkRights =
"Y", $getUserName =
"Y", $getExtraNames =
"Y",
$siteID =
false,
$arParams = [])
630 $bSupportClient =
'N';
641 $arSqlHaving =
array();
643 if ($checkRights==
'Y')
655 $bSupportClient =
'Y';
659 if (
$bAdmin!=
'Y' && $bSupportTeam!=
'Y' && $bSupportClient!=
'Y' && $bDemo!=
'Y')
return false;
661 if ($bSupportTeam==
'Y' ||
$bAdmin==
'Y' || $bDemo==
'Y')
664 if(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',
665 if(ifnull(T.LAST_MESSAGE_USER_ID,0)='$uid', 'green',
666 if(ifnull(T.OWNER_USER_ID,0)='$uid', 'red',
667 if(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y','green_s',
668 if(ifnull(T.RESPONSIBLE_USER_ID,0)='$uid', 'red',
675 if(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',
676 if(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y', 'red', 'green'))
679 $bJoinSupportTeamTbl = $bJoinClientTbl =
false;
681 $arSqlSearch = Array();
687 $filterKeysCount =
count($filterKeys);
688 for (
$i=0;
$i<$filterKeysCount;
$i++)
694 $matchValueSet = (in_array(
$key.
"_EXACT_MATCH", $filterKeys)) ?
true :
false;
699 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
703 $arSqlSearch[] = (
$val==
"Y") ?
"T.HOLD_ON='Y'" :
"T.HOLD_ON = 'N'";
710 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
719 foreach (
$val as $value)
721 $str .=
", '".$DB->ForSQL($value).
"'";
724 $arSqlSearch[] =
" ".$lamp.
" in (".
$str.
")";
729 $arSqlSearch[] =
" ".$lamp.
" = '".
$DB->ForSQL(
$val).
"'";
732 case "DATE_CREATE_1":
734 $arSqlSearch[] =
"T.DATE_CREATE>=".
$DB->CharToDateFunction(
$val,
"SHORT");
736 case "DATE_CREATE_2":
738 $arSqlSearch[] =
"T.DATE_CREATE<".
$DB->CharToDateFunction(
$val,
"SHORT").
" + INTERVAL 1 DAY";
740 case "DATE_TIMESTAMP_1":
742 $arSqlSearch[] =
"T.TIMESTAMP_X>=".
$DB->CharToDateFunction(
$val,
"SHORT");
744 case "DATE_TIMESTAMP_2":
746 $arSqlSearch[] =
"T.TIMESTAMP_X<".
$DB->CharToDateFunction(
$val,
"SHORT").
" + INTERVAL 1 DAY";
750 $arSqlSearch[] =
"T.DATE_CLOSE>=".
$DB->CharToDateFunction(
$val,
"SHORT");
754 $arSqlSearch[] =
"T.DATE_CLOSE<".
$DB->CharToDateFunction(
$val,
"SHORT").
" + INTERVAL 1 DAY";
757 $arSqlSearch[] = (
$val==
"Y") ?
"T.DATE_CLOSE is not null" :
"T.DATE_CLOSE is null";
759 case "AUTO_CLOSE_DAYS1":
760 $arSqlSearch[] =
"T.AUTO_CLOSE_DAYS>='".intval(
$val).
"'";
762 case "AUTO_CLOSE_DAYS2":
763 $arSqlSearch[] =
"T.AUTO_CLOSE_DAYS<='".intval(
$val).
"'";
765 case "TICKET_TIME_1":
766 $arSqlSearch[] =
"UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)>='".(intval(
$val)*86400).
"'";
768 case "TICKET_TIME_2":
769 $arSqlSearch[] =
"UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)<='".(intval(
$val)*86400).
"'";
772 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
776 $arSqlSearch[] =
"T.MESSAGES>='".intval(
$val).
"'";
779 $arSqlSearch[] =
"T.MESSAGES<='".intval(
$val).
"'";
782 case "PROBLEM_TIME1":
783 $arSqlSearch[] =
"T.PROBLEM_TIME>='".intval(
$val).
"'";
785 case "PROBLEM_TIME2":
786 $arSqlSearch[] =
"T.PROBLEM_TIME<='".intval(
$val).
"'";
789 case "OVERDUE_MESSAGES1":
790 $arSqlSearch[] =
"T.OVERDUE_MESSAGES>='".intval(
$val).
"'";
792 case "OVERDUE_MESSAGES2":
793 $arSqlSearch[] =
"T.OVERDUE_MESSAGES<='".intval(
$val).
"'";
795 case "AUTO_CLOSE_DAYS_LEFT1":
796 $arSqlSearch[] =
"CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN
797 TO_DAYS(ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)) - TO_DAYS(now()) ELSE -1 END >='".intval(
$val).
"'";
799 case "AUTO_CLOSE_DAYS_LEFT2":
800 $arSqlSearch[] =
"CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN
801 TO_DAYS(ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY))-TO_DAYS(now()) ELSE 999 END <='".intval(
$val).
"'";
805 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
806 $arSqlSearch[] =
GetFilterQuery(
"UO.ID, UO.LOGIN, UO.LAST_NAME, UO.NAME, T.OWNER_SID",
$val, $match,
array(
"@",
"."));
808 case "OWNER_USER_ID":
810 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
815 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
820 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
821 $arSqlSearch[] =
GetFilterQuery(
"T.CREATED_USER_ID, UC.LOGIN, UC.LAST_NAME, UC.NAME, T.CREATED_MODULE_NAME",
$val, $match);
825 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
826 $arSqlSearch[] =
GetFilterQuery(
"T.RESPONSIBLE_USER_ID, UR.LOGIN, UR.LAST_NAME, UR.NAME",
$val, $match);
828 case "RESPONSIBLE_ID":
829 if (intval(
$val)>0) $arSqlSearch[] =
"T.RESPONSIBLE_USER_ID = '".intval(
$val).
"'";
830 elseif (
$val==0) $arSqlSearch[] =
"(T.RESPONSIBLE_USER_ID is null or T.RESPONSIBLE_USER_ID=0)";
834 if (intval(
$val)>0) $arSqlSearch[] =
"T.CATEGORY_ID = '".intval(
$val).
"'";
835 elseif (
$val==0) $arSqlSearch[] =
"(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
838 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
841 LEFT JOIN b_ticket_dictionary DC ON (DC.ID = T.CATEGORY_ID and DC.C_TYPE = 'C')";
843 case
"CRITICALITY_ID":
845 if (intval(
$val)>0) $arSqlSearch[] =
"T.CRITICALITY_ID = '".intval(
$val).
"'";
846 elseif (
$val==0) $arSqlSearch[] =
"(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
848 case
"CRITICALITY_SID":
849 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
854 if (intval(
$val)>0) $arSqlSearch[] =
"T.STATUS_ID = '".intval(
$val).
"'";
855 elseif (
$val==0) $arSqlSearch[] =
"(T.STATUS_ID is null or T.STATUS_ID=0)";
858 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
863 if (intval(
$val)>0) $arSqlSearch[] =
"T.MARK_ID = '".intval(
$val).
"'";
864 elseif (
$val==0) $arSqlSearch[] =
"(T.MARK_ID is null or T.MARK_ID=0)";
867 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
872 if (intval(
$val)>0) $arSqlSearch[] =
"T.SOURCE_ID = '".intval(
$val).
"'";
873 elseif (
$val==0) $arSqlSearch[] =
"(T.SOURCE_ID is null or T.SOURCE_ID=0)";
876 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
880 case
"DIFFICULTY_ID":
882 if (intval(
$val)>0) $arSqlSearch[] =
"T.DIFFICULTY_ID = '".intval(
$val).
"'";
883 elseif (
$val==0) $arSqlSearch[] =
"(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
885 case
"DIFFICULTY_SID":
886 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
894 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
895 $arSqlSearch[] =
GetFilterQuery(
"T.MODIFIED_USER_ID, T.MODIFIED_MODULE_NAME, UM.LOGIN, UM.LAST_NAME, UM.NAME",
$val, $match);
901 if(CSupportSearch::CheckModule() && CSupportSearch::isIndexExists())
905 $searchOn = $searchSqlParams[
'WHERE'];
906 $searchHaving = $searchSqlParams[
'HAVING'];
910 $searchJoin =
'INNER JOIN b_ticket_search TS ON TS.TICKET_ID = T.ID AND '.$searchOn;
912 if (!empty($searchHaving))
915 $arSqlHaving[] = $searchHaving;
923 if ($bSupportTeam==
"Y" ||
$bAdmin==
"Y" || $bDemo==
"Y")
925 $messJoin =
"INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID)";
929 $messJoin =
"INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID and M.IS_HIDDEN='N' and M.IS_LOG='N')";
932 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
933 $f =
new CFilterQuery(
"OR",
"yes", $match,
array(),
"N",
"Y",
"N");
934 $query =
$f->GetQueryString(
"T.TITLE,M.MESSAGE_SEARCH",
$val );
941 else $arSqlSearch[] =
$query;
944 case "LAST_MESSAGE_USER_ID":
945 case "LAST_MESSAGE_SID":
946 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
949 case "LAST_MESSAGE_BY_SUPPORT_TEAM":
950 $arSqlSearch[] =
"T.LAST_MESSAGE_BY_SUPPORT_TEAM= '".($val ==
'Y' ?
'Y' :
'N').
"'";
952 case "SUPPORT_COMMENTS":
953 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
957 $arSqlSearch[] = (
$val==
"Y") ?
"T.IS_SPAM ='Y'" :
"(T.IS_SPAM = 'N' or T.IS_SPAM is null)";
960 $arSqlSearch[] = (
$val==
"Y") ?
"T.IS_OVERDUE ='Y'" :
"(T.IS_OVERDUE = 'N' or T.IS_OVERDUE is null)";
962 case "IS_SPAM_MAYBE":
963 $arSqlSearch[] = (
$val==
"Y") ?
"T.IS_SPAM='N'" :
"(T.IS_SPAM='Y' or T.IS_SPAM is null)";
966 case 'SUPPORTTEAM_GROUP_ID':
967 case 'CLIENT_GROUP_ID':
968 if (
$key ==
'SUPPORTTEAM_GROUP_ID')
971 $bJoinSupportTeamTbl =
true;
976 $bJoinClientTbl =
true;
985 $arSqlSearch[] =
'('.$table.
'.GROUP_ID IS NOT NULL AND '.
$table.
'.GROUP_ID IN ('.implode(
',',
$val).
'))';
993 $arSqlSearch[] =
'('.$table.
'.GROUP_ID IS NOT NULL AND '.
$table.
'.GROUP_ID=\''.
$val.
'\')
';
998 $match = ($matchValueSet && $arFilter[$key."_EXACT_MATCH"]!="Y") ? "Y" : "N";
999 $arSqlSearch[] = GetFilterQuery("T.".$key, $val, $match);
1005 $obUserFieldsSql = new CUserTypeSQL;
1006 $obUserFieldsSql->SetEntity("SUPPORT", "T.ID");
1007 $obUserFieldsSql->SetSelect( $arParams["SELECT"] );
1008 $obUserFieldsSql->SetFilter( $arFilter );
1009 $obUserFieldsSql->SetOrder( array( $by => $order) );
1013 $strSqlOrder = "ORDER BY T.ID";
1015 elseif ($by == "s_last_message_date")
1017 $strSqlOrder = "ORDER BY T.LAST_MESSAGE_DATE";
1019 elseif ($by == "s_site_id" || $by == "s_lid")
1021 $strSqlOrder = "ORDER BY T.SITE_ID";
1023 elseif ($by == "s_lamp")
1025 $strSqlOrder = "ORDER BY LAMP";
1027 elseif ($by == "s_is_overdue")
1029 $strSqlOrder = "ORDER BY T.IS_OVERDUE";
1031 elseif ($by == "s_is_notified")
1033 $strSqlOrder = "ORDER BY T.IS_NOTIFIED";
1035 elseif ($by == "s_date_create")
1037 $strSqlOrder = "ORDER BY T.DATE_CREATE";
1039 elseif ($by == "s_timestamp" || $by == "s_timestamp_x")
1041 $strSqlOrder = "ORDER BY T.TIMESTAMP_X";
1043 elseif ($by == "s_date_close")
1045 $strSqlOrder = "ORDER BY T.DATE_CLOSE";
1047 elseif ($by == "s_owner")
1049 $strSqlOrder = "ORDER BY T.OWNER_USER_ID";
1051 elseif ($by == "s_modified_by")
1053 $strSqlOrder = "ORDER BY T.MODIFIED_USER_ID";
1055 elseif ($by == "s_title")
1057 $strSqlOrder = "ORDER BY T.TITLE ";
1059 elseif ($by == "s_responsible")
1061 $strSqlOrder = "ORDER BY T.RESPONSIBLE_USER_ID";
1063 elseif ($by == "s_messages")
1065 $strSqlOrder = "ORDER BY T.MESSAGES";
1067 elseif ($by == "s_category")
1069 $strSqlOrder = "ORDER BY T.CATEGORY_ID";
1071 elseif ($by == "s_criticality")
1073 $strSqlOrder = "ORDER BY T.CRITICALITY_ID";
1075 elseif ($by == "s_sla")
1077 $strSqlOrder = "ORDER BY T.SLA_ID";
1079 elseif ($by == "s_status")
1081 $strSqlOrder = "ORDER BY T.STATUS_ID";
1083 elseif ($by == "s_difficulty")
1085 $strSqlOrder = "ORDER BY T.DIFFICULTY_ID";
1087 elseif ($by == "s_problem_time")
1089 $strSqlOrder = "ORDER BY T.PROBLEM_TIME";
1091 elseif ($by == "s_mark")
1093 $strSqlOrder = "ORDER BY T.MARK_ID";
1095 elseif ($by == "s_online")
1097 $strSqlOrder = "ORDER BY USERS_ONLINE";
1099 elseif ($by == "s_support_comments")
1101 $strSqlOrder = "ORDER BY T.SUPPORT_COMMENTS";
1103 elseif ($by == "s_auto_close_days_left")
1105 $strSqlOrder = "ORDER BY AUTO_CLOSE_DAYS_LEFT";
1107 elseif ($by == 's_coupon
')
1109 $strSqlOrder = 'ORDER BY T.COUPON
';
1111 elseif ($by == 's_deadline
')
1113 $strSqlOrder = 'ORDER BY T.SUPPORT_DEADLINE
';
1115 elseif( $s = $obUserFieldsSql->GetOrder($by) )
1117 $strSqlOrder = "ORDER BY ".strtoupper($s);
1121 $strSqlOrder = "ORDER BY IS_SUPER_TICKET DESC, T.IS_OVERDUE DESC, T.IS_NOTIFIED DESC, T.LAST_MESSAGE_DATE";
1126 $strSqlOrder .= " desc ";
1129 $arSqlSearch[] = $obUserFieldsSql->GetFilter();
1131 if ($getUserName=="Y")
1135 UO.LOGIN OWNER_LOGIN,
1136 UO.EMAIL OWNER_EMAIL,
1137 concat(ifnull(UO.NAME,''),' ',ifnull(UO.LAST_NAME,'')) OWNER_NAME,
1138 UR.LOGIN RESPONSIBLE_LOGIN,
1139 UR.EMAIL RESPONSIBLE_EMAIL,
1140 concat(ifnull(UR.NAME,''),' ',ifnull(UR.LAST_NAME,'')) RESPONSIBLE_NAME,
1141 UM.LOGIN MODIFIED_BY_LOGIN,
1142 UM.EMAIL MODIFIED_BY_EMAIL,
1143 concat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MODIFIED_BY_NAME,
1144 UM.LOGIN MODIFIED_LOGIN,
1145 UM.EMAIL MODIFIED_EMAIL,
1146 concat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MODIFIED_NAME,
1147 UL.LOGIN LAST_MESSAGE_LOGIN,
1148 UL.EMAIL LAST_MESSAGE_EMAIL,
1149 concat(ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,'')) LAST_MESSAGE_NAME,
1150 UC.LOGIN CREATED_LOGIN,
1151 UC.EMAIL CREATED_EMAIL,
1152 concat(ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,'')) CREATED_NAME
1155 LEFT JOIN b_user UO ON (UO.ID = T.OWNER_USER_ID)
1156 LEFT JOIN b_user UR ON (UR.ID = T.RESPONSIBLE_USER_ID)
1157 LEFT JOIN b_user UM ON (UM.ID = T.MODIFIED_USER_ID)
1158 LEFT JOIN b_user UL ON (UL.ID = T.LAST_MESSAGE_USER_ID)
1159 LEFT JOIN b_user UC ON (UC.ID = T.CREATED_USER_ID)
1162 if ($getExtraNames=="Y")
1166 DC.NAME CATEGORY_NAME,
1167 DC.DESCR CATEGORY_DESC,
1168 DC.SID CATEGORY_SID,
1169 DK.NAME CRITICALITY_NAME,
1170 DK.DESCR CRITICALITY_DESC,
1171 DK.SID CRITICALITY_SID,
1172 DS.NAME STATUS_NAME,
1173 DS.DESCR STATUS_DESC,
1178 DSR.NAME SOURCE_NAME,
1179 DSR.DESCR SOURCE_DESC,
1181 DD.NAME DIFFICULTY_NAME,
1182 DD.DESCR DIFFICULTY_DESC,
1183 DD.SID DIFFICULTY_SID,
1187 LEFT JOIN b_ticket_dictionary DC ON (DC.ID = T.CATEGORY_ID and DC.C_TYPE = 'C
')
1188 LEFT JOIN b_ticket_dictionary DK ON (DK.ID = T.CRITICALITY_ID and DK.C_TYPE = 'K
')
1189 LEFT JOIN b_ticket_dictionary DS ON (DS.ID = T.STATUS_ID and DS.C_TYPE = 'S
')
1190 LEFT JOIN b_ticket_dictionary DM ON (DM.ID = T.MARK_ID and DM.C_TYPE = 'M
')
1191 LEFT JOIN b_ticket_dictionary DSR ON (DSR.ID = T.SOURCE_ID and DSR.C_TYPE = 'SR
')
1192 LEFT JOIN b_ticket_dictionary DD ON (DD.ID = T.DIFFICULTY_ID and DD.C_TYPE = 'D
')
1193 LEFT JOIN b_ticket_sla SLA ON (SLA.ID = T.SLA_ID)
1199 ".$DB->DateToCharFunction("T.DATE_CREATE","FULL",$siteID,true)." DATE_CREATE,
1200 ".$DB->DateToCharFunction("T.TIMESTAMP_X","FULL",$siteID,true)." TIMESTAMP_X,
1201 ".$DB->DateToCharFunction("T.LAST_MESSAGE_DATE","FULL",$siteID,true)." LAST_MESSAGE_DATE,
1202 ".$DB->DateToCharFunction("T.DATE_CLOSE","FULL",$siteID,true)." DATE_CLOSE,
1203 ".$DB->DateToCharFunction("T.DATE_CREATE","SHORT",$siteID,true)." DATE_CREATE_SHORT,
1204 ".$DB->DateToCharFunction("T.TIMESTAMP_X","SHORT",$siteID,true)." TIMESTAMP_X_SHORT,
1205 ".$DB->DateToCharFunction("T.DATE_CLOSE","SHORT",$siteID,true)." DATE_CLOSE_SHORT,
1206 ".$DB->DateToCharFunction("T.SUPPORT_DEADLINE","FULL",$siteID,true)." SUPPORT_DEADLINE,
1207 CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y
' THEN "
1208 .$DB->DateToCharFunction("ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)","FULL",$siteID,true)
1209 ." ELSE NULL END AUTO_CLOSE_DATE
1215 ".$DB->DateToCharFunction("T.DATE_CREATE","FULL")." DATE_CREATE,
1216 ".$DB->DateToCharFunction("T.TIMESTAMP_X","FULL")." TIMESTAMP_X,
1217 ".$DB->DateToCharFunction("T.LAST_MESSAGE_DATE","FULL")." LAST_MESSAGE_DATE,
1218 ".$DB->DateToCharFunction("T.DATE_CLOSE","FULL")." DATE_CLOSE,
1219 ".$DB->DateToCharFunction("T.DATE_CREATE","SHORT")." DATE_CREATE_SHORT,
1220 ".$DB->DateToCharFunction("T.TIMESTAMP_X","SHORT")." TIMESTAMP_X_SHORT,
1221 ".$DB->DateToCharFunction("T.DATE_CLOSE","SHORT")." DATE_CLOSE_SHORT,
1222 ".$DB->DateToCharFunction("T.SUPPORT_DEADLINE","FULL")." SUPPORT_DEADLINE,
1223 CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y
' THEN "
1224 .$DB->DateToCharFunction("ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)","FULL")
1225 ." ELSE NULL END AUTO_CLOSE_DATE
1231 if ($bJoinSupportTeamTbl)
1234 LEFT JOIN b_ticket_user_ugroup UGS ON (UGS.USER_ID = T.RESPONSIBLE_USER_ID) ";
1238 if ($bJoinClientTbl)
1241 LEFT JOIN b_ticket_user_ugroup UGC ON (UGC.USER_ID = T.OWNER_USER_ID) ";
1245 // add permissions check
1246 if (!($bAdmin == 'Y
' || $bDemo == 'Y
'))
1248 // a list of users who own or are responsible for tickets, which we can show to our current user
1249 $ticketUsers = array($uid);
1251 // check if user has groups
1252 $result = $DB->Query('SELECT GROUP_ID FROM b_ticket_user_ugroup WHERE USER_ID =
'.$uid.' AND CAN_VIEW_GROUP_MESSAGES = \
'Y\'');
1258 while ($row =
$result->Fetch())
1260 $uGroups[] = $row[
'GROUP_ID'];
1263 if (!empty($uGroups))
1265 $result =
$DB->Query(
'SELECT USER_ID FROM b_ticket_user_ugroup WHERE GROUP_ID IN ('.join(
',', $uGroups).
')');
1268 while ($row =
$result->Fetch())
1270 $ticketUsers[] = $row[
'USER_ID'];
1277 $strSqlSearchUser =
"";
1279 if($bSupportTeam ==
'Y')
1281 $strSqlSearchUser =
'T.RESPONSIBLE_USER_ID IN ('.join(
',', $ticketUsers).
')';
1283 elseif ($bSupportClient ==
'Y')
1285 $strSqlSearchUser =
'T.OWNER_USER_ID IN ('.join(
',', $ticketUsers).
')';
1288 $arSqlSearch[] = $strSqlSearchUser;
1292 $onlineInterval = intval(COption::GetOptionString(
"support",
"ONLINE_INTERVAL"));
1300 UNIX_TIMESTAMP(T.DATE_CLOSE)-UNIX_TIMESTAMP(T.DATE_CREATE) TICKET_TIME,
1301 CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN
1304 T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY
1307 ELSE -1 END AUTO_CLOSE_DAYS_LEFT,
1308 (SELECT COUNT(DISTINCT USER_ID) FROM b_ticket_online WHERE TICKET_ID = T.ID AND TIMESTAMP_X >= DATE_ADD(now(), INTERVAL - ".$onlineInterval.
" SECOND)) USERS_ONLINE,
1309 if(T.COUPON IS NOT NULL, 1, 0) IS_SUPER_TICKET,
1313 " . $obUserFieldsSql->GetSelect();
1323 " . $obUserFieldsSql->GetJoin(
"T.ID");
1330 $strSqlGroup = $need_group ?
' GROUP BY T.ID ' :
'';
1331 $strSqlHaving = $arSqlHaving ?
' HAVING ' . join(
' AND ', $arSqlHaving) .
' ' :
'';
1333 $strSql = $strSqlSelect . $strSqlFrom . $strSqlWhere . $strSqlGroup . $strSqlHaving . $strSqlOrder;
1337 $nTopCount = isset(
$arParams[
'NAV_PARAMS'][
'nTopCount']) ? intval(
$arParams[
'NAV_PARAMS'][
'nTopCount']) : 0;
1341 $strSql =
$DB->TopSql($strSql, $nTopCount);
1347 $cntSql =
"SELECT COUNT(T.ID) as C " . $strSqlFrom . $strSqlWhere . $strSqlGroup . $strSqlHaving;
1349 if (!empty($strSqlGroup))
1351 $cntSql =
'SELECT COUNT(1) AS C FROM ('.$cntSql.
') tt';
1354 $res_cnt =
$DB->Query($cntSql);
1355 $res_cnt = $res_cnt->Fetch();
1356 $res =
new CDBResult();
1358 $res->NavQuery($strSql, $res_cnt[
"C"],
$arParams[
"NAV_PARAMS"]);
1375 if (
count($arrGid)>0)
1377 $gid = implode(
",",$arrGid);
1383 if (
count($arrAid)>0)
1385 $aid = implode(
",",$arrAid);
1393 U.ID as REFERENCE_ID,
1394 concat('[',U.ID,'] ',' (',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) as REFERENCE,
1401 and G.GROUP_ID in ($gid, $aid)
1439 if ($checkRights==
"Y")
1449 $bSupportTeam =
"Y";
1450 $bSupportClient =
"Y";
1453 if (
$bAdmin!=
"Y" && $bSupportTeam!=
"Y" && $bSupportClient!=
"Y" && $bDemo!=
"Y")
return false;
1455 $arSqlSearch = Array();
1459 $filterKeysCount =
count($filterKeys);
1460 for (
$i=0;
$i<$filterKeysCount;
$i++)
1466 $matchValueSet = (in_array(
$key.
"_EXACT_MATCH", $filterKeys)) ?
true :
false;
1471 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
1475 $arSqlSearch[] =
"M.TICKET_ID = ".intval(
$val);
1478 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
1482 $arSqlSearch[] = (
$val==
"Y") ?
"(M.IS_HIDDEN = 'N' and M.IS_LOG='N' and M.IS_OVERDUE='N')" :
"(M.IS_HIDDEN = 'Y' or M.IS_LOG='Y' or M.IS_OVERDUE='Y')";
1487 case "NOT_CHANGE_STATUS":
1488 case "MESSAGE_BY_SUPPORT_TEAM":
1489 $arSqlSearch[] = (
$val==
"Y") ?
"M.".
$key.
"='Y'" :
"M.".$key.
"='N'";
1491 case "EXTERNAL_FIELD_1":
1492 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
1498 if ($getUserName==
"Y")
1502 UO.EMAIL OWNER_EMAIL,
1503 UO.LOGIN OWNER_LOGIN,
1504 concat(ifnull(UO.NAME,''),' ',ifnull(UO.LAST_NAME,'')) OWNER_NAME,
1506 concat(ifnull(UO.NAME,''),' ',ifnull(UO.LAST_NAME,'')) NAME,
1507 UC.EMAIL CREATED_EMAIL,
1508 UC.LOGIN CREATED_LOGIN,
1509 concat(ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,'')) CREATED_NAME,
1510 UM.EMAIL MODIFIED_EMAIL,
1511 UM.LOGIN MODIFIED_LOGIN,
1512 concat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MODIFIED_NAME
1515 LEFT JOIN b_user UO ON (UO.ID = M.OWNER_USER_ID)
1516 LEFT JOIN b_user UC ON (UC.ID = M.CREATED_USER_ID)
1517 LEFT JOIN b_user UM ON (UM.ID = M.MODIFIED_USER_ID)
1521 if ($bSupportTeam!=
"Y" &&
$bAdmin!=
"Y")
1523 $arSqlSearch[] =
"M.IS_HIDDEN='N'";
1524 $arSqlSearch[] =
"M.IS_LOG='N'";
1528 if ($by ==
"s_id") $strSqlOrder =
"ORDER BY M.ID";
1529 elseif ($by ==
"s_number") $strSqlOrder =
"ORDER BY M.C_NUMBER";
1532 $strSqlOrder =
"ORDER BY M.C_NUMBER";
1537 $strSqlOrder .=
" desc ";
1541 $strSqlOrder .=
" asc ";
1548 ".$DB->DateToCharFunction(
"M.DATE_CREATE").
" DATE_CREATE,
1549 ".
$DB->DateToCharFunction(
"M.TIMESTAMP_X").
" TIMESTAMP_X,
1554 INNER JOIN b_ticket T ON (T.ID = M.TICKET_ID)
1555 LEFT JOIN b_ticket_dictionary DS ON (DS.ID = M.SOURCE_ID)
1569 $arSqlSearch = Array();
1573 $filterKeysCount =
count($filterKeys);
1574 for (
$i=0;
$i<$filterKeysCount;
$i++)
1580 $matchValueSet = (in_array(
$key.
"_EXACT_MATCH", $filterKeys)) ?
true :
false;
1584 case "DATE_CREATE_1":
1586 $arSqlSearch[] =
"T.DATE_CREATE>=".$DB->CharToDateFunction(
$val,
"SHORT");
1588 case "DATE_CREATE_2":
1590 $arSqlSearch[] =
"T.DATE_CREATE<".$DB->CharToDateFunction(
$val,
"SHORT").
" + INTERVAL 1 DAY";
1593 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
1594 $arSqlSearch[] =
GetFilterQuery(
"T.RESPONSIBLE_USER_ID, UR.LOGIN, UR.LAST_NAME, UR.NAME",
$val, $match);
1596 case "RESPONSIBLE_ID":
1597 if (intval(
$val)>0) $arSqlSearch[] =
"T.RESPONSIBLE_USER_ID = '".intval(
$val).
"'";
1598 elseif (
$val==0) $arSqlSearch[] =
"(T.RESPONSIBLE_USER_ID is null or T.RESPONSIBLE_USER_ID=0)";
1602 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
1607 if (intval(
$val)>0) $arSqlSearch[] =
"T.CATEGORY_ID = '".intval(
$val).
"'";
1608 elseif (
$val==0) $arSqlSearch[] =
"(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
1610 case "CRITICALITY_ID":
1612 if (intval(
$val)>0) $arSqlSearch[] =
"T.CRITICALITY_ID = '".intval(
$val).
"'";
1613 elseif (
$val==0) $arSqlSearch[] =
"(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
1617 if (intval(
$val)>0) $arSqlSearch[] =
"T.STATUS_ID = '".intval(
$val).
"'";
1618 elseif (
$val==0) $arSqlSearch[] =
"(T.STATUS_ID is null or T.STATUS_ID=0)";
1622 if (intval(
$val)>0) $arSqlSearch[] =
"T.MARK_ID = '".intval(
$val).
"'";
1623 elseif (
$val==0) $arSqlSearch[] =
"(T.MARK_ID is null or T.MARK_ID=0)";
1627 if (intval(
$val)>0) $arSqlSearch[] =
"T.SOURCE_ID = '".intval(
$val).
"'";
1628 elseif (
$val==0) $arSqlSearch[] =
"(T.SOURCE_ID is null or T.SOURCE_ID=0)";
1630 case "DIFFICULTY_ID":
1632 if (intval(
$val)>0) $arSqlSearch[] =
"T.DIFFICULTY_ID = '".intval(
$val).
"'";
1633 elseif (
$val==0) $arSqlSearch[] =
"(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
1639 if ($by ==
"s_date_create") $strSqlOrder =
"ORDER BY T.DATE_CREATE";
1642 $strSqlOrder =
"ORDER BY T.DATE_CREATE";
1647 $strSqlOrder .=
" desc ";
1652 count(T.ID) ALL_TICKETS,
1653 sum(if(T.DATE_CLOSE is null,1,0)) OPEN_TICKETS,
1654 sum(if(T.DATE_CLOSE is null,0,1)) CLOSE_TICKETS,
1655 DAYOFMONTH(T.DAY_CREATE) CREATE_DAY,
1656 MONTH(T.DAY_CREATE) CREATE_MONTH,
1657 YEAR(T.DAY_CREATE) CREATE_YEAR
1660 LEFT JOIN b_user UR ON (T.RESPONSIBLE_USER_ID = UR.ID)
1663 and T.DAY_CREATE is not null
1665 TO_DAYS(T.DAY_CREATE)
1676 $arSqlSearch = Array();
1680 $filterKeysCount =
count($filterKeys);
1681 for (
$i=0;
$i<$filterKeysCount;
$i++)
1687 $matchValueSet = (in_array(
$key.
"_EXACT_MATCH", $filterKeys)) ?
true :
false;
1694 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
1697 case "DATE_CREATE_1":
1699 $arSqlSearch[] =
"M.DATE_CREATE>=".$DB->CharToDateFunction(
$val,
"SHORT");
1701 case "DATE_CREATE_2":
1703 $arSqlSearch[] =
"M.DATE_CREATE<".$DB->CharToDateFunction(
$val,
"SHORT").
" + INTERVAL 1 DAY";
1706 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"Y" && $matchValueSet) ?
"N" :
"Y";
1707 $arSqlSearch[] =
GetFilterQuery(
"M.OWNER_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME",
$val, $match);
1710 if (intval(
$val)>0) $arSqlSearch[] =
"M.OWNER_USER_ID = '".intval(
$val).
"'";
1711 elseif (
$val==0) $arSqlSearch[] =
"(M.OWNER_USER_ID is null or M.OWNER_USER_ID=0)";
1716 $arSqlSearch[] = (
$val==
"Y") ?
"M.".
$key.
"='Y'" :
"M.".$key.
"='N'";
1720 $match = (
$arFilter[
$key.
"_EXACT_MATCH"]==
"N" && $matchValueSet) ?
"Y" :
"N";
1725 if (intval(
$val)>0) $arSqlSearch[] =
"T.CATEGORY_ID = '".intval(
$val).
"'";
1726 elseif (
$val==0) $arSqlSearch[] =
"(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
1728 case "CRITICALITY_ID":
1730 if (intval(
$val)>0) $arSqlSearch[] =
"T.CRITICALITY_ID = '".intval(
$val).
"'";
1731 elseif (
$val==0) $arSqlSearch[] =
"(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
1735 if (intval(
$val)>0) $arSqlSearch[] =
"T.STATUS_ID = '".intval(
$val).
"'";
1736 elseif (
$val==0) $arSqlSearch[] =
"(T.STATUS_ID is null or T.STATUS_ID=0)";
1740 if (intval(
$val)>0) $arSqlSearch[] =
"T.MARK_ID = '".intval(
$val).
"'";
1741 elseif (
$val==0) $arSqlSearch[] =
"(T.MARK_ID is null or T.MARK_ID=0)";
1745 if (intval(
$val)>0) $arSqlSearch[] =
"T.SOURCE_ID = '".intval(
$val).
"'";
1746 elseif (
$val==0) $arSqlSearch[] =
"(T.SOURCE_ID is null or T.SOURCE_ID=0)";
1748 case "DIFFICULTY_ID":
1750 if (intval(
$val)>0) $arSqlSearch[] =
"T.DIFFICULTY_ID = '".intval(
$val).
"'";
1751 elseif (
$val==0) $arSqlSearch[] =
"(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
1757 if ($by ==
"s_date_create") $strSqlOrder =
"ORDER BY M.DATE_CREATE";
1760 $strSqlOrder =
"ORDER BY M.DATE_CREATE";
1765 $strSqlOrder .=
" desc ";
1770 count(M.ID) COUNTER,
1771 sum(if(M.EXPIRE_AGENT_DONE='Y', 1, 0)) COUNTER_OVERDUE,
1772 DAYOFMONTH(M.DAY_CREATE) CREATE_DAY,
1773 MONTH(M.DAY_CREATE) CREATE_MONTH,
1774 YEAR(M.DAY_CREATE) CREATE_YEAR
1777 INNER JOIN b_ticket T ON (T.ID = M.TICKET_ID)
1778 LEFT JOIN b_user U ON (M.OWNER_USER_ID = U.ID)
1782 TO_DAYS(M.DAY_CREATE)
static GetMessageByID($id, $checkRights="Y", $get_user_name="Y")
static IsSupportTeam($userID=false)
static IsAdmin($userID=false)
static IsSupportClient($userID=false)
static MarkMessageAsSpam($messageID, $exactly="Y", $checkRights="Y")
static IsDemo($userID=false)
static GetSupportTeamGroups()
static UpdateMessages($ticketID)
static UnMarkMessageAsSpam($messageID, $checkRights="Y")
static UpdateLastParamsN($ticketID, $dateType, $recalculateSupportDeadline=true, $setReopenDefault=true)
static reindexTicket($ticket, $messages=null)
static GetSupportTeamList()
static AddMessage($ticketID, $arFields, &$arrFILES, $checkRights="Y")
static GetStatus($ticketID)
static DeleteMessage($ID, $checkRights="Y")
static GetMessageDynamicList($by='s_date_create', $order='desc', $arFilter=[])
static GetOnline($ticketID)
static GetMessageList($by='s_number', $order='asc', $arFilter=[], $isFiltered=null, $checkRights="Y", $getUserName="Y")
static isnull( $field, $alternative)
static GetDynamicList($by='s_date_create', $order='desc', $arFilter=[])
static UpdateMessage($MESSAGE_ID, $arFields, $checkRights="Y")
</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 $USER_FIELD_MANAGER
$_SERVER["DOCUMENT_ROOT"]
if( $adminSidePanelHelper->isSidePanel())
GetTime($timestamp, $type="SHORT", $site=false, $bSearchInSitesOnly=false)
CheckDateTime($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."%"