| Current Path : /var/www/homesaver/www/bitrix/modules/ram.calc/admin/ |
| Current File : /var/www/homesaver/www/bitrix/modules/ram.calc/admin/edit.php |
<?
use Bitrix\Main;
use Bitrix\Main\Loader;
use Bitrix\Main\Entity;
use Bitrix\Main\Type;
use Bitrix\User;
use Bitrix\Highloadblock;
use \Bitrix\Main\Localization\Loc;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
$module_id = "ram.calc";
$MODULE_RIGHT = $APPLICATION->GetGroupRight($module_id);
if ($MODULE_RIGHT === "D") $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
Loader::includeModule($module_id);
IncludeModuleLangFile(__FILE__);
CJSCore::Init(Array("jquery"));
$APPLICATION->SetAdditionalCSS("/bitrix/panel/ram.calc/admin.css");
$APPLICATION->AddHeadScript("/bitrix/panel/ram.calc/jquery-ui.js");
$APPLICATION->AddHeadScript("/bitrix/panel/ram.calc/admin.js");
CJSCore::RegisterExt("ram_calc", Array("lang" => "/bitrix/modules/".$module_id."/lang/".LANGUAGE_ID."/admin/edit.php"));
CJSCore::Init(Array("ram_calc"));
$context = Bitrix\Main\Application::getInstance()->getContext();
$request = $context->getRequest();
$ID = intval($ID);
$SAVE = $request["save"] ? true : false;
$APPLY = $request["apply"] ? true : false;
$COPY = $request["action"] === "copy" ? true : false;
$DELETE = $request["action"] === "delete" ? true : false;
if ($request->isPost() && $MODULE_RIGHT === "W")
{
$SERVICE = $_POST["SERVICE"];
$PROPERTY = $_POST["PROPERTY"];
if (!isset($SERVICE["CALCULATIONS"])) $SERVICE["CALCULATIONS"] = Array();
if (!isset($SERVICE["CONDITIONS"])) $SERVICE["CONDITIONS"] = Array();
$ERRORS = Array();
if (!strlen($SERVICE["NAME"])) $ERRORS[] = Loc::getMessage("RAM_CALC_EMPTY_NAME");
if (empty($ERRORS))
{
if ($ID && !$COPY)
{
$RESULT = \Ram\Calc\ServiceTable::update($ID, $SERVICE);
if (!$RESULT->isSuccess())
{
$ERRORS = $RESULT->getErrors();
}
if (empty($ERRORS))
{
$arSavedProperty = Array();
$dbProperties = \Ram\Calc\PropertyTable::getList(Array("filter" => Array("=SERVICE_ID" => $ID)));
while ($arProperty = $dbProperties -> fetch())
{
$arSavedProperty[$arProperty["ID"]] = $arProperty["ID"];
}
if (!empty($PROPERTY))
{
foreach ($PROPERTY as $PROPERTY_ITEM)
{
if (isset($PROPERTY_ITEM["ID"]))
{
\Ram\Calc\PropertyTable::update($PROPERTY_ITEM["ID"], $PROPERTY_ITEM);
unset($arSavedProperty[$PROPERTY_ITEM["ID"]]);
}
else
{
$PROPERTY_ITEM["SERVICE_ID"] = $ID;
\Ram\Calc\PropertyTable::add($PROPERTY_ITEM);
}
if ($PROPERTY_ITEM["PROPERTIES"]["TYPE"] === "list")
{
if ($PROPERTY_ITEM["PROPERTIES"]["SOURCE"] === "highload" && $PROPERTY_ITEM["PROPERTIES"]["SOURCE_HIGHLOAD"])
{
\CRamCalc::AddHighloadEvent($PROPERTY_ITEM["PROPERTIES"]["SOURCE_HIGHLOAD"]);
}
else if (substr($PROPERTY_ITEM["PROPERTIES"]["SOURCE"], 0, 9) === "PROPERTY_")
{
list($prop, $propID) = explode("_", $PROPERTY_ITEM["PROPERTIES"]["SOURCE"]);
$dbHighloadProperty = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE" => "Y", "ID" => $propID));
if ($arHighloadProperty = $dbHighloadProperty->GetNext())
{
Loader::includeModule("highloadblock");
$dbHLBlock = \Bitrix\Highloadblock\HighloadBlockTable::GetList(Array("filter" => Array("TABLE_NAME" => $arHighloadProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"])));
$arHLBlock = $dbHLBlock -> Fetch();
\CRamCalc::AddHighloadEvent($arHLBlock["ID"]);
}
}
}
}
}
if (!empty($arSavedProperty))
{
foreach ($arSavedProperty as $propertyID => $arProperty)
{
\Ram\Calc\PropertyTable::delete($propertyID);
}
}
}
}
else if (($ID && $COPY) || !$ID)
{
$RESULT = \Ram\Calc\ServiceTable::add($SERVICE);
$ID = $RESULT->getId();
if (!$RESULT->isSuccess())
{
$ERRORS = $RESULT->getErrors();
}
if (empty($ERRORS) && !empty($PROPERTY))
{
foreach ($PROPERTY as $PROPERTY_ITEM)
{
$PROPERTY_ITEM["SERVICE_ID"] = $ID;
\Ram\Calc\PropertyTable::add($PROPERTY_ITEM);
if ($PROPERTY_ITEM["PROPERTIES"]["SOURCE"] === "highload" && $PROPERTY_ITEM["PROPERTIES"]["SOURCE_HIGHLOAD"])
{
\CRamCalc::AddHighloadEvent($PROPERTY_ITEM["PROPERTIES"]["SOURCE_HIGHLOAD"]);
}
else if (substr($PROPERTY_ITEM["PROPERTIES"]["SOURCE"], 0, 9) === "PROPERTY_")
{
list($prop, $propID) = explode("_", $PROPERTY_ITEM["PROPERTIES"]["SOURCE"]);
$dbHighloadProperty = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE" => "Y", "ID" => $propID));
if ($arHighloadProperty = $dbHighloadProperty->GetNext())
{
Loader::includeModule("highloadblock");
$dbHLBlock = \Bitrix\Highloadblock\HighloadBlockTable::GetList(Array("filter" => Array("TABLE_NAME" => $arHighloadProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"])));
$arHLBlock = $dbHLBlock -> Fetch();
\CRamCalc::AddHighloadEvent($arHLBlock["ID"]);
}
}
}
}
}
if (empty($ERRORS))
{
if ($SERVICE["PROPERTIES"]["SOURCE"] === "highload" && $SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD"])
{
\CRamCalc::AddHighloadEvent($SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD"]);
}
}
}
if (!empty($ERRORS))
{
CAdminMessage::ShowMessage(implode("<br/>", $ERRORS));
}
else
{
if (defined("BX_COMP_MANAGED_CACHE")) $GLOBALS["CACHE_MANAGER"]->ClearByTag("ram.calc_".$ID);
if ($SAVE) LocalRedirect("ram.calc_list.php?lang=".LANGUAGE_ID);
else LocalRedirect("ram.calc_edit.php?ID=".$ID."&lang=".LANGUAGE_ID."&RamCalcTabControl_active_tab=".$request["RamCalcTabControl_active_tab"]);
}
}
else
{
if ($ID && $DELETE && $MODULE_RIGHT === "W")
{
//delete
$dbProperties = \Ram\Calc\PropertyTable::getList(Array("filter" => Array("=SERVICE_ID" => $ID)));
while ($arProperty = $dbProperties -> fetch())
{
\Ram\Calc\PropertyTable::delete($arProperty["ID"]);
}
\Ram\Calc\ServiceTable::delete($ID);
LocalRedirect("ram.calc_list.php?lang=".LANGUAGE_ID);
}
else if ($ID && $COPY && $MODULE_RIGHT === "W")
{
//copy
$SERVICE = \Ram\Calc\ServiceTable::getRowById($ID);
$PROPERTY = Array();
$dbProperties = \Ram\Calc\PropertyTable::getList(Array("filter" => Array("=SERVICE_ID" => $ID)));
while ($arProperty = $dbProperties -> fetch())
{
unset($arProperty["ID"]);
$PROPERTY[] = $arProperty;
}
$APPLICATION->SetTitle(Loc::getMessage("RAM_CALC_COPY_CALCULATOR")." \"".$SERVICE["NAME"]."\"");
$SERVICE["NAME"] .= " (".Loc::getMessage("RAM_CALC_COPY").")";
}
else if ($ID)
{
//edit
$SERVICE = \Ram\Calc\ServiceTable::getRowById($ID);
$PROPERTY = Array();
$dbProperties = \Ram\Calc\PropertyTable::getList(Array("filter" => Array("=SERVICE_ID" => $ID)));
while ($arProperty = $dbProperties -> fetch())
{
$PROPERTY[] = $arProperty;
}
$APPLICATION->SetTitle(Loc::getMessage("RAM_CALC_EDIT_CALCULATOR")." \"".$SERVICE["NAME"]."\"");
}
else
{
//create
$SERVICE = Array(
"PROPERTIES" => Array(),
"CALCULATIONS" => Array(),
"ACTIVE" => "Y"
);
$PROPERTY = Array();
$APPLICATION->SetTitle(Loc::getMessage("RAM_CALC_CREATE_CALCULATOR"));
}
}
$arTabs = Array(
Array("DIV" => "base", "TAB" => Loc::getMessage("RAM_CALC_BASE"), "TITLE" => Loc::getMessage("RAM_CALC_BASE_HINT")),
Array("DIV" => "properties", "TAB" => Loc::getMessage("RAM_CALC_PROPERTIES_TAB"), "TITLE" => Loc::getMessage("RAM_CALC_PROPERTIES_TAB_HINT")),
Array("DIV" => "conditions", "TAB" => Loc::getMessage("RAM_CALC_CONDITIONS"), "TITLE" => Loc::getMessage("RAM_CALC_CONDITIONS_HINT")),
Array("DIV" => "calculations", "TAB" => Loc::getMessage("RAM_CALC_CALCULATIONS"), "TITLE" => Loc::getMessage("RAM_CALC_CALCULATIONS_HINT")),
);
$tabControl = new \CAdminTabControl("RamCalcTabControl", $arTabs);
?><form method="POST" action="<?=$APPLICATION->GetCurPageParam()?>" class="ram-calc" enctype="multipart/form-data"><?=bitrix_sessid_post()?><?
$tabControl->Begin();
$tabControl->BeginNextTab();
$arIblocks = \CRamCalc::IblockList();
$arHighloads = \CRamCalc::HighloadList();
//base start
$arFields = Array();
if ($ID && !$COPY)
{
$arField = \CRamCalcFields::AdminField("SERVICE_ID");
$arField["VALUE"] = $SERVICE["ID"];
$arFields[] = $arField;
}
$arField = \CRamCalcFields::AdminField("SERVICE_ACTIVE");
$arField["CHECKED"] = $SERVICE["ACTIVE"] === "Y";
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_NAME");
$arField["VALUE"] = $SERVICE["NAME"];
$arFields[] = $arField;
if (!$SERVICE["PROPERTIES"]["SOURCE"]) $SERVICE["PROPERTIES"]["SOURCE"] = "manual";
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE"];
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_IBLOCK");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_IBLOCK"];
if (!empty($arIblocks))
{
foreach ($arIblocks as $arIblockTypeCode => $arIblockType)
{
$arField["VALUES"][] = Array("VALUE" => "", "OPTGROUP" => "Y", "TITLE" => $arIblockType["NAME"]);
foreach ($arIblockType["IBLOCKS"] as $arIblock)
{
$arField["VALUES"][] = Array("VALUE" => $arIblock["ID"], "TITLE" => "[".$arIblock["ID"]."] ".$arIblock["NAME"]);
}
}
}
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "iblock" ? false : true;
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_IBLOCK_EXAMPLE");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_IBLOCK_EXAMPLE"];
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_IBLOCK_EXAMPLE",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["SELECTED_ITEM_TEXT"] = $arFieldData["SELECTED_ITEM_TEXT"];
$arField["IBLOCK_ID"] = $SERVICE["PROPERTIES"]["SOURCE_IBLOCK"];
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "iblock" ? false : true;
$arFields[] = $arField;
if (!$SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD"]) $SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD"] = $arHighloads[0]["ID"];
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_HIGHLOAD");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD"];
if (!empty($arHighloads))
{
foreach ($arHighloads as $arHighload)
{
$arField["VALUES"][] = Array("VALUE" => $arHighload["ID"], "TITLE" => "[".$arHighload["ID"]."] ".$arHighload["NAME"]);
}
}
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "highload" ? false : true;
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_HIGHLOAD_EXAMPLE");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_HIGHLOAD_EXAMPLE"];
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "highload" ? false : true;
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_HIGHLOAD_EXAMPLE",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["VALUES"] = $arFieldData["VALUES"];
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_NAME_FROM");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_NAME_FROM"];
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "manual" ? true : false;
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_NAME_FROM",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["VALUES"] = $arFieldData["VALUES"];
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_NAME");
$arField["READONLY"] = $SERVICE["PROPERTIES"]["SOURCE"] === "manual" || $SERVICE["PROPERTIES"]["SOURCE_NAME_FROM"] === "manual" ? false : true;
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_NAME",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["VALUE"] = $arFieldData["VALUE"];
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_PRICE_FROM");
$arField["VALUE"] = $SERVICE["PROPERTIES"]["SOURCE_PRICE_FROM"];
$arField["HIDDEN"] = $SERVICE["PROPERTIES"]["SOURCE"] === "manual" ? true : false;
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_PRICE_FROM",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["VALUES"] = $arFieldData["VALUES"];
$arFields[] = $arField;
$arField = \CRamCalcFields::AdminField("SERVICE_PROPERTIES_SOURCE_PRICE");
$arField["READONLY"] = $SERVICE["PROPERTIES"]["SOURCE"] === "manual" || $SERVICE["PROPERTIES"]["SOURCE_PRICE_FROM"] === "manual" ? false : true;
$arFieldData = \CRamCalc::AdminFieldUpdate
(
Array
(
"ID" => "SERVICE_PROPERTIES_SOURCE_PRICE",
"GET_DATA" => true,
"SERVICE" => $SERVICE,
)
);
$arField["VALUE"] = $arFieldData["VALUE"];
$arFields[] = $arField;
if (!empty($arFields))
{
foreach ($arFields as $arField)
{
\CRamCalc::AdminField($arField);
}
}
$tabControl->BeginNextTab(); //properties
?><tr><td class="ram-calc__properties" colspan="2"><?
if (!empty($PROPERTY))
{
usort($PROPERTY, function($a, $b){return $a["PROPERTIES"]["SORT"] - $b["PROPERTIES"]["SORT"];});
foreach ($PROPERTY as $k => $arProperty)
{
$arProperty["PROPERTIES"]["SORT"] = $k;
if (!$arProperty["ID"] && !$arProperty["PROPERTIES"]["CODE"]) $arProperty["PROPERTIES"]["CODE"] = $k + 1;
$arPropertyFields = Array
(
"INDEX" => $k,
"SERVICE" => $SERVICE,
"PROPERTY" => $arProperty,
"IBLOCKS" => $arIblocks,
"HIGHLOADS" => $arHighloads,
);
\CRamCalc::AdminProperty($arPropertyFields);
}
}
?><script type="text/javascript">$(document).ready(function(){CRamCalc.UpdateFormulaProperties();})</script><?
?><a href="#" onclick="return CRamCalc.AddProperty(this);" class="adm-btn adm-btn-green adm-btn-add"><?=Loc::getMessage("RAM_CALC_ADD_PROPERTY")?></a><?
?></td></tr><? //properties end
$tabControl->BeginNextTab(); //conditions
?><tr><td class="ram-calc__conditions" colspan="2"><?
if (!empty($SERVICE["CONDITIONS"]))
{
foreach ($SERVICE["CONDITIONS"] as $k => $arCondition)
{
\CRamCalc::AdminCondition
(
Array
(
"INDEX" => $k,
"CONDITION" => $arCondition,
)
);
}
}
?><script type="text/javascript">$(document).ready(function(){CRamCalc.DisplayConditionActions();})</script><?
?><a href="#" onclick="return CRamCalc.AddCondition(this);" class="adm-btn adm-btn-green adm-btn-add"><?=Loc::getMessage("RAM_CALC_ADD_CONDITION")?></a><?
?></td></tr><? //conditions end
$tabControl->BeginNextTab(); //calculations
?><tr><td class="ram-calc__calculations" colspan="2"><?
if (!empty($SERVICE["CALCULATIONS"]))
{
foreach ($SERVICE["CALCULATIONS"] as $k => $arCalculation)
{
if (!isset($arCalculation["CODE"])) $arCalculation["CODE"] = $k + 1;
\CRamCalc::AdminCalculation
(
Array
(
"INDEX" => $k,
"CALCULATION" => $arCalculation
)
);
}
}
?><a href="#" onclick="return CRamCalc.AddCalculation(this);" class="adm-btn adm-btn-green adm-btn-add"><?=Loc::getMessage("RAM_CALC_ADD_CALCULATION")?></a><?
?></td></tr><? //calculations end
if ($MODULE_RIGHT === "W")
{
$tabControl->Buttons(Array("back_url" => "ram.calc_list.php?lang=".LANGUAGE_ID));
}
else
{
$tabControl->Buttons(Array("btnSave" => false, "btnApply" => false, "back_url" => "ram.calc_list.php?lang=".LANGUAGE_ID));
}
$tabControl->End();
?></form><?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>