Your IP : 3.142.43.53


Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/components/bitrix/lists.field.edit/
Upload File :
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/components/bitrix/lists.field.edit/component.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

if(!CModule::IncludeModule('lists'))
{
	ShowError(GetMessage("CC_BLFE_MODULE_NOT_INSTALLED"));
	return;
}

$lists_perm = CListPermissions::CheckAccess(
	$USER,
	$arParams["~IBLOCK_TYPE_ID"],
	intval($arParams["~IBLOCK_ID"]),
	$arParams["~SOCNET_GROUP_ID"]
);
if($lists_perm < 0)
{
	switch($lists_perm)
	{
	case CListPermissions::WRONG_IBLOCK_TYPE:
		ShowError(GetMessage("CC_BLFE_WRONG_IBLOCK_TYPE"));
		return;
	case CListPermissions::WRONG_IBLOCK:
		ShowError(GetMessage("CC_BLFE_WRONG_IBLOCK"));
		return;
	default:
		ShowError(GetMessage("CC_BLFE_UNKNOWN_ERROR"));
		return;
	}
}
elseif($lists_perm < CListPermissions::IS_ADMIN)
{
	ShowError(GetMessage("CC_BLFE_ACCESS_DENIED"));
	return;
}

$arParams["CAN_EDIT"] = $lists_perm >= CListPermissions::IS_ADMIN;
$arIBlock = CIBlock::GetArrayByID(intval($arParams["~IBLOCK_ID"]));
$arResult["~IBLOCK"] = $arIBlock;
$arResult["IBLOCK"] = htmlspecialcharsex($arIBlock);
$arResult["IBLOCK_ID"] = $arIBlock["ID"];

if(isset($arParams["SOCNET_GROUP_ID"]) && $arParams["SOCNET_GROUP_ID"] > 0)
	$arParams["SOCNET_GROUP_ID"] = intval($arParams["SOCNET_GROUP_ID"]);
else
	$arParams["SOCNET_GROUP_ID"] = "";

$arResult["GRID_ID"] = "lists_fields";
$arResult["FORM_ID"] = "lists_field_edit";

$arResult["~LISTS_URL"] = str_replace(
	array("#group_id#"),
	array($arParams["SOCNET_GROUP_ID"]),
	$arParams["~LISTS_URL"]
);
$arResult["LISTS_URL"] = htmlspecialchars($arResult["~LISTS_URL"]);

$arResult["~LIST_URL"] = CHTTP::urlAddParams(str_replace(
	array("#list_id#", "#section_id#", "#group_id#"),
	array($arResult["IBLOCK_ID"], 0, $arParams["SOCNET_GROUP_ID"]),
	$arParams["~LIST_URL"]
), array("list_section_id" => ""));
$arResult["LIST_URL"] = htmlspecialchars($arResult["~LIST_URL"]);

$arResult["~LIST_EDIT_URL"] = str_replace(
	array("#list_id#", "#group_id#"),
	array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]),
	$arParams["~LIST_EDIT_URL"]
);
$arResult["LIST_EDIT_URL"] = htmlspecialchars($arResult["~LIST_EDIT_URL"]);

$arResult["~LIST_FIELDS_URL"] = str_replace(
	array("#list_id#", "#group_id#"),
	array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]),
	$arParams["~LIST_FIELDS_URL"]
);
$arResult["LIST_FIELDS_URL"] = htmlspecialchars($arResult["~LIST_FIELDS_URL"]);

$obList = new CList($arIBlock["ID"]);

$arFields = $obList->GetFields();
if(array_key_exists($arParams["FIELD_ID"], $arFields))
{
	$arResult["FIELD"] = $arFields[$arParams["FIELD_ID"]];
	$arResult["FIELD_ID"] = $arParams["FIELD_ID"];
}
else
{
	$arResult["FIELD"] = false;
	$arResult["FIELD_ID"] = false;
}

$arResult["~LIST_FIELD_EDIT_URL"] = str_replace(
	array("#list_id#", "#field_id#", "#group_id#"),
	array($arResult["IBLOCK_ID"], $arResult["FIELD_ID"], $arParams["SOCNET_GROUP_ID"]),
	$arParams["~LIST_FIELD_EDIT_URL"]
);
$arResult["LIST_FIELD_EDIT_URL"] = htmlspecialchars($arResult["~LIST_FIELD_EDIT_URL"]);

//Assume there was no error
$bVarsFromForm = false;

