• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/timetablecache.php
  • Класс: CSupportTimetableCache
  • Вызов: CSupportTimetableCache::GetShedule
static function GetShedule($arFilter)
{
	global $DB;
	$err_mess = (self::err_mess())."
Function: getShedule
Line: "; $res = array(); $t_sla = self::SLA; $t_sla_shedule = self::SLA_SHEDULE; $arSqlSearch = Array(); foreach($arFilter as $key => $val) { if((is_array($val) && count($val) <= 0) || (!is_array($val) && (string) $val == '')) { continue; } $key = mb_strtoupper($key); if(is_array($val)) { $val = implode(" | ", $val); } switch($key) { case "SLA_ID": $arSqlSearch[] = GetFilterQuery("SLA.ID", $val, "N"); break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = " SELECT SLA.ID SLA_ID, S.WEEKDAY_NUMBER, S.OPEN_TIME, S.MINUTE_FROM, S.MINUTE_TILL FROM $t_sla SLA INNER JOIN $t_sla_shedule S ON SLA.TIMETABLE_ID = S.TIMETABLE_ID AND S.TIMETABLE_ID > 0 WHERE $strSqlSearch ORDER BY SLA_ID, WEEKDAY_NUMBER, MINUTE_FROM "; $q = $DB->Query($strSql, false, $err_mess.__LINE__); if(intval($q->SelectedRowsCount()) <= 0) { self::InsertDefaultValues(); $q = $DB->Query($strSql, false, $err_mess.__LINE__); } $res0 = array(); $noAdd = array(); $oldSLA = -1; $oldWN = -1; while ($arrR = $q->Fetch()) { if(!CSupportTools::array_keys_exists("SLA_ID,WEEKDAY_NUMBER,OPEN_TIME", $arrR)) { continue; } $cSLA = $arrR["SLA_ID"]; $cWN = intval($arrR["WEEKDAY_NUMBER"]); if($oldSLA != $cSLA || $oldWN != $cWN) { if($oldSLA != -1)$res[$oldSLA][$oldWN] = self::MergeIntervals($res0); $res0 = array(); $oldSLA = $cSLA; $oldWN = $cWN; } $cOT = $arrR["OPEN_TIME"]; if(isset($noAdd[$cSLA][$cWN])) continue; switch($cOT) { case "24H": $res0 = array(0 => array("F" => 0, "T" => (24*60*60 - 1))); $noAdd[$cSLA][$cWN] = true; break; case "CLOSED": $res0 = array(); $noAdd[$cSLA][$cWN] = true; break; case "CUSTOM": $res0[] = array("F" => min(intval($arrR["MINUTE_FROM"])*60, intval($arrR["MINUTE_TILL"])*60), "T" => max(intval($arrR["MINUTE_FROM"])*60, intval($arrR["MINUTE_TILL"])*60)); break; } } if($oldSLA > 0) $res[$oldSLA][$oldWN] = self::MergeIntervals($res0); return $res; }