GetGroupRight("sale"); if ($saleModulePermissions < "W") $APPLICATION->AuthForm(Loc::getMessage("SALE_DSE_ACCESS_DENIED")); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/prolog.php"); $ID = isset($_REQUEST["ID"]) ? intval($_REQUEST["ID"]) : 0; $strError = ""; $fields = array(); $tabControlName = "tabControl"; $isItSavingProcess = ($_SERVER['REQUEST_METHOD'] == "POST" && (strlen($_POST["save"]) > 0 || strlen($_POST["apply"]) > 0)) ? true : false; $isItReloadingProcess = ($_SERVER['REQUEST_METHOD'] == "POST" && (!isset($_POST["save"]) && !isset($_POST["apply"]))) ? true : false; $isItViewProcess = $_SERVER['REQUEST_METHOD'] != "POST"; /* * Process form fields received via POST */ if (($isItReloadingProcess || $isItSavingProcess) && $saleModulePermissions == "W" && check_bitrix_sessid()) { if(isset($_POST["ID"])) $fields["ID"] = intval($_POST["ID"]); if(isset($_POST["CODE"])) $fields["CODE"] = trim($_POST["CODE"]); if(isset($_POST["SORT"])) $fields["SORT"] = intval($_POST["SORT"]); if(isset($_POST["NAME"])) $fields["NAME"] = trim($_POST["NAME"]); if(isset($_POST["CONFIG"])) $fields["CONFIG"] = $_POST["CONFIG"]; if(isset($_POST["CURRENCY"])) $fields["CURRENCY"] = trim($_POST["CURRENCY"]); if(isset($_POST["PARENT_ID"])) $fields["PARENT_ID"] = intval($_POST["PARENT_ID"]); if(isset($_POST["CLASS_NAME"])) $fields["CLASS_NAME"] = trim($_POST["CLASS_NAME"]); if(isset($_POST["DESCRIPTION"])) $fields["DESCRIPTION"] = trim($_POST["DESCRIPTION"]); if(isset($_POST["CHANGED_FIELDS"]) && is_array($_POST["CHANGED_FIELDS"])) $changedFields = $_POST["CHANGED_FIELDS"]; else $changedFields = array(); if(isset($_POST["ACTIVE"]) && $_POST["ACTIVE"] == "Y") $fields["ACTIVE"] = "Y"; else $fields["ACTIVE"] = "N"; if(array_key_exists("LOGOTIP", $_FILES) && $_FILES["LOGOTIP"]["error"] == 0) { $fields["LOGOTIP"] = $_FILES["LOGOTIP"]; $fields["LOGOTIP"]["del"] = trim($_POST["LOGOTIP_del"]); $fields["LOGOTIP"]["MODULE_ID"] = "sale"; CFile::SaveForDB($fields, "LOGOTIP", "sale/delivery/logotip"); } elseif(isset($_POST["LOGOTIP_FILE_ID"]) && intval($_POST["LOGOTIP_FILE_ID"])) { $fields["LOGOTIP"] = intval($_POST["LOGOTIP_FILE_ID"]); } if ($isItSavingProcess) { if(strlen($fields["NAME"]) <=0 ) $strError .= Loc::getMessage("SALE_DSE_ERROR_NO_NAME")."
"; if(strlen($fields["CLASS_NAME"]) <=0 ) $strError .= Loc::getMessage("SALE_DSE_ERROR_NO_CLASS_NAME")."
"; if($strError == '') { try { $service = Services\Manager::createServiceObject($fields); $fields = $service->prepareFieldsForSaving($fields); } catch(\Bitrix\Main\SystemException $e) { $strError = $e->getMessage(); } if($strError == '') { if(isset($fields["PARENT_ID"]) && $fields["PARENT_ID"] == "new" && strlen($_POST["GROUP_NAME"]) > 0) { $fields["PARENT_ID"] = Services\Manager::getGroupId($_POST["GROUP_NAME"]); if($fields["PARENT_ID"] <=0) $strError .= Loc::getMessage("SALE_DSE_ERROR_GROUP_SAVE")."
"; } if ($ID > 0) { $res = \Bitrix\Sale\Delivery\Services\Table::update($ID, $fields); if ($res->isSuccess()) { // update some fields in children if need if(!empty($changedFields)) { $fieldsList = array(); if(in_array('ACTIVE', $changedFields)) { if($fields['ACTIVE'] == 'Y') $fieldsList['ACTIVE'] = 'Y'; else $fieldsList['ACTIVE'] = 'N'; } if(!empty($fieldsList)) { \Bitrix\Sale\Delivery\Services\Table::setChildrenFieldsValues( $ID, $fieldsList ); } } } else { $strError .= Loc::getMessage("SALE_DSE_ERROR_EDIT_DELIVERY")."
".implode("
",$res->getErrorMessages()); } } else { $res = \Bitrix\Sale\Delivery\Services\Table::add($fields); if (!$res->isSuccess()) { $strError .= Loc::getMessage("SALE_DSE_ERROR_ADD_DELIVERY")."
".implode("
",$res->getErrorMessages()); } else { $ID = $res->getId(); Services\Manager::onAfterAdd($ID, $fields); } } if($ID > 0) { //stores unset($res); if(isset($_POST["STORES_SHOW"]) && $_POST["STORES_SHOW"] == "Y" && isset($_POST["STORES"]["PARAMS"]["STORES"])) { $res = ExtraServices\Manager::saveStores( $ID, Bitrix\Sale\Delivery\ExtraServices\Store::getStoresIdsFromParams( $_POST["STORES"]["PARAMS"] ) ); } else { $storesFields = ExtraServices\Manager::getStoresFields($ID); if(!empty($storesFields)) $res = Delivery\ExtraServices\Table::delete($storesFields["ID"]); } if($res && !$res->isSuccess()) $strError .= implode("
\n", $res->getErrorMessages()); } } } if(strlen($strError) <= 0) { if (strlen($_POST["apply"]) > 0) { LocalRedirect($APPLICATION->GetCurPageParam( "ID=".$ID, array("ID")).(isset($_REQUEST[$tabControlName."_active_tab"]) ? "&".$tabControlName."_active_tab=".$_REQUEST[$tabControlName."_active_tab"] : "" )); } elseif(strlen($_POST["save"]) > 0) { LocalRedirect((isset($_REQUEST["back_url"]) ? $_REQUEST["back_url"] : "sale_delivery_service_list.php?lang=".LANG."&filter_group=".$fields["PARENT_ID"])); } } } } /* * If errors or !$_POST * Fill form fields by data from table */ if(empty($fields) && $ID <= 0) { $fields["PARENT_ID"] = $_REQUEST["PARENT_ID"] ? $_REQUEST["PARENT_ID"] : 0; $fields["CLASS_NAME"] = $_REQUEST["CLASS_NAME"] ? $_REQUEST["CLASS_NAME"] : ""; $fields["CURRENCY"] = COption::GetOptionString("sale", "default_currency", "RUB"); $fields["RIGHTS"] = "YYY"; //Admin Manager Client if($fields["CLASS_NAME"] == '\Bitrix\Sale\Delivery\Services\Group') $fields["ACTIVE"] = "Y"; } $serviceConfig = array(); $canHasProfiles = false; $showRestrictions = true; $showExtraServices = false; $parentService = null; $showFieldsList = \Bitrix\Sale\Delivery\Services\Table::getMap(); /* saving or updating Extra service & restrictions */ if($ID > 0 && ($_SERVER['REQUEST_METHOD'] != "POST" || $isItSavingProcess)) { $dbRes = \Bitrix\Sale\Delivery\Services\Table::getById($ID); if(!$fields = $dbRes->fetch()) $strError .= str_replace("#ID#", $ID, Loc::getMessage("SALE_DSE_ERROR_ID"))."
"; } /* If action is copying */ if($_REQUEST["action"] == "copy") { $ID = 0; unset($fields["ID"]); } elseif($_REQUEST["action"] == "profile_delete") { $idProf = isset($_REQUEST["ID_PROF"]) ? intval($_REQUEST["ID_PROF"]) : 0; if($idProf > 0) { $res = \Bitrix\Sale\Delivery\Services\Table::delete($idProf); if(!$res->isSuccess()) $strError .= implode("
\n", $res->getErrorMessages())."
"; } else { $strError .= Loc::getMessage("SALE_DSE_PROFILE_DEL_ERROR", array("#ID#" => $idProf))."
"; } } /* Ask parent service witch class_names for children are allowed */ if(intval($fields["PARENT_ID"]) > 0) { $parentService = Services\Manager::getService($fields["PARENT_ID"]); $classNamesList = $parentService->getChildrenClassNames(); } else /* get all available */ { $classNamesList = Services\Manager::getHandlersClassNames(); $classesToExclude = array( '\Bitrix\Sale\Delivery\Services\AutomaticProfile', '\Bitrix\Sale\Delivery\Services\Group' ); foreach($classesToExclude as $class) { $key = array_search($class, $classNamesList); if($key !== false) unset($classNamesList[$key]); } } /* if we have only one class - let's fix it */ if(empty($fields["CLASS_NAME"]) && count($classNamesList) == 1) $fields["CLASS_NAME"] = current($classNamesList); $service = null; if(isset($fields["CLASS_NAME"]) && strlen($fields["CLASS_NAME"]) > 0) { /* We must convert handler config from post as it was taken from database */ if($isItSavingProcess && strlen($strError) > 0) { try { $service = Services\Manager::createServiceObject($fields); $fields = $service->prepareFieldsForSaving($fields); } catch(\Bitrix\Main\SystemException $e){} } $service = Services\Manager::createServiceObject($fields); $fields = $service->prepareFieldsForUsing($fields); if($service) { $serviceConfig = $service->getConfig(); $showRestrictions = $service->whetherAdminRestrictionsShow(); $showExtraServices = $service->whetherAdminExtraServicesShow(); $showFieldsList = $service->getAdminFieldsList(); $canHasProfiles = $service->canHasProfiles() && ($ID > 0); } } $serviceCurrency = $fields["CURRENCY"]; if(\Bitrix\Main\Loader::includeModule('currency')) { $currencyList = Currency\CurrencyManager::getCurrencyList(); if (isset($currencyList[$fields["CURRENCY"]])) $serviceCurrency = $currencyList[$fields["CURRENCY"]]; unset($currencyList); } $aTabs = array( array( "DIV" => "edit_main", "TAB" => Loc::getMessage("SALE_DSE_TAB_GENERAL"), "ICON" => "sale", "TITLE" => Loc::getMessage("SALE_DSE_TAB_DELIVERY_GENERAL") ) ); /* from service config */ foreach($serviceConfig as $sectionKey => $serviceSection) { $aTabs[] = array( "DIV" => "edit_".$sectionKey, "TAB" => $serviceSection["TITLE"], "ICON" => "sale", "TITLE" => $serviceSection["DESCRIPTION"] ); } if($canHasProfiles) { $aTabs[] = array( "DIV" => "edit_profiles", "TAB" => Loc::getMessage("SALE_DSE_TAB_PROFILES"), "ICON" => "sale", "TITLE" => Loc::getMessage("SALE_DSE_TAB_PROFILES_DESCR"), ); } if($service && $showRestrictions && $ID > 0) { $aTabs[] = array( "DIV" => "edit_restriction", "TAB" => Loc::getMessage("SALE_DSE_TAB_RESTRICTIONS"), "ICON" => "sale", "TITLE" => Loc::getMessage("SALE_DSE_TAB_RESTRICTIONS_DESCR") ); } if($showExtraServices && $ID > 0) { $aTabs[] = array( "DIV" => "edit_extraservices", "TAB" => Loc::getMessage("SALE_DSE_TAB_EXTRA_SERVICES"), "ICON" => "sale", "TITLE" => Loc::getMessage("SALE_DSE_TAB_EXTRA_SERVICES_DESCR"), ); } $tabControl = new CAdminTabControl("tabControl", $aTabs); /* Profiles */ if($canHasProfiles) { $sTableIDSubService = "tbl_sale_delivery_subservice"; $oSortSubService = new CAdminSorting($sTableIDSubService); $lAdminSubServices = new CAdminList($sTableIDSubService, $oSortSubService); $dbSubServicesRes = \Bitrix\Sale\Delivery\Services\Table::getList(array( "filter" => array( "PARENT_ID" => $ID ), "select" => array( "ID", "NAME", "ACTIVE", "LOGOTIP", "PARENT_ID" ), "order" => isset($_REQUEST["by"]) && isset($_REQUEST["order"]) ? array($_REQUEST["by"] => $_REQUEST["order"]) : array("NAME" => "ASC") )); $profilesList = new CAdminResult($dbSubServicesRes, $sTableIDSubService); $profilesList->NavStart(); $lAdminSubServices->NavText($profilesList->GetNavPrint("PROFILES")); $profileHeader = array( array("id"=>"ID", "content"=>"ID", "sort"=>"ID", "default"=>true), array("id"=>"NAME", "content"=>Loc::getMessage("SALE_DSE_PROF_HEAD_NAME"), "sort"=>"NAME", "default"=>true), array("id"=>"ACTIVE", "content"=>Loc::getMessage("SALE_DSE_PROF_HEAD_ACTIVE"), "sort"=>"ACTIVE", "default"=>true), array("id"=>"LOGOTIP", "content"=>Loc::getMessage("SALE_DSE_PROF_HEAD_LOGOTIP"), "sort"=>"LOGOTIP", "default"=>true) ); $lAdminSubServices->AddHeaders($profileHeader); while ($profileParams = $profilesList->NavNext(true, "f_")) { $actUrl = "sale_delivery_service_edit.php?lang=".LANG."&PARENT_ID=".$f_PARENT_ID."&ID=".$f_ID.'&'.$tabControl->ActiveTabParam()."&back_url=".urlencode($APPLICATION->GetCurPageParam()); $row =& $lAdminSubServices->AddRow($f_ID, $profileParams, $actUrl, Loc::getMessage("SALE_DSE_EDIT_DESCR")); $row->AddField("NAME", ''. ''. $f_NAME. ''. ''); $row->AddField("ID", $f_ID); $logoHtml = intval($f_LOGOTIP) > 0 ? CFile::ShowImage(CFile::GetFileArray($f_LOGOTIP), 150, 150, "border=0", "", false) : ""; $row->AddField("LOGOTIP", $logoHtml); $row->AddField("ACTIVE", (($f_ACTIVE=="Y") ? Loc::getMessage("SALE_DSE_YES") : Loc::getMessage("SALE_DSE_NO"))); $row->AddField("CLASS_NAME", $f_CLASS_NAME); $arActions = Array(); $arActions[] = array("ICON"=>"edit", "TEXT"=>Loc::getMessage("SALE_DSE_COPY"), "ACTION"=>$lAdminSubServices->ActionRedirect("sale_delivery_service_edit.php?lang=".LANG."&ID=".$f_ID."&action=copy&back_url=".urlencode($APPLICATION->GetCurPageParam())), "DEFAULT"=>true); $arActions[] = array("ICON"=>"edit", "TEXT"=>Loc::getMessage("SALE_DSE_EDIT_DESCR"), "ACTION"=>$lAdminSubServices->ActionRedirect("sale_delivery_service_edit.php?lang=".LANG."&PARENT_ID=".$f_PARENT_ID."&ID=".$f_ID."&back_url=".urlencode($APPLICATION->GetCurPageParam())), "DEFAULT"=>true); if ($saleModulePermissions >= "W") { $arActions[] = array("SEPARATOR" => true); $arActions[] = array("ICON"=>"delete", "TEXT"=>Loc::getMessage("SALE_DSE_DELETE"), "ACTION"=>"if(confirm('".Loc::getMessage('SALE_DSE_CONFIRM_DEL_PROFILE_MESSAGE')."')) ".$lAdminSubServices->ActionRedirect("sale_delivery_service_edit.php?lang=".LANG."&PARENT_ID=".$fields["PARENT_ID"]."&ID=".$ID."&action=profile_delete&ID_PROF=".$f_ID)); } $row->AddActions($arActions); } if ($saleModulePermissions == "W") { $aContext = array( array( "TEXT" => Loc::getMessage("SALE_DSE_ADD_NEW_PROFILE"), "LINK" => "sale_delivery_service_edit.php?lang=".LANG."&PARENT_ID=".$ID."&back_url=".urlencode($APPLICATION->GetCurPageParam()), "TITLE" => Loc::getMessage("SALE_DSE_ADD_NEW_PROFILE_TITLE"), "ICON" => "btn_new" ) ); $lAdminSubServices->AddAdminContextMenu($aContext, false); } if($_REQUEST["table_id"]==$sTableIDSubService) $lAdminSubServices->CheckListMode(); } /* profiles end */ Asset::getInstance()->addJs("/bitrix/js/sale/delivery.js"); if($parentService && get_class($parentService) != 'Bitrix\Sale\Delivery\Services\Group') { if($ID > 0) { $sDocTitle = str_replace( array("#NAME#", "#PARENT_NAME#"), array($fields["NAME"], $parentService->name), Loc::getMessage("SALE_DSE_EDIT_RECORD_PROFILE") ); } else { $sDocTitle = str_replace( "#PARENT_NAME#", $parentService->name, Loc::getMessage("SALE_DSE_NEW_RECORD_PROFILE") ); } } else { if($fields["CLASS_NAME"] == '\Bitrix\Sale\Delivery\Services\Group') { if($ID > 0) $sDocTitle = str_replace("#NAME#", $fields["NAME"], Loc::getMessage("SALE_DSE_EDIT_GROUP")); else $sDocTitle = Loc::getMessage("SALE_DSE_NEW_GROUP"); } else { if($ID > 0) $sDocTitle = str_replace("#NAME#", $fields["NAME"], Loc::getMessage("SALE_DSE_EDIT_RECORD")); else $sDocTitle = Loc::getMessage("SALE_DSE_NEW_RECORD"); } } $APPLICATION->SetTitle($sDocTitle); if($service && $showRestrictions && $ID > 0) { ob_start(); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/delivery_restrictions_list.php"); $restrictionsHtml = ob_get_contents(); ob_end_clean(); } else { $restrictionsHtml = ""; } if($showExtraServices && $ID > 0) { ob_start(); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/delivery_eservice_list.php"); $extraServicesHtml = ob_get_contents(); ob_end_clean(); } else { $extraServicesHtml = ""; } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); \Bitrix\Sale\Internals\Input\Manager::initJs(); ?>