//Form submitted
if($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid())
{
	//When Save or Apply buttons was pressed
	if(isset($_POST["save"]) || isset($_POST["apply"]))
	{
		$strError = "";

		//Gather fields for update
		$arField = array(
			"SORT" => $_POST["SORT"],
			"NAME" => trim($_POST["NAME"], " \n\r\t\x0"),
			"IS_REQUIRED" => $_POST["IS_REQUIRED"],
			"MULTIPLE" => $_POST["MULTIPLE"],
			"TYPE" => $_POST["TYPE"],
			"DEFAULT_VALUE" => $_POST["DEFAULT_VALUE"],
			"USER_TYPE_SETTINGS" => $_POST["USER_TYPE_SETTINGS"],
			"SETTINGS" => $_POST["SETTINGS"],
		);

		if(strlen($arField["NAME"]) <= 0)
			$strError = GetMessage("CC_BLFE_BAD_FIELD_NAME")."<br>";

		if($arField["TYPE"] == "PREVIEW_PICTURE")
		{
			$arField["DEFAULT_VALUE"]["METHOD"] = "resample";
			$arField["DEFAULT_VALUE"]["COMPRESSION"] = intval(COption::GetOptionString('main', 'image_resize_quality', '95'));
		}

		if(preg_match("/^(G|G:|E|E:)/", $arField["TYPE"]))
		{
			$arField["LINK_IBLOCK_ID"] = intval($_POST["LINK_IBLOCK_ID"]);
			$arIBLOCKS = CLists::GetIBlocks($arParams["~IBLOCK_TYPE_ID"], !$arParams["CAN_EDIT"], $arParams["~SOCNET_GROUP_ID"]);

			if(substr($arField["TYPE"], 0, 1) == "G")
				unset($arIBLOCKS[$arResult["IBLOCK_ID"]]);

			if(!array_key_exists($arField["LINK_IBLOCK_ID"], $arIBLOCKS))
				$strError = GetMessage("CC_BLFE_WRONG_LINK_IBLOCK")."<br>";
		}


		if(isset($_POST["LIST"]))
			$arField["LIST"] = $_POST["LIST"];
		if(!is_array($arField["LIST"]))
			$arField["LIST"] = array();

		//Import values from textarea
		if(isset($_POST["LIST_TEXT_VALUES"]) && strlen($_POST["LIST_TEXT_VALUES"]))
		{
			$max_sort = 0;

			//create values "map"
			$arListMap = array();
			foreach($arField["LIST"] as $i => $arEnum)
			{
				if($arEnum["SORT"] > $max_sort)
					$max_sort = intval($arEnum["SORT"]);

				$arListMap[trim($arEnum["VALUE"], " \t\n\r")] = $arEnum["ID"];
			}

			//add non empty lines to the list
			foreach(explode("\n", $_POST["LIST_TEXT_VALUES"]) as $value_line)
			{
				$value = trim($value_line, " \t\n\r");
				if(strlen($value) > 0 && !isset($arListMap[$value]))
				{
					$max_sort += 10;
					$arListMap[$value] = "m".$max_sort;
					$arField["LIST"]["m".$max_sort] = array(
						"SORT" => $max_sort,
						"VALUE" => $value,
					);
				}
			}
		}

		if(isset($_POST["LIST_DEF"]) && is_array($_POST["LIST_DEF"]))
		{
			$bWasDef = false;
			foreach($_POST["LIST_DEF"] as $def)
			{
				$def = intval($def);
				if($def > 0 && isset($arField["LIST"][$def]))
				{
					$arField["LIST"][$def]["DEF"] = "Y";
					$bWasDef = true;
				}
			}

			if($bWasDef)
				foreach($arField["LIST"] as $i => $arEnum)
					if($arEnum["DEF"] !== "Y")
						$arField["LIST"][$i]["DEF"] = "N";
		}

		if(!$strError)
		{
			if($arResult["FIELD_ID"])
				$arResult["FIELD_ID"] = $obList->UpdateField($arResult["FIELD_ID"], $arField);
			else
				$arResult["FIELD_ID"] = $obList->AddField($arField);

			//Clear components cache
			$GLOBALS["CACHE_MANAGER"]->ClearByTag("lists_list_".$arIBlock["ID"]);

			$tab_name = $arResult["FORM_ID"]."_active_tab";

			//And go to proper page
			if(isset($_POST["save"]))
				LocalRedirect($arResult["~LIST_FIELDS_URL"]);
			elseif($arResult["FIELD_ID"])
				LocalRedirect(
					CHTTP::urlAddParams(str_replace(
							array("#list_id#", "#field_id#", "#group_id#"),
							array($arResult["IBLOCK_ID"], $arResult["FIELD_ID"], $arParams["SOCNET_GROUP_ID"]),
							$arParams["~LIST_FIELD_EDIT_URL"]
						),
						array($tab_name => $_POST[$tab_name]),
						array("skip_empty" => true, "encode" => true)
					)
				);
			else
				LocalRedirect($arResult["~LIST_FIELDS_URL"]);
		}
		else
		{
			ShowError($strError);
			$bVarsFromForm = true;
		}
	}
	elseif(isset($_POST["action"]) && $_POST["action"]==="type_changed")
	{
		$bVarsFromForm = true;
	}
	elseif($arResult["FIELD_ID"] && isset($_POST["action"]) && $_POST["action"]==="delete")
	{
		$obList->DeleteField($arResult["FIELD_ID"]);
		$obList->Save();

		//Clear components cache
		$GLOBALS["CACHE_MANAGER"]->ClearByTag("lists_list_".$arIBlock["ID"]);

		LocalRedirect($arResult["~LIST_FIELDS_URL"]);
	}
	else
	{
		//Go to lists page
		LocalRedirect($arResult["~LISTS_URL"]);
	}
}

