• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/timetablecache.php
  • Класс: CSupportTimetableCache
  • Вызов: CSupportTimetableCache::GetHolidays
static function GetHolidays($dateB, $dateE, $arrS, $arFilter)
{
	global $DB;
	$err_mess = (self::err_mess())."
Function: getHolidays
Line: "; $res = array(); $tabNameHolidays = self::TICKET_HOLIDAYS; $tabNameS2H = self::SLA_2_HOLIDAYS; $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("HS.SLA_ID", $val, "N"); break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); CTimeZone::Disable(); $strSql = " SELECT HS.SLA_ID, H.OPEN_TIME, " . $DB->DateToCharFunction("H.DATE_FROM", "FULL") . " DATE_FROM, " . $DB->DateToCharFunction("H.DATE_TILL", "FULL") . " DATE_TILL FROM $tabNameHolidays H INNER JOIN $tabNameS2H HS ON H.ID = HS.HOLIDAYS_ID AND HS.HOLIDAYS_ID > 0 WHERE H.DATE_FROM > " . $DB->CharToDateFunction(GetTime($dateB, "FULL")) . " AND H.DATE_FROM < " . $DB->CharToDateFunction(GetTime($dateE, "FULL")) . " AND $strSqlSearch ORDER BY SLA_ID,DATE_FROM "; $q = $DB->Query($strSql, false, $err_mess.__LINE__); CTimeZone::Enable(); $res0 = array(); $oldSLA = -1; $goodSLA = array_keys($arrS); while ($arrR = $q->Fetch()) { if(!CSupportTools::array_keys_exists("SLA_ID,OPEN_TIME,DATE_FROM,DATE_TILL", $arrR) || !in_array($arrR["SLA_ID"], $goodSLA)) { continue; } $cSLA = $arrR["SLA_ID"]; if($oldSLA != $cSLA) { if(count($res0) > 0) $res[$oldSLA] = self::MergeIntervalsH($res0, $arrS[$oldSLA]); $res0 = array(); $oldSLA = $cSLA; } $cOT = $arrR["OPEN_TIME"]; $dtB = MakeTimeStamp($arrR["DATE_FROM"]); $dtE = MakeTimeStamp($arrR["DATE_TILL"]); $dtC = self::GetDayBegin($dtB); while($dtC <= $dtE && $dtC <= $dateE) { $dtCB = self::GetDayBegin($dtC); $dtCE = self::GetDayEnd($dtC); if(substr_count($cOT, "WORKDAY_") > 0) { $WN = str_replace("WORKDAY_", "" , $cOT); if($WN == "H") { $res0[$dtC]["W"][] = array("F" => (max($dtB, $dtCB) - $dtCB), "T" => (min($dtE, $dtCE) - $dtCB)); } elseif(isset($arrS[$cSLA][$WN])) { if(count($arrS[$cSLA][$WN]) > 0) { foreach($arrS[$cSLA][$WN] as $k => $v) { $res0[$dtC]["W"][] = $v; } } else { $res0[$dtC]["C"] = true; } } } else { if($cOT == "HOLIDAY_H") { $res0[$dtC]["H"][] = array("F" => (max($dtB, $dtCB) - $dtCB), "T" => (min($dtE, $dtCE) - $dtCB)); } elseif($cOT == "HOLIDAY") { $res0[$dtC]["C"] = true; } } $dtC += 24*60*60; } } if(count($res0) > 0) { $res[$oldSLA] = self::MergeIntervalsH($res0, $arrS[$oldSLA]); } return $res; }