1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
sla.php
См. документацию.
1<?php
2
4
6{
7 const SLA_SITE = 1;
8 const SITE_SLA = 2;
9
10 // add new or modify exist SLA
11 public static function Set($arFields, $id, $checkRights=true)
12 {
13 global $DB, $USER, $APPLICATION;
14 $id = intval($id);
15 $table = "b_ticket_sla";
16 $isDemo = $isSupportClient = $isSupportTeam = $isAdmin = $isAccess = $userID = null;
17 CTicket::GetRoles($isDemo, $isSupportClient, $isSupportTeam, $isAdmin, $isAccess, $userID, $checkRights);
18 if ($isAdmin)
19 {
20 $validDeadlineSource = !isset($arFields['DEADLINE_SOURCE']) || in_array($arFields['DEADLINE_SOURCE'], array('', 'DATE_CREATE'), true);
21
22 if (CTicket::CheckFields($arFields, $id, array("NAME","TIMETABLE_ID")) && $validDeadlineSource)
23 {
24 $arFields_i = CTicket::PrepareFields($arFields, $table, $id);
25 if (intval($id)>0)
26 {
27 $DB->Update($table, $arFields_i, "WHERE ID=".intval($id));
28 }
29 else
30 {
31 $id = $DB->Insert($table, $arFields_i);
32 }
33
34 if (intval($id)>0)
35 {
36 if (is_set($arFields, "arGROUPS"))
37 {
38 $DB->Query("DELETE FROM b_ticket_sla_2_user_group WHERE SLA_ID = $id");
39 if (is_array($arFields["arGROUPS"]) && count($arFields["arGROUPS"])>0)
40 {
41 foreach($arFields["arGROUPS"] as $groupID)
42 {
43 $groupID = intval($groupID);
44 if ($groupID>0)
45 {
46 $strSql = "INSERT INTO b_ticket_sla_2_user_group (SLA_ID, GROUP_ID) VALUES ($id, $groupID)";
47 $DB->Query($strSql);
48 }
49 }
50 }
51 }
52
53 if (is_set($arFields, "arSITES"))
54 {
55 $DB->Query("DELETE FROM b_ticket_sla_2_site WHERE SLA_ID = $id");
56 if (is_array($arFields["arSITES"]) && count($arFields["arSITES"])>0)
57 {
58 foreach($arFields["arSITES"] as $siteID)
59 {
60 //if (strlen($FIRST_SITE_ID)<=0) $FIRST_SITE_ID = $siteID;
61 $FIRST_SITE_ID = $siteID;
62 $siteID = $DB->ForSql($siteID);
63 $strSql = "INSERT INTO b_ticket_sla_2_site (SLA_ID, SITE_ID) VALUES ($id, '$siteID')";
64 $DB->Query($strSql);
65 }
66 }
67 }
68
69 if (is_set($arFields, "arCATEGORIES"))
70 {
71 $DB->Query("DELETE FROM b_ticket_sla_2_category WHERE SLA_ID = $id");
72 if (is_array($arFields["arCATEGORIES"]) && count($arFields["arCATEGORIES"])>0)
73 {
74 foreach($arFields["arCATEGORIES"] as $categoryID)
75 {
76 $categoryID = intval($categoryID);
77 $strSql = "INSERT INTO b_ticket_sla_2_category (SLA_ID, CATEGORY_ID) VALUES ($id, $categoryID)";
78 $DB->Query($strSql);
79 }
80 }
81 }
82
83 if (is_set($arFields, "arCRITICALITIES"))
84 {
85 $DB->Query("DELETE FROM b_ticket_sla_2_criticality WHERE SLA_ID = $id");
86 if (is_array($arFields["arCRITICALITIES"]) && count($arFields["arCRITICALITIES"])>0)
87 {
88 foreach($arFields["arCRITICALITIES"] as $criticalityID)
89 {
90 $criticalityID = intval($criticalityID);
91 $strSql = "INSERT INTO b_ticket_sla_2_criticality (SLA_ID, CRITICALITY_ID) VALUES ($id, $criticalityID)";
92 $DB->Query($strSql);
93 }
94 }
95 }
96
97 if (is_set($arFields, "arMARKS"))
98 {
99 $DB->Query("DELETE FROM b_ticket_sla_2_mark WHERE SLA_ID = $id");
100 if (is_array($arFields["arMARKS"]) && count($arFields["arMARKS"])>0)
101 {
102 foreach($arFields["arMARKS"] as $markID)
103 {
104 $markID = intval($markID);
105 $strSql = "INSERT INTO b_ticket_sla_2_mark (SLA_ID, MARK_ID) VALUES ($id, $markID)";
106 $DB->Query($strSql);
107 }
108 }
109 }
110
111 /*
112 if (is_set($arFields, "arSHEDULE"))
113 {
114 $DB->Query("DELETE FROM b_ticket_sla_shedule WHERE SLA_ID = $id");
115 if (is_array($arFields["arSHEDULE"]) && count($arFields["arSHEDULE"])>0)
116 {
117 while(list($weekday, $arSHEDULE) = each($arFields["arSHEDULE"]))
118 {
119 $arF = array(
120 "SLA_ID" => $id,
121 "WEEKDAY_NUMBER" => intval($weekday),
122 "OPEN_TIME" => "'".$DB->ForSql($arSHEDULE["OPEN_TIME"], 10)."'",
123 );
124 if ($arSHEDULE["OPEN_TIME"]=="CUSTOM" && is_array($arSHEDULE["CUSTOM_TIME"]) && count($arSHEDULE["CUSTOM_TIME"])>0)
125 {
126 foreach($arSHEDULE["CUSTOM_TIME"] as $ar)
127 {
128 if (strlen(trim($ar["MINUTE_FROM"]))>0 || strlen(trim($ar["MINUTE_TILL"]))>0)
129 {
130 $minute_from = strlen($ar["MINUTE_FROM"])>0 ? $ar["MINUTE_FROM"] : "00:00";
131 $a = explode(":",$minute_from);
132 $minute_from = intval($a[0]*60 + $a[1]);
133 $arF["MINUTE_FROM"] = $minute_from;
134
135 $minute_till = strlen($ar["MINUTE_TILL"])>0 ? $ar["MINUTE_TILL"] : "23:59";
136 $a = explode(":",$minute_till);
137 $minute_till = intval($a[0]*60 + $a[1]);
138 $arF["MINUTE_TILL"] = $minute_till;
139
140 $DB->Insert("b_ticket_sla_shedule", $arF);
141 }
142 }
143 }
144 else $DB->Insert("b_ticket_sla_shedule", $arF);
145 }
146 }
147 }
148 */
149
150 $FIRST_SITE_ID = $FIRST_SITE_ID <> '' ? "'".$DB->ForSql($FIRST_SITE_ID)."'" : "null";
151 $DB->Update($table, array("FIRST_SITE_ID" => $FIRST_SITE_ID), "WHERE ID=".intval($id));
152 }
153 }
154 }
155 else
156 {
157 //$APPLICATION->ThrowException(GetMessage("SUP_ERROR_ACCESS_DENIED"));
158 $arMsg = Array();
159 $arMsg[] = array("id"=>"PERMISSION", "text"=> GetMessage("SUP_ERROR_ACCESS_DENIED"));
160 $e = new CAdminException($arMsg);
161 $APPLICATION->ThrowException($e);
162 }
163 CSupportTimetableCache::toCache( array( "SLA_ID"=> $id ) );
164 return $id;
165 }
166
167 // delete SLA
168 public static function Delete($id, $checkRights=true)
169 {
170 global $DB, $USER, $APPLICATION;
171 $id = intval($id);
172 if ($id < 1)
173 {
174 return false;
175 }
176 if ($id == 1)
177 {
178 $APPLICATION->ThrowException(GetMessage("SUP_ERROR_SLA_1"));
179 return false;
180 }
181 $isDemo = $isSupportClient = $isSupportTeam = $isAdmin = $isAccess = $userID = null;
182 CTicket::GetRoles($isDemo, $isSupportClient, $isSupportTeam, $isAdmin, $isAccess, $userID, $checkRights);
183 if ($isAdmin)
184 {
185 $strSql = "SELECT DISTINCT 'x' FROM b_ticket WHERE SLA_ID = $id";
186 $rs = $DB->Query($strSql);
187 if (!$rs->Fetch())
188 {
189 $DB->Query("DELETE FROM b_ticket_sla_2_site WHERE SLA_ID = $id");
190 $DB->Query("DELETE FROM b_ticket_sla_2_category WHERE SLA_ID = $id");
191 $DB->Query("DELETE FROM b_ticket_sla_2_criticality WHERE SLA_ID = $id");
192 $DB->Query("DELETE FROM b_ticket_sla_2_mark WHERE SLA_ID = $id");
193 $DB->Query("DELETE FROM b_ticket_sla_2_user_group WHERE SLA_ID = $id");
194 //$DB->Query("DELETE FROM b_ticket_sla_shedule WHERE SLA_ID = $id");
195 $DB->Query("DELETE FROM b_ticket_sla_2_holidays WHERE SLA_ID = $id");
196
197 $DB->Query("DELETE FROM b_ticket_sla WHERE ID = $id");
198 $DB->Query("DELETE FROM b_ticket_timetable_cache WHERE SLA_ID = $id");
199 return true;
200 }
201 else
202 {
203 $APPLICATION->ThrowException(str_replace("#ID#", "$id", GetMessage("SUP_ERROR_SLA_HAS_TICKET")));
204 }
205 }
206 else
207 {
208 $APPLICATION->ThrowException(GetMessage("SUP_ERROR_ACCESS_DENIED"));
209 }
210 return false;
211 }
212
213 // get SLA by ID
214 public static function GetByID($id)
215 {
216 $id = intval($id);
217 if ($id<=0) return false;
218 $arFilter = array("ID" => $id, "ID_EXACT_MATCH" => "Y");
219 $arSort = $is_filtered = null;
220 $rs = CTicketSLA::GetList($arSort, $arFilter, $is_filtered);
221 return $rs;
222 }
223
224 // get shedule array by SLA ID
225 public static function GetSheduleArray($slaID)
226 {
227 global $DB, $USER, $APPLICATION;
228 $arResult = array();
229 $slaID = intval($slaID);
230 if ($slaID>0)
231 {
232 $strSql = "SELECT * FROM b_ticket_sla_shedule WHERE SLA_ID = $slaID ORDER BY WEEKDAY_NUMBER, MINUTE_FROM, MINUTE_TILL";
233 $rs = $DB->Query($strSql);
234 while($ar = $rs->Fetch())
235 {
236 if ($ar["OPEN_TIME"]=="CUSTOM")
237 {
238 if (intval($ar["MINUTE_FROM"])>0)
239 {
240 $h_from = floor($ar["MINUTE_FROM"]/60);
241 $m_from = $ar["MINUTE_FROM"] - $h_from*60;
242 }
243 if (intval($ar["MINUTE_TILL"])>0)
244 {
245 $h_till = floor($ar["MINUTE_TILL"]/60);
246 $m_till = $ar["MINUTE_TILL"] - $h_till*60;
247 }
248 $arResult[$ar["WEEKDAY_NUMBER"]]["OPEN_TIME"] = $ar["OPEN_TIME"];
249 $arResult[$ar["WEEKDAY_NUMBER"]]["CUSTOM_TIME"][] = array(
250 "MINUTE_FROM" => $ar["MINUTE_FROM"],
251 "SECOND_FROM" => $ar["MINUTE_FROM"]*60,
252 "MINUTE_TILL" => $ar["MINUTE_TILL"],
253 "SECOND_TILL" => $ar["MINUTE_TILL"]*60,
254 "FROM" => $h_from.":".str_pad($m_from, 2, 0),
255 "TILL" => $h_till.":".str_pad($m_till, 2, 0)
256 );
257 }
258 else
259 {
260 $arResult[$ar["WEEKDAY_NUMBER"]] = array("OPEN_TIME" => $ar["OPEN_TIME"]);
261 }
262 $arResult[$ar["WEEKDAY_NUMBER"]]["WEEKDAY_TITLE"] = GetMessage("SUP_WEEKDAY_".$ar["WEEKDAY_NUMBER"]);
263 }
264 }
265 return $arResult;
266 }
267
268 public static function GetGroupArray($slaID)
269 {
270 global $DB, $USER, $APPLICATION;
271 $arResult = array();
272 $slaID = intval($slaID);
273 if ($slaID>0)
274 {
275 $strSql = "SELECT GROUP_ID FROM b_ticket_sla_2_user_group WHERE SLA_ID = $slaID";
276 $rs = $DB->Query($strSql);
277 while($ar = $rs->Fetch()) $arResult[] = $ar["GROUP_ID"];
278 }
279 return $arResult;
280 }
281
282 public static function GetGroupArrayForAllSLA()
283 {
284 global $DB;
285
286 $arResult = array();
287 $strSql = "SELECT SLA_ID, GROUP_ID FROM b_ticket_sla_2_user_group";
288 $rs = $DB->Query($strSql);
289
290 while($ar = $rs->Fetch())
291 {
292 $arResult[$ar['SLA_ID']][] = $ar["GROUP_ID"];
293 }
294
295 return $arResult;
296 }
297
298 public static function GetSiteArray($slaID)
299 {
300 global $DB, $USER, $APPLICATION;
301 $arResult = array();
302 $slaID = intval($slaID);
303 if ($slaID>0)
304 {
305 $strSql = "SELECT SITE_ID FROM b_ticket_sla_2_site WHERE SLA_ID = $slaID";
306 $rs = $DB->Query($strSql);
307 while($ar = $rs->Fetch()) $arResult[] = $ar["SITE_ID"];
308 }
309 return $arResult;
310 }
311
312 public static function GetSiteArrayForAllSLA($p = self::SLA_SITE) //self::SITE_SLA
313 {
314 static $GetSiteArrayForAllSLACache;
315 if($p !== self::SITE_SLA)
316 {
317 $p = self::SLA_SITE;
318 }
319 if(!is_array($GetSiteArrayForAllSLACache))
320 {
321 global $DB;
322 $GetSiteArrayForAllSLACache = array();
323 $strSql = "
324 SELECT
325 SS.SITE_ID,
326 SS.SLA_ID
327 FROM
328 b_ticket_sla_2_site SS
329 ";
330 $rs = $DB->Query($strSql);
331 while ($ar = $rs->Fetch())
332 {
333 $GetSiteArrayForAllSLACache[self::SLA_SITE][$ar["SLA_ID"]][] = $ar["SITE_ID"];
334 $GetSiteArrayForAllSLACache[self::SITE_SLA][$ar["SITE_ID"]][] = $ar["SLA_ID"];
335 }
336 }
337 return $GetSiteArrayForAllSLACache[$p];
338 }
339
340 public static function GetCategoryArray($slaID)
341 {
342 global $DB, $USER, $APPLICATION;
343 $arResult = array();
344 $slaID = intval($slaID);
345 if ($slaID>0)
346 {
347 $strSql = "SELECT CATEGORY_ID FROM b_ticket_sla_2_category WHERE SLA_ID = $slaID";
348 $rs = $DB->Query($strSql);
349 while($ar = $rs->Fetch()) $arResult[] = $ar["CATEGORY_ID"];
350 }
351 return $arResult;
352 }
353
354 public static function GetCriticalityArray($slaID)
355 {
356 global $DB, $USER, $APPLICATION;
357 $arResult = array();
358 $slaID = intval($slaID);
359 if ($slaID>0)
360 {
361 $strSql = "SELECT CRITICALITY_ID FROM b_ticket_sla_2_criticality WHERE SLA_ID = $slaID";
362 $rs = $DB->Query($strSql);
363 while($ar = $rs->Fetch()) $arResult[] = $ar["CRITICALITY_ID"];
364 }
365 return $arResult;
366 }
367
368 public static function GetMarkArray($slaID)
369 {
370 global $DB, $USER, $APPLICATION;
371 $arResult = array();
372 $slaID = intval($slaID);
373 if ($slaID>0)
374 {
375 $strSql = "SELECT MARK_ID FROM b_ticket_sla_2_mark WHERE SLA_ID = $slaID";
376 $rs = $DB->Query($strSql);
377 while($ar = $rs->Fetch()) $arResult[] = $ar["MARK_ID"];
378 }
379 return $arResult;
380 }
381
382 public static function GetDropDown($siteID="")
383 {
384 if ($siteID <> '' && mb_strtoupper($siteID) != "ALL")
385 {
386 $arFilter = array("SITE" => $siteID);
387 }
388 $arSort = array("FIRST_SITE_ID" => "ASC", "PRIORITY" => "ASC");
389 $is_filtered = null;
390 $rs = CTicketSLA::GetList($arSort, $arFilter, $is_filtered);
391 return $rs;
392 }
393
394 public static function GetForUser($siteID=false, $userID=false)
395 {
396 global $DB, $USER, $APPLICATION;
397
398 $slaID = 1; // default SLA
399
400 $arrGroups = array();
401 if (!is_object($USER)) $USER = new CUser;
402 if ($userID===false && is_object($USER)) $userID = $USER->GetID();
403 if ($siteID==false) $siteID = SITE_ID;
404
405 $userID = intval($userID);
406 if ($userID>0) $arrGroups = CUser::GetUserGroup($userID);
407 if (count($arrGroups)<=0) $arrGroups[] = 2;
408
409 $arSla2Site = array();
410 $rs = $DB->Query("SELECT SLA_ID, SITE_ID FROM b_ticket_sla_2_site");
411 while ($ar = $rs->Fetch()) $arSla2Site[$ar["SLA_ID"]][] = $ar["SITE_ID"];
412
413 $strSql = "
414 SELECT
415 SG.SLA_ID
416 FROM
417 b_ticket_sla_2_user_group SG
418 INNER JOIN b_ticket_sla S ON (S.ID = SG.SLA_ID)
419 WHERE
420 SG.GROUP_ID in (".implode(",",$arrGroups).")
421 GROUP BY
422 SG.SLA_ID, S.PRIORITY
423 ORDER BY
424 S.PRIORITY DESC
425 ";
426 $rs = $DB->Query($strSql);
427 while ($ar = $rs->Fetch())
428 {
429 if (is_array($arSla2Site[$ar["SLA_ID"]]) && (in_array($siteID, $arSla2Site[$ar["SLA_ID"]]) || in_array("ALL", $arSla2Site[$ar["SLA_ID"]])))
430 {
431 $slaID = $ar["SLA_ID"];
432 break;
433 }
434 }
435 return $slaID;
436 }
437
438 public static function GetSLA( $siteID, $userID, $categoryID = null, $coupon = "" )
439 {
440 global $DB;
441
442 $userID = intval($userID);
443
444 if( $coupon <> '' )
445 {
446 $rsCoupon = CSupportSuperCoupon::GetList( false, array( 'COUPON' => $coupon ) );
447 if($arCoupon = $rsCoupon->Fetch())
448 {
449 if(intval($arCoupon['SLA_ID']) > 0)
450 {
451 return intval($arCoupon['SLA_ID']);
452 }
453 }
454 }
455
456 $slaID = COption::GetOptionString( "support", "SUPPORT_DEFAULT_SLA_ID" );
457
458 $OLD_FUNCTIONALITY = COption::GetOptionString( "support", "SUPPORT_OLD_FUNCTIONALITY", "Y" );
459 if( $OLD_FUNCTIONALITY == "Y" )
460 {
461 $categoryID = null;
462 }
463
464 $JOIN = "";
465 $fields = "1";
466 if( $categoryID != null )
467 {
468 $categoryID = intval($categoryID);
469 $fields = "CASE
470 WHEN SC.SLA_ID IS NOT NULL THEN 1
471 ELSE 0
472 END";
473 $JOIN .= "
474 LEFT JOIN b_ticket_sla_2_category SC
475 ON S.ID = SC.SLA_ID
476 AND ( SC.CATEGORY_ID = 0 OR SC.CATEGORY_ID = $categoryID )";
477 }
478
479 $strSql = "
480 SELECT
481 PZ.SLA_ID
482 FROM
483 (
484 SELECT
485 SG.SLA_ID SLA_ID,
486 $fields PRIORITY1,
487 S.PRIORITY PRIORITY2
488 FROM
489 b_ticket_sla S
490 INNER JOIN b_ticket_sla_2_site SS
491 ON S.ID = SS.SLA_ID
492 AND ( SS.SITE_ID = 'ALL' OR SS.SITE_ID = '$siteID' )
493 INNER JOIN b_ticket_sla_2_user_group SG
494 ON S.ID = SG.SLA_ID
495
496 $JOIN
497
498 WHERE SG.GROUP_ID IN (
499 SELECT UG.GROUP_ID FROM b_user_group UG
500 WHERE
501 UG.USER_ID = $userID
502 AND (UG.DATE_ACTIVE_FROM IS NULL OR UG.DATE_ACTIVE_FROM <= ".$DB->CurrentTimeFunction().")
503 AND (UG.DATE_ACTIVE_TO IS NULL OR UG.DATE_ACTIVE_TO >= ".$DB->CurrentTimeFunction().")
504 )
505 OR SG.GROUP_ID = 2
506 ) PZ
507 GROUP BY
508 PZ.SLA_ID, PZ.PRIORITY1, PZ.PRIORITY2
509 ORDER BY
510 PZ.PRIORITY1 DESC, PZ.PRIORITY2 DESC
511
512 ";
513
514 $rs = $DB->Query($strSql);
515 if( $ar = $rs->Fetch() )
516 {
517 if( is_array( $ar ) && array_key_exists( "SLA_ID", $ar ) )
518 {
519 $slaID = $ar["SLA_ID"];
520 }
521 }
522
523 return $slaID;
524 }
525}
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
static GetRoles(&$isDemo, &$isSupportClient, &$isSupportTeam, &$isAdmin, &$isAccess, &$userID, $checkRights=true)
Определения support.php:142
static PrepareFields($arFields, $table, $id)
Определения support.php:388
static CheckFields($arFields, $id, $arRequired)
Определения support.php:326
Определения sla.php:6
static Delete($id, $checkRights=true)
Определения sla.php:168
static GetForUser($siteID=false, $userID=false)
Определения sla.php:394
static GetByID($id)
Определения sla.php:214
static GetSheduleArray($slaID)
Определения sla.php:225
const SITE_SLA
Определения sla.php:8
static GetSLA( $siteID, $userID, $categoryID=null, $coupon="")
Определения sla.php:438
static GetSiteArrayForAllSLA($p=self::SLA_SITE)
Определения sla.php:312
static GetSiteArray($slaID)
Определения sla.php:298
static GetCategoryArray($slaID)
Определения sla.php:340
const SLA_SITE
Определения sla.php:7
static GetGroupArrayForAllSLA()
Определения sla.php:282
static GetCriticalityArray($slaID)
Определения sla.php:354
static Set($arFields, $id, $checkRights=true)
Определения sla.php:11
static GetMarkArray($slaID)
Определения sla.php:368
static GetDropDown($siteID="")
Определения sla.php:382
static GetGroupArray($slaID)
Определения sla.php:268
static GetList($arOrder=array(), $arFilter=array())
Определения coupons.php:249
static GetList(&$arSort, $arFilter=Array(), &$isFiltered)
Определения sla.php:8
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$p
Определения group_list_element_edit.php:23
global $DB
Определения cron_frame.php:29
$siteID
Определения cron_frame.php:12
global $USER
Определения csv_new_run.php:40
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$ar
Определения options.php:199
</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."%"
Определения waybill.php:936
const SITE_ID
Определения sonet_set_content_view.php:12
$rs
Определения action.php:82
$arFilter
Определения user_search.php:106
$fields
Определения yandex_run.php:501