%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/components/bitrix/lists.field.edit/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/components/bitrix/lists.field.edit/component.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentName */
/** @var string $componentPath */
/** @var string $componentTemplate */
/** @var string $parentComponentName */
/** @var string $parentComponentPath */
/** @var string $parentComponentTemplate */
$this->setFrameMode(false);
/** @var CCacheManager $CACHE_MANAGER */
global $CACHE_MANAGER;

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;
	case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED:
		ShowError(GetMessage("CC_BLFE_LISTS_FOR_SONET_GROUP_DISABLED"));
		return;
	default:
		ShowError(GetMessage("CC_BLFE_UNKNOWN_ERROR"));
		return;
	}
}
elseif(
	(
		$arParams["~IBLOCK_ID"] > 0
		&& $lists_perm < CListPermissions::IS_ADMIN
		&& !CIBlockRights::UserHasRightTo($arParams["~IBLOCK_ID"], $arParams["~IBLOCK_ID"], "iblock_edit")
	) || (
		$arParams["~IBLOCK_ID"] == 0
		&& $lists_perm < CListPermissions::IS_ADMIN
	)
)
{
	ShowError(GetMessage("CC_BLFE_ACCESS_DENIED"));
	return;
}

$arParams["CAN_EDIT"] =
	$lists_perm >= CListPermissions::IS_ADMIN
	|| (
		$arParams["~IBLOCK_ID"] > 0
		&& CIBlockRights::UserHasRightTo($arParams["~IBLOCK_ID"], $arParams["~IBLOCK_ID"], "iblock_edit")
	)
;

$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"] = htmlspecialcharsbx($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"] = htmlspecialcharsbx($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"] = htmlspecialcharsbx($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"] = htmlspecialcharsbx($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"] = htmlspecialcharsbx($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"],
			"CODE" => $_POST["CODE"],
			"TYPE" => $_POST["TYPE"],
			"DEFAULT_VALUE" => $_POST["DEFAULT_VALUE"],
			"USER_TYPE_SETTINGS" => $_POST["USER_TYPE_SETTINGS"],
			"SETTINGS" => $_POST["SETTINGS"],
		);

		if(isset($arField["SETTINGS"]["ADD_READ_ONLY_FIELD"]) && $arField["SETTINGS"]["ADD_READ_ONLY_FIELD"] == "Y")
		{
			switch($arField["TYPE"])
			{
				case "SORT":
					if(strlen($arField["DEFAULT_VALUE"]) <= 0)
						$strError = GetMessage("CC_BLFE_BAD_FIELD_ADD_READ_ONLY")."<br>";
					break;
				case "L":
					if(is_array($_POST["LIST_DEF"]))
					{
						$listDefaultValue = current($_POST["LIST_DEF"]);
						if(empty($listDefaultValue))
							$strError = GetMessage("CC_BLFE_BAD_FIELD_ADD_READ_ONLY")."<br>";
					}
					break;
				case "S:HTML":
					if(empty($arField["DEFAULT_VALUE"]["TEXT"]))
						$strError = GetMessage("CC_BLFE_BAD_FIELD_ADD_READ_ONLY")."<br>";
					break;
				default:
					if(empty($arField["DEFAULT_VALUE"]))
						$strError = GetMessage("CC_BLFE_BAD_FIELD_ADD_READ_ONLY")."<br>";
			}
		}

		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'));
		}
		elseif($arField["TYPE"] == "S:Date")
		{
			if(!empty($arField["DEFAULT_VALUE"]) && !CheckDateTime($arField["DEFAULT_VALUE"], FORMAT_DATE))
			{
				$strError = GetMessage("CC_BLFE_INVALID_DEFAULT_VALUE")."<br>";
			}
		}
		elseif($arField["TYPE"] == "S:DateTime")
		{
			if(!empty($arField["DEFAULT_VALUE"]) && !CheckDateTime($arField["DEFAULT_VALUE"]))
			{
				$strError = GetMessage("CC_BLFE_INVALID_DEFAULT_VALUE")."<br>";
			}
		}

		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["ROW_COUNT"]) && $_POST["ROW_COUNT"] > 0)
			$arField["ROW_COUNT"] = intval($_POST["ROW_COUNT"]);
		if(isset($_POST["COL_COUNT"]) && $_POST["COL_COUNT"] > 0)
			$arField["COL_COUNT"] = intval($_POST["COL_COUNT"]);

		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"]))
		{
			foreach($arField["LIST"] as $i => $arEnum)
			{
				$arField["LIST"][$i]["DEF"] = "N";
			}

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

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

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

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

				$obList->actualizeDocumentAdminPage(str_replace(
					array("#list_id#", "#group_id#"),
					array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]), $arParams["LIST_ELEMENT_URL"]));

				//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"]);
			}
			catch (Bitrix\Main\SystemException $exception)
			{
				ShowError($exception->getMessage());
				if (!$arResult["FIELD_ID"])
				{
					$bVarsFromForm = true;
				}
			}
		}
		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
		$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["CODE"] = $_POST["CODE"];
	$data["TYPE"] = $_POST["TYPE"];
	if (isset($_POST["ROW_COUNT"]))
		$data["ROW_COUNT"] = $_POST["ROW_COUNT"];
	if (isset($_POST["COL_COUNT"]))
		$data["COL_COUNT"] = $_POST["COL_COUNT"];

	if($data["TYPE"] !== $arResult["FIELD"]["TYPE"])
	{
		//field type was changed so it needs adjustment
		$arMatch = array();
		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)
		{
			$match = array();
			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["CODE"] = $arResult["FIELD"]["CODE"];
	$data["TYPE"] = $arResult["FIELD"]["TYPE"];
	$data["DEFAULT_VALUE"] = $arResult["FIELD"]["DEFAULT_VALUE"];
	$data["SETTINGS"] = $arResult["FIELD"]["SETTINGS"];
	$data["ROW_COUNT"] = $arResult["FIELD"]["ROW_COUNT"];
	$data["COL_COUNT"] = $arResult["FIELD"]["COL_COUNT"];

	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";
	$data["CODE"] = "";
	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] = htmlspecialcharsbx($value1);
		$arResult["FORM_DATA"][$key] = $value;
	}
	else
	{
		$arResult["FORM_DATA"][$key] = htmlspecialcharsbx($value);
	}
}

$arResult['RAND_STRING'] = $this->randString();
$arResult["CAN_BE_MULTIPLE"] = !$obList->is_field($data["TYPE"]);
$arResult["IS_PROPERTY"] = $arResult["CAN_BE_MULTIPLE"];

if($data["TYPE"] == "S:map_yandex")
	$arResult["CAN_BE_MULTIPLE"] = false;
$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();
$arResult["IS_MULTIPLE_ONLY"] = $data["TYPE"] == "S:DiskFile";

$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"]);

?>

Zerion Mini Shell 1.0