$arResult["TYPES"] = $obList->GetAvailableTypes($arResult["FIELD_ID"]);

$data = array();

if($bVarsFromForm)
{//There was an error so display form values
	$data["SORT"] = $_POST["SORT"];
	$data["NAME"] = $_POST["NAME"];
	$data["IS_REQUIRED"] = $_POST["IS_REQUIRED"];
	$data["MULTIPLE"] = $_POST["MULTIPLE"];
	$data["TYPE"] = $_POST["TYPE"];

	if($data["TYPE"] !== $arResult["FIELD"]["TYPE"])
	{
		//field type was changed so it needs adjustment
		if(preg_match("/^(.):(.+)$/", $data["TYPE"], $arMatch))
		{
			$arResult["FIELD"]["PROPERTY_USER_TYPE"] = CIBlockProperty::GetUserType($arMatch[2]);
		}
	}

	if(
		$data["TYPE"] !== "PREVIEW_PICTURE"
		&& $data["TYPE"] !== "DETAIL_PICTURE"
		&& is_array($_POST["DEFAULT_VALUE"])
	)
	{
		$data["DEFAULT_VALUE"] = "";
	}
	else
	{
		$data["DEFAULT_VALUE"] = $_POST["DEFAULT_VALUE"];
	}

	$data["SETTINGS"] = $_POST["SETTINGS"];

	if(isset($_POST["LIST"]) && is_array($_POST["LIST"]))
	{
		$n = 0;
		$arResult["LIST"] = array();
		foreach($_POST["LIST"] as $k => $v)
		{
			if(preg_match("/^n(\d+)$/", $k, $match))
			{
				if(intval($match[1]) > $n)
					$n = intval($match[1]);
			}
			$arResult["LIST"][$k] = array(
				"ID" => $k,
				"SORT" => $v["SORT"],
				"VALUE" => $v["VALUE"],
			);
		}
		while($n >= 0)
		{
			if(array_key_exists("n".$n, $arResult["LIST"]))
			{
				if(strlen($arResult["LIST"]["n".$n]["VALUE"]) > 0)
					break;
				else
					unset($arResult["LIST"]["n".$n]);
			}

			$n--;
		}
		$arResult["LIST"][] = array(
			"ID" => "n".($n+1),
			"SORT" => 500,
			"NAME" => "",
		);
	}
	elseif(preg_match("/^(L|L:)/", $data["TYPE"]))
	{
		$arResult["LIST"] = array();
		$arResult["LIST"][] = array(
			"ID" => "n0",
			"SORT" => 500,
			"NAME" => "",
		);
	}
	else
	{
		$arResult["LIST"] = false;
	}

	$data["LIST_TEXT_VALUES"] = $_POST["LIST_TEXT_VALUES"];

	if(isset($_POST["LIST_DEF"]) && is_array($_POST["LIST_DEF"]))
	{
		$n = 0;
		$arResult["LIST_DEF"] = array();
		foreach($_POST["LIST_DEF"] as $def)
		{
			if(array_key_exists($def, $arResult['LIST']))
				$arResult["LIST_DEF"][$def] = true;
		}
	}
	elseif(preg_match("/^(L|L:)/", $data["TYPE"]))
	{
		$arResult["LIST_DEF"] = array();
	}
	else
	{
		$arResult["LIST_DEF"] = false;
	}

	if(isset($_POST["LINK_IBLOCK_ID"]) && $_POST["LINK_IBLOCK_ID"] > 0)
	{
		$data["LINK_IBLOCK_ID"] = intval($_POST["LINK_IBLOCK_ID"]);
	}
}
elseif($arResult["FIELD_ID"])
{//Edit existing field
	$data["SORT"] = $arResult["FIELD"]["SORT"];
	$data["NAME"] = $arResult["FIELD"]["NAME"];
	$data["IS_REQUIRED"] = $arResult["FIELD"]["IS_REQUIRED"];
	$data["MULTIPLE"] = $arResult["FIELD"]["MULTIPLE"];
	$data["TYPE"] = $arResult["FIELD"]["TYPE"];
	$data["DEFAULT_VALUE"] = $arResult["FIELD"]["DEFAULT_VALUE"];
	$data["SETTINGS"] = $arResult["FIELD"]["SETTINGS"];

	if(isset($arResult["FIELD"]["LINK_IBLOCK_ID"]))
	{
		$data["LINK_IBLOCK_ID"] = intval($arResult["FIELD"]["LINK_IBLOCK_ID"]);
	}

	if(preg_match("/^PROPERTY_(\\d+)$/", $arResult["FIELD_ID"], $arMatch))
	{
		$arResult["LIST"] = array();
		$arResult["LIST_DEF"] = array();

		$rsEnum = CIBlockPropertyEnum::GetList(array("sort"=>"asc", "value"=>"asc"), array("PROPERTY_ID" => $arMatch[1]));
		while($ar = $rsEnum->GetNext())
		{
			$arResult["LIST"][$ar["ID"]] = $ar;
			if($ar["DEF"] == "Y")
				$arResult["LIST_DEF"][$ar["ID"]] = true;
		}

		$arResult["LIST"][] = array(
			"ID" => "n0",
			"SORT" => 500,
			"NAME" => "",
		);
	}
	else
	{
		$arResult["LIST"] = false;
		$arResult["LIST_DEF"] = false;
	}
	$data["LIST_TEXT_VALUES"] = '';
}
else
{//New one
	$data["ID"] = "";
	$data["SORT"] = 500;
	$data["NAME"] = GetMessage("CC_BLFE_FIELD_NAME_DEFAULT");
	$data["IS_REQUIRED"] = "N";
	$data["MULTIPLE"] = "N";
	list($data["TYPE"], $temp) = each($arResult["TYPES"]);
	reset($arResult["TYPES"]);
	$arResult["LIST"] = false;
	$data["LIST_TEXT_VALUES"] = '';
	$arResult["LIST_DEF"] = false;
}

if(preg_match("/^(G|G:|E|E:)/", $data["TYPE"]))
{
	$arResult["LINK_IBLOCKS"] = CLists::GetIBlocks($arParams["~IBLOCK_TYPE_ID"], !$arParams["CAN_EDIT"], $arParams["~SOCNET_GROUP_ID"]);
	if(substr($data["TYPE"], 0, 1) == "G")
		unset($arResult["LINK_IBLOCKS"][$arResult["IBLOCK_ID"]]);
}

$arResult["FORM_DATA"] = array();
foreach($data as $key => $value)
{
	$arResult["FORM_DATA"]["~".$key] = $value;
	if(is_array($value))
	{
		foreach($value as $key1 => $value1)
			$value[$key1] = htmlspecialchars($value1);
		$arResult["FORM_DATA"][$key] = $value;
	}
	else
	{
		$arResult["FORM_DATA"][$key] = htmlspecialchars($value);
	}
}

$arResult["CAN_BE_MULTIPLE"] = !$obList->is_field($data["TYPE"]);
$arResult["CAN_BE_OPTIONAL"] = $data["TYPE"] != "NAME";
$arResult["IS_READ_ONLY"] = $arResult["FIELD_ID"]? $obList->is_readonly($arResult["FIELD_ID"]): CListFieldTypeList::GetByID($data["TYPE"])->IsReadonly();

$this->IncludeComponentTemplate();

if($arResult["FIELD_ID"])
	$APPLICATION->SetTitle(GetMessage("CC_BLFE_TITLE_EDIT", array("#NAME#" => htmlspecialcharsex($arResult["FIELD"]["NAME"]))));
else
	$APPLICATION->SetTitle(GetMessage("CC_BLFE_TITLE_NEW"));

$APPLICATION->AddChainItem($arResult["IBLOCK"]["NAME"], $arResult["~LIST_URL"]);
$APPLICATION->AddChainItem(GetMessage("CC_BLFE_CHAIN_LIST_EDIT"), $arResult["~LIST_EDIT_URL"]);
$APPLICATION->AddChainItem(GetMessage("CC_BLFE_CHAIN_FIELDS"), $arResult["~LIST_FIELDS_URL"]);

?>