BeginCustomField("NAME", GetMessage("SUP_NAME"), false); ?> GetCustomLabelHTML()?>: "> EndCustomField("NAME"); $adminForm->BeginCustomField("DESCRIPTION", GetMessage("SUP_DESCRIPTION"), false); ?> GetCustomLabelHTML(); ?>: EndCustomField("DESCRIPTION"); } function Tab2_JS() { ?> BeginCustomField("HOURS", GetMessage("SUP_HOURS"), false); Tab2_JS(); ?> "SUP_24H", "CLOSED" => "SUP_CLOSED", "CUSTOM" => "SUP_CUSTOM", ); for($i=0; $i<=6; $i++) { ?> $l) { echo ''; } $styleV = " visibility: hidden;"; if($arShedule[$i]["OPEN_TIME"] == "CUSTOM") { $styleV = ""; } ?>
' . InputType("radio", "ArrShedule[$i][OPEN_TIME]", $v, $arShedule[$i]["OPEN_TIME"], false, ' ' . GetMessage($l), 'onClick="HideRC(this, \'table' . $i . '\')"') . ' array( "i" => $i, ), );*/ $j = -1; $styleFirstRow = ' style="padding-top:2px !important;"'; foreach($arShedule[$i]["CUSTOM_TIME"] as $k => $v) { $j++; /*$arrREQ["CClockAJAXData"]["j"] = $j; $arrREQ["CClockAJAXData"]["ValF"] = $v["MINUTE_FROM"]; $arrREQ["CClockAJAXData"]["ValT"] = $v["MINUTE_TILL"]; echo "" . CSupportPage::ShowClock($arrREQ) . "";*/ $trID = "td_" . $i . $j; echo ''. '' . ' - ' . '' . '' . GetMessage(' . ($j > 0 ? '' . GetMessage(' : '') . ''; $styleFirstRow = ""; } ?>
EndCustomField("HOURS"); } class CSupportPage { const AJAX_VAR_NAME = "MY_AJAX"; const LIST_URL = "ticket_timetable_list.php"; const SHOW_FORM_SETTINGS = true; const SHOW_USER_FIELDS = false; const DEFAULT_TIME = "00:00"; const DEFAULT_TIME_INPUT_ROW = 1; static $needShowInterface = true; static $needSave = false; static $canNotRead = false; static $objCAdminForm = null; //$tabControl static $notSaved = true; static $isErrors = false; static $id = 0; static $timeTableFields = null; static $timeTableSheduleFields = null; static $postTimeTableFields = null; static $postTimeTableSheduleFields = null; static function ProcessAJAX() { if(isset($_REQUEST[self::AJAX_VAR_NAME]) && $_REQUEST[self::AJAX_VAR_NAME] <> '') { self::$needShowInterface = false; $type = $_REQUEST[self::AJAX_VAR_NAME]; switch($type) { case "CClockAJAX": //echo self::ShowClock($_REQUEST, true); return true; } } return false; } static function GetPost() { self::$postTimeTableFields = new CSupportTableFields(CSupportTimetable::$fieldsTypes); self::$postTimeTableSheduleFields = new CSupportTableFields(CSupportTimetable::$fieldsTypesShedule, CSupportTableFields::C_Table); $res = false; if(isset($_REQUEST["ID"]) && intval($_REQUEST["ID"]) > 0) self::$id = intval($_REQUEST["ID"]); if(check_bitrix_sessid() && $_SERVER["REQUEST_METHOD"] == "POST" ) { // Get data from POST self::$postTimeTableFields->FromArray($_REQUEST); self::$id = self::$postTimeTableFields->ID; if(isset($_REQUEST["ArrShedule"]) && is_array($_REQUEST["ArrShedule"]) && count($_REQUEST["ArrShedule"]) > 0) self::ArrSheduleInObj($_REQUEST["ArrShedule"]); $res = true; } return $res; } static function Save() { $presSave = (isset($_REQUEST["save"]) && $_REQUEST["save"] <> ''); $presApply = (isset($_REQUEST["apply"]) && $_REQUEST["apply"] <> ''); if($presSave || $presApply) { self::$id = intval(CSupportTimetable::Set(self::$postTimeTableFields, self::$postTimeTableSheduleFields)); // Если сохранить не удалось то self::$id будет равен 0 и read() не сработает данные возьмутся из POST без изменений if(self::$id > 0) { if(!$presApply) { LocalRedirect("/bitrix/admin/" . self::LIST_URL . "?lang=". LANG . GetFilterParams("filter_", false)); } return true; } } return false; } static function Read() { if(self::$id <= 0) return false; self::$timeTableFields = new CSupportTableFields(CSupportTimetable::$fieldsTypes); $rs = CSupportTimetable::GetList(array(), array('ID' => self::$id)); if ($arResult = $rs->Fetch()) { self::$timeTableFields->FromArray($arResult); self::$notSaved = false; self::$timeTableSheduleFields = CSupportTimetable::GetSheduleByID(self::$id, true); } else { self::$canNotRead = true; return false; } return true; } static function GetArrayOfTabs() { global $USER_FIELD_MANAGER; $res = array( array( "DIV" => "edit1", "ICON"=>"main_user_edit", "TAB" => GetMessage("SUP_ADMIN_TAB1"), "TITLE"=>GetMessage("SUP_ADMIN_TAB1") ), array( "DIV" => "edit2", "ICON"=>"main_user_edit", "TAB" => GetMessage("SUP_ADMIN_TAB2"), "TITLE"=>GetMessage("SUP_ADMIN_TAB2") ), ); if(self::SHOW_USER_FIELDS) $res[] = $USER_FIELD_MANAGER->EditFormTab("LEARN_ATTEMPT"); return $res; } static function DoActions() { global $APPLICATION; if(self::ProcessAJAX()) return; if(self::GetPost()) self::Save(); if(!self::Read()) { self::$timeTableFields = self::$postTimeTableFields; self::$timeTableSheduleFields = self::$postTimeTableSheduleFields; } self::$objCAdminForm = new CAdminForm("supTabControl", self::GetArrayOfTabs()); if (empty($_REQUEST['ID'])) { $APPLICATION->SetTitle(GetMessage("SUP_ADMIN_TITLE_ADD")); } else { $APPLICATION->SetTitle(GetMessage("SUP_ADMIN_TITLE_EDIT", array('#NAME#' => self::$timeTableFields->NAME))); } } static function ShowErrors() { global $APPLICATION; if(self::$canNotRead) { $aContext = array( array( "ICON" => "btn_list", "TEXT" => GetMessage("SUP_BACK_TO_ADMIN"), "LINK" => (self::LIST_URL . "?lang=" . LANG), "TITLE" => GetMessage("SUP_BACK_TO_ADMIN") ), ); $context = new CAdminContextMenu($aContext); $context->Show(); CAdminMessage::ShowMessage(GetMessage("SUP_TIMETABLE_NOT_FOUND")); return true; } if($e = $APPLICATION->GetException()) { self::$isErrors = true; $errorMessage = new CAdminMessage(GetMessage("SUP_ERROR"), $e); echo $errorMessage->Show(); } return false; } static function ShowMenu() { global $APPLICATION; $aContext = array( array( "ICON" => "btn_list", "TEXT" => GetMessage("MAIN_ADMIN_MENU_LIST"), "LINK" => self::LIST_URL . "?lang=". LANG . GetFilterParams("filter_"), "TITLE" => GetMessage("MAIN_ADMIN_MENU_LIST") ), ); if(!self::$notSaved) { $aContext[] = array( "ICON" => "btn_delete", "TEXT" => GetMessage("MAIN_ADMIN_MENU_DELETE"), "LINK" => "javascript:if(confirm('" . GetMessage("SUP_CONFIRM_DEL_MESSAGE") . "'))window.location='" . self::LIST_URL . "?lang=" . LANG . "&action=delete&ID=" . self::$timeTableFields->ID . "&" . bitrix_sessid_get() . urlencode(GetFilterParams("filter_", false)) . "';", ); } if(self::SHOW_FORM_SETTINGS) { $link = DeleteParam(array("mode")); $link = $APPLICATION->GetCurPage() . "?mode=settings".($link <> "" ? "&" . $link : ""); $aContext[] = array( "TEXT" => GetMessage("SUP_FORM_SETTINGS"), "TITLE" => GetMessage("SUP_FORM_SETTINGS_EX"), "LINK" => "javascript:". self::$objCAdminForm->GetName() . ".ShowSettings('" . urlencode($link) . "')", "ICON" => "btn_settings", ); } $context = new CAdminContextMenu($aContext); $context->Show(); } static function Show() { global $USER_FIELD_MANAGER, $APPLICATION; if(self::ShowErrors()) return; self::ShowMenu(); self::$objCAdminForm->BeginEpilogContent(); echo bitrix_sessid_post(); GetFilterHiddens("filter_"); echo ' '; self::$objCAdminForm->EndEpilogContent(); self::$objCAdminForm->Begin(); self::$objCAdminForm->BeginNextFormTab(); Tab1(self::$objCAdminForm); self::$objCAdminForm->BeginNextFormTab(); Tab2(self::$objCAdminForm, self::ObjInArrShedule()); if(self::SHOW_USER_FIELDS) { self::$objCAdminForm->BeginNextFormTab(); self::$objCAdminForm->BeginCustomField("USER_FIELDS", GetMessage("SUP_ADMIN_USER_FIELDS"), false); $USER_FIELD_MANAGER->EditFormShowTab("LEARN_ATTEMPT", self::$isErrors, self::$timeTableFields->ID); self::$objCAdminForm->EndCustomField("USER_FIELDS"); } self::$objCAdminForm->Buttons(Array("back_url" => "ticket_timetable_list.php?lang=" . LANG.GetFilterParams("filter_", false))); self::$objCAdminForm->arParams["FORM_ACTION"] = $APPLICATION->GetCurPage() . "?lang=" . LANG . GetFilterParams("filter_"); self::$objCAdminForm->Show(); } static function TimeToStr($t) { if($t == 0) return self::DEFAULT_TIME; $m = intval(fmod ($t, 60)); $h = ($t - $m) / 60; return date("H:i", mktime($h, $m, 0, 1, 1, 2000)); } static function StrToTime($t) { //echo $t; $a = explode(":", $t); $res = (isset($a[0]) ? intval($a[0]) * 60 : 0); $res += (isset($a[1]) ? intval($a[1]) : 0); return $res; } static function ArrSheduleInObj($arr) { /* array["ArrShedule"] = array( 0 => array( OPEN_TIME => "CUSTOM", //CUSTOM_TIME_NUM => 1 (0,1) CUSTOM_TIME => array( 0 => array( MINUTE_FROM => "11:32" MINUTE_TILL => "12:32" ) ) ), 6 => ... ) */ self::$postTimeTableSheduleFields->RemoveExistingRows(); $arrTTS = array(); foreach($arr as $DateWeekday => $arDay) { if(!isset($arDay["OPEN_TIME"]) || $arDay["OPEN_TIME"] == '') continue; if($arDay["OPEN_TIME"] == "CUSTOM" && !(isset($arDay["CUSTOM_TIME"]) && is_array($arDay["CUSTOM_TIME"]) && count($arDay["CUSTOM_TIME"]) > 0)) continue; $arrTTS["TIMETABLE_ID"] = self::$id; $arrTTS["WEEKDAY_NUMBER"] = $DateWeekday; $arrTTS["OPEN_TIME"] = $arDay["OPEN_TIME"]; if($arDay["OPEN_TIME"] == "CUSTOM") { foreach($arDay["CUSTOM_TIME"] as $ar) { $presMF = (isset($ar["MINUTE_FROM"]) && $ar["MINUTE_FROM"] <> ''); $presMT = (isset($ar["MINUTE_TILL"]) && $ar["MINUTE_TILL"] <> ''); if($presMF || $presMT) { $minute_from = self::StrToTime(($presMF ? $ar["MINUTE_FROM"] : "00:00")); $minute_till = self::StrToTime(($presMT ? $ar["MINUTE_TILL"] : "23:59")); self::$postTimeTableSheduleFields->AddRow(); self::$postTimeTableSheduleFields->FromArray($arrTTS); self::$postTimeTableSheduleFields->MINUTE_FROM = min($minute_from, $minute_till); self::$postTimeTableSheduleFields->MINUTE_TILL = max($minute_from, $minute_till); } } } else { self::$postTimeTableSheduleFields->AddRow(); self::$postTimeTableSheduleFields->FromArray($arrTTS); } } } static function ObjInArrShedule() { /* ArrShedule = array( 0 => array( OPEN_TIME => "CUSTOM", //CUSTOM_TIME_NUM => 1 (0,1) CUSTOM_TIME => array( 0 => array( MINUTE_FROM => "11:32" MINUTE_TILL => "12:32" ) ) ), 6 => ... ) */ $res = array(); self::$timeTableSheduleFields->SortRow("WEEKDAY_NUMBER,MINUTE_FROM"); self::$timeTableSheduleFields->ResetNext(); while(self::$timeTableSheduleFields->Next()) { $res[self::$timeTableSheduleFields->WEEKDAY_NUMBER]["OPEN_TIME"] = self::$timeTableSheduleFields->OPEN_TIME; $res[self::$timeTableSheduleFields->WEEKDAY_NUMBER]["CUSTOM_TIME"][] = array("MINUTE_FROM" => self::TimeToStr(self::$timeTableSheduleFields->MINUTE_FROM), "MINUTE_TILL" => self::TimeToStr(self::$timeTableSheduleFields->MINUTE_TILL)); } // дополняем для покза for($i=0; $i<=6; $i++) { if(!isset($res[$i]) || !is_array($res[$i]) || (count($res[$i]) <= 0)) { $res[$i] = array("OPEN_TIME" => "24H"); } if(!isset($res[$i]["CUSTOM_TIME"]) || !is_array($res[$i]["CUSTOM_TIME"]) || (count($res[$i]["CUSTOM_TIME"]) <= 0)) { $res[$i]["CUSTOM_TIME"] = array(); } $c = self::DEFAULT_TIME_INPUT_ROW - count($res[$i]["CUSTOM_TIME"]); for($j = 0; $j < $c; $j++) $res[$i]["CUSTOM_TIME"][] = array("MINUTE_FROM" => self::DEFAULT_TIME, "MINUTE_TILL" => self::DEFAULT_TIME); } return $res; } /*static function ShowClock($arrREQ, $jsonON = false) { global $APPLICATION; if(!isset($arrREQ["CClockAJAXData"]) || !is_array($arrREQ["CClockAJAXData"]) || (count($arrREQ["CClockAJAXData"]) <= 0) || !CSupportTools::array_keys_exists("i,j", $arrREQ["CClockAJAXData"])) { return false; } $arr = $arrREQ["CClockAJAXData"]; $i = intval($arr["i"]); $j = intval($arr["j"]); $val = array( 1 => (isset($arr["ValF"]) && strlen($arr["ValF"]) > 0) ? CUtil::JSEscape($arr["ValF"]) : self::DEFAULT_TIME, 2 => (isset($arr["ValT"]) && strlen($arr["ValT"]) > 0) ? CUtil::JSEscape($arr["ValT"]) : self::DEFAULT_TIME, ); $ft = array( 1 => "FROM", 2 => "TILL", ); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools/clock.php"); $clock = array(); for($k = 1; $k < 3; $k++) { ob_start(); CClock::Show( array( 'inputId' => ("MINUTE_" . $ft[$k] . "_" .$i . "_" . $j), 'inputName' => "ArrShedule[$i][CUSTOM_TIME][$j][MINUTE_" . $ft[$k] . "]", 'view' => "label", //"inline","label","select", 'showIcon' => true, 'initTime' => $val[$k], 'am_pm_mode' => false, //'step' => 5 ) ); $clock[$k] = ob_get_contents(); ob_end_clean(); } if($jsonON) { $res = array( $clock[1], ' - ', $clock[2], '' . GetMessage(' ); if (ToUpper(SITE_CHARSET) !== 'UTF-8') { $res0 = array(); foreach($res as $k => $v) { $res0[$k] = $APPLICATION->ConvertCharset($v, SITE_CHARSET, 'utf-8'); } $res = $res0; } $res = json_encode($res); } else { $res = ' ' . $clock[1] . '  -  ' . $clock[2] . ' ' . GetMessage( '; } return $res; }*/ } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/support/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/support/prolog.php"); IncludeModuleLangFile(__FILE__); CSupportPage::DoActions(); if(CSupportPage::$needShowInterface) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); CSupportPage::Show(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); } ?>