Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/ram.calc/admin/
Upload File :
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");
?>