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