%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/support/classes/general/ |
Current File : /home/bitrix/www/bitrix/modules/support/classes/general/holidays.php |
<?php IncludeModuleLangFile(__FILE__); class CSupportHolidays { static $holidays = array( "ID" => array("TYPE" => CSupportTableFields::VT_NUMBER, "DEF_VAL" => 0, "AUTO_CALCULATED" => true), "NAME" => array("TYPE" => CSupportTableFields::VT_STRING, "DEF_VAL" => "", "MAX_STR_LEN" => 255), "DESCRIPTION" => array("TYPE" => CSupportTableFields::VT_STRING, "DEF_VAL" => "", "MAX_STR_LEN" => 2000), "OPEN_TIME" => array("TYPE" => CSupportTableFields::VT_STRING, "DEF_VAL" => "HOLIDAY", "LIST" => array("HOLIDAY_H", "HOLIDAY", "WORKDAY_H", "WORKDAY_0", "WORKDAY_1", "WORKDAY_2", "WORKDAY_3", "WORKDAY_4", "WORKDAY_5", "WORKDAY_6")), "DATE_FROM" => array("TYPE" => CSupportTableFields::VT_DATE_TIME, "DEF_VAL" => null), "DATE_TILL" => array("TYPE" => CSupportTableFields::VT_DATE_TIME, "DEF_VAL" => null), ); static $sla2holidays = array( "SLA_ID" => array("TYPE" => CSupportTableFields::VT_NUMBER, "DEF_VAL" => 0), "HOLIDAYS_ID" => array("TYPE" => CSupportTableFields::VT_NUMBER, "DEF_VAL" => 0), ); const table = "b_ticket_holidays"; const table_s2h = "b_ticket_sla_2_holidays"; const table_sla = "b_ticket_sla"; static function err_mess() { $module_id = "support"; @include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/" . $module_id . "/install/version.php"); return "<br>Module: " . $module_id . " <br>Class: CSupportHolidays<br>File: " . __FILE__; } function Set($arFields, $arFieldsSLA) //$arFields, $arFieldsSLA = array(0 => array("HOLIDAYS_ID" => 1, "SLA_ID" => 1), 1 => array("HOLIDAYS_ID" => 2, "SLA_ID" => 2) ...) { global $DB, $APPLICATION; $err_mess = (self::err_mess())."<br>Function: Set<br>Line: "; $isDemo = null; $isSupportClient = null; $isSupportTeam = null; $isAdmin = null; $isAccess = null; $userID = null; CTicket::GetRoles($isDemo, $isSupportClient, $isSupportTeam, $isAdmin, $isAccess, $userID); if(!$isAdmin) { $arMsg = Array(); $arMsg[] = array("id"=>"PERMISSION", "text"=> GetMessage("SUP_ERROR_ACCESS_DENIED")); $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); return false; } if(is_array($arFields)) { $f = new CSupportTableFields(self::$holidays); $f->FromArray($arFields); } else $f = $arFields; if(is_array($arFieldsSLA)) { $f_s = new CSupportTableFields(self::$sla2holidays, CSupportTableFields::C_Table); $f_s->FromTable($arFieldsSLA); } else $f_s = $arFieldsSLA; $table = self::table; $table_s2h = self::table_s2h; $isNew = ($f->ID <= 0); $objError = new CAdminException(array()); if(strlen($f->NAME) <= 0) { $objError->AddMessage(array("text" => GetMessage('SUP_ERROR_EMPTY_NAME'))); } if(strlen($f->OPEN_TIME) <= 0) { $objError->AddMessage(array("text" => GetMessage('SUP_ERROR_EMPTY_OPEN_TIME'))); } $zd = mktime(0, 0, 0, 1, 1, 2010); if($f->DATE_FROM < $zd || $f->DATE_FROM === null || $f->DATE_TILL < $zd || $f->DATE_TILL === null || $f->DATE_FROM > $f->DATE_TILL) { if($f->DATE_FROM < $zd || $f->DATE_FROM === null) { $f->DATE_FROM = time() + CTimeZone::GetOffset(); } if($f->DATE_TILL < $zd || $f->DATE_TILL === null) { $f->DATE_TILL = time() + CTimeZone::GetOffset(); } $objError->AddMessage(array("text" => GetMessage('SUP_ERROR_EMPTY_DATE'))); } if(count($objError->GetMessages())>0) { $APPLICATION->ThrowException($objError); return false; } $arFields_i = $f->ToArray(CSupportTableFields::ALL, array(CSupportTableFields::NOT_NULL), true); $res = 0; if(count($arFields_i) > 0) { if($isNew) { $res = $DB->Insert($table, $arFields_i, $err_mess . __LINE__); $f->ID = $res; } else { $res = $DB->Update($table, $arFields_i, "WHERE ID=" . $f->ID . "", $err_mess . __LINE__); } } if(intval($res) <= 0) { $APPLICATION->ThrowException(GetMessage('SUP_ERROR_DB_ERROR')); return false; } $DB->Query("DELETE FROM $table_s2h WHERE HOLIDAYS_ID = " . $f->ID, false, $err_mess . __LINE__); $f_s->ResetNext(); while($f_s->Next()) { $f_s->HOLIDAYS_ID = $f->ID; if($f_s->SLA_ID > 0) { $strSql = "INSERT INTO " . $table_s2h . "(SLA_ID, HOLIDAYS_ID) VALUES (" . $f_s->SLA_ID . ", " . $f_s->HOLIDAYS_ID . ")"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); } } CSupportTimetableCache::toCache(array("SLA_ID"=> $f_s->getColumn("SLA_ID"))); return $f->ID; } // get Holidays list function GetList($arSort, $arFilter) { $err_mess = (self::err_mess())."<br>Function: GetList<br>Line: "; global $DB, $USER, $APPLICATION; $filter_keys = array_keys($arFilter); $table = self::table; $table_s2h = self::table_s2h; $arSqlSearch = Array(); if(!is_array($arFilter)) $arFilter = Array(); foreach($arFilter as $key => $val) { if((is_array($val) && count($val) <= 0) || (!is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF'))) continue; $key = strtoupper($key); if (is_array($val)) $val = implode(" | ",$val); switch($key) { case "ID": $arSqlSearch[] = GetFilterQuery("H.ID", $val, "N"); break; case "~NAME": $arSqlSearch[] = GetFilterQuery("H.NAME", $val, "N"); break; case "OPEN_TIME": $arSqlSearch[] = GetFilterQuery("H.OPEN_TIME", $val, "N"); break; case "SLA_ID": $arSqlSearch[] = "H.ID IN ( SELECT S2H.HOLIDAYS_ID FROM $table_s2h S2H WHERE " . GetFilterQuery("S2H.SLA_ID", $val, "N") . ")"; break; case "PERIOD": if(is_array($val) && isset($val["FROM"]) && intval($val["FROM"]) > 0 && isset($val["TILL"]) && intval($val["TILL"]) > 0) { $arSqlSearch[] = "H.DATE_FROM <= " . $DB->CharToDateFunction(GetTime($val["TILL"], "FULL")) . " AND H.DATE_TILL >= " . $DB->CharToDateFunction(GetTime($val["FROM"], "FULL")); } break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $arSort = is_array($arSort) ? $arSort : array(); if(count($arSort) > 0) { $ar1 = array_merge($DB->GetTableFieldsList($table), array()); $ar2 = array_keys($arSort); $arDiff = array_diff($ar2, $ar1); if(is_array($arDiff) && count($arDiff) > 0) foreach($arDiff as $value) unset($arSort[$value]); } if(count($arSort) <= 0) $arSort = array("ID" => "ASC"); $fs = ""; foreach($arSort as $by => $order) { if(strtoupper($order) != "DESC") $order="ASC"; if($by === "DATE_TILL" || $by === "DATE_FROM") { $fs .= ", " . $by . " " . $by . "_SORT"; $arSqlOrder[] = $by . "_SORT " . $order; } else { $arSqlOrder[] = $by . " " . $order; } } if(is_array($arSqlOrder) && count($arSqlOrder) > 0) $strSqlOrder = " ORDER BY " . implode(",", $arSqlOrder); $strSql = " SELECT H.ID, H.NAME, H.DESCRIPTION, H.OPEN_TIME, " . $DB->DateToCharFunction("H.DATE_FROM", "FULL") . " DATE_FROM, " . $DB->DateToCharFunction("H.DATE_TILL", "FULL") . " DATE_TILL" . $fs . " FROM $table H WHERE $strSqlSearch $strSqlOrder "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); return $rs; } // get Holidays list function GetSLAByID($id, $needObj = false) { $err_mess = (self::err_mess())."<br>Function: GetList<br>Line: "; global $DB, $USER, $APPLICATION; $table_s2h = self::table_s2h; $table_sla = self::table_sla; $id = intval($id); $strSql = " SELECT S2H.HOLIDAYS_ID, S2H.SLA_ID, SLA.NAME FROM $table_s2h S2H INNER JOIN $table_sla SLA ON S2H.SLA_ID = SLA.ID AND S2H.HOLIDAYS_ID = $id ORDER BY SLA.NAME "; $res = $DB->Query($strSql, false, $err_mess.__LINE__); if(!$needObj) return $res; $f_s = new CSupportTableFields(self::$sla2holidays, CSupportTableFields::C_Table); $f_s->RemoveExistingRows(); while ($resR = $res->Fetch()) { $f_s->AddRow(); $f_s->FromArray($resR); } return $f_s; } function GetOpenTimeArray() { return array( "GB_1" => "SUP_OPEN_TIME_HOLIDAY_G", "HOLIDAY_H" => "SUP_OPEN_TIME_HOLIDAY_H", "HOLIDAY" => "SUP_OPEN_TIME_HOLIDAY", "GE_1" => "", "GB_2" => "SUP_OPEN_TIME_WORKDAY_G", "WORKDAY_H" => "SUP_OPEN_TIME_WORKDAY_H", "WORKDAY_0" => "SUP_OPEN_TIME_WORKDAY_0", "WORKDAY_1" => "SUP_OPEN_TIME_WORKDAY_1", "WORKDAY_2" => "SUP_OPEN_TIME_WORKDAY_2", "WORKDAY_3" => "SUP_OPEN_TIME_WORKDAY_3", "WORKDAY_4" => "SUP_OPEN_TIME_WORKDAY_4", "WORKDAY_5" => "SUP_OPEN_TIME_WORKDAY_5", "WORKDAY_6" => "SUP_OPEN_TIME_WORKDAY_6", "GE_2" => "", ); } function GetOpenTimeT($v) { $arr = self::GetOpenTimeArray(); return (isset($arr[$v]) ? $arr[$v] : ""); } // delete Holiday function Delete($id, $checkRights=true) { $err_mess = (self::err_mess())."<br>Function: Delete<br>Line: "; global $DB, $USER, $APPLICATION; $id = intval($id); $table = self::table; $table_s2h = self::table_s2h; if ($id <= 0) return false; $isDemo = null; $isSupportClient = null; $isSupportTeam = null; $isAdmin = null; $isAccess = null; $userID = null; CTicket::GetRoles($isDemo, $isSupportClient, $isSupportTeam, $isAdmin, $isAccess, $userID, $checkRights); if(!$isAdmin) { $arMsg = Array(); $arMsg[] = array("id"=>"PERMISSION", "text"=> GetMessage("SUP_ERROR_ACCESS_DENIED")); $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); return false; } // get affected sla $affected_sla = array(); $res = $DB->Query("SELECT SLA_ID FROM b_ticket_sla_2_holidays WHERE HOLIDAYS_ID = $id"); while ($row = $res->Fetch()) { $affected_sla[] = $row['SLA_ID']; } // delete $DB->Query("DELETE FROM $table WHERE ID = $id", false, $err_mess . __LINE__); $DB->Query("DELETE FROM $table_s2h WHERE HOLIDAYS_ID = $id", false, $err_mess . __LINE__); // recalculate only affected sla CSupportTimetableCache::toCache(array("SLA_ID" => $affected_sla)); return true; } } ?>