Your IP : 18.117.109.187


Current Path : /home/bitrix/ext_www/dev.easy-comfort.com.ua/bitrix/components/bitrix/lists.list.edit/
Upload File :
Current File : /home/bitrix/ext_www/dev.easy-comfort.com.ua/bitrix/components/bitrix/lists.list.edit/component.php

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

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

$lists_perm = CListPermissions::CheckAccess(
	$USER,
	$arParams["~IBLOCK_TYPE_ID"],
	$arParams["~IBLOCK_ID"] > 0? $arParams["~IBLOCK_ID"]: false,
	$arParams["~SOCNET_GROUP_ID"]
);
if($lists_perm < 0)
{
	switch($lists_perm)
	{
	case CListPermissions::WRONG_IBLOCK_TYPE:
		ShowError(GetMessage("CC_BLLE_WRONG_IBLOCK_TYPE"));
		return;
	case CListPermissions::WRONG_IBLOCK:
		ShowError(GetMessage("CC_BLLE_WRONG_IBLOCK"));
		return;
	default:
		ShowError(GetMessage("CC_BLLE_UNKNOWN_ERROR"));
		return;
	}
}
elseif($lists_perm < CListPermissions::IS_ADMIN)
{
	ShowError(GetMessage("CC_BLLE_ACCESS_DENIED"));
	return;
}

$arParams["CAN_EDIT"] = $lists_perm >= CListPermissions::IS_ADMIN;

$bBizProc = IsModuleInstalled('bizproc');
$arIBlock = CIBlock::GetArrayByID(intval($arParams["~IBLOCK_ID"]));

if($arIBlock)
{
	$arResult["~IBLOCK"] = $arIBlock;
	$arResult["IBLOCK"] = htmlspecialcharsex($arIBlock);
	$arResult["IBLOCK_ID"] = $arIBlock["ID"];
}
else
{
	$arResult["IBLOCK"] = false;
	$arResult["IBLOCK_ID"] = false;
}

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_list_edit";

$arResult["~LISTS_URL"] = str_replace(
	array("#list_id#", "#group_id#"),
	array("0", $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"]);

//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"]))
	{
		//Gather fields for update
		$arFields = array(
			"NAME" => $_POST["NAME"],
			"IBLOCK_TYPE_ID" => $arParams["~IBLOCK_TYPE_ID"],
			"SORT" => $_POST["SORT"],
			"WORKFLOW" => "N",
			"ELEMENTS_NAME" => $_POST["ELEMENTS_NAME"],
			"ELEMENT_NAME" => $_POST["ELEMENT_NAME"],
			"ELEMENT_ADD" => $_POST["ELEMENT_ADD"],
			"ELEMENT_EDIT" => $_POST["ELEMENT_EDIT"],
			"ELEMENT_DELETE" => $_POST["ELEMENT_DELETE"],
			"SECTIONS_NAME" => $_POST["SECTIONS_NAME"],
			"SECTION_NAME" => $_POST["SECTION_NAME"],
			"SECTION_ADD" => $_POST["SECTION_ADD"],
			"SECTION_EDIT" => $_POST["SECTION_EDIT"],
			"SECTION_DELETE" => $_POST["SECTION_DELETE"],
		);

		if($arParams["SOCNET_GROUP_ID"])
			$arFields["SOCNET_GROUP_ID"] = $arParams["SOCNET_GROUP_ID"];

		if($bBizProc)
			$arFields["BIZPROC"] = $_POST["BIZPROC"]=="Y"? "Y": "N";

		$arSites = array(SITE_ID);
		if($arIBlock)
		{
			$rsSite = CIBlock::GetSite($arIBlock["ID"]);
			while($ar = $rsSite->Fetch())
				$arSites[] = $ar["SITE_ID"];
		}
		$arFields["SITE_ID"] = $arSites;

		if(isset($_FILES["PICTURE"]))
			$arFields["PICTURE"] = $_FILES["PICTURE"];
		if(isset($_POST["PICTURE_del"]))
			$arFields["PICTURE"]["del"] = "Y";

		//Update existing or add new
		$ob = new CIBlock;
		if($arIBlock)
		{
			$res = $ob->Update($arIBlock["ID"], $arFields);
			if($res)
				$res = $arIBlock["ID"];
		}
		else
		{
			$res = $ob->Add($arFields);
			if($res)
			{
				$obList = new CList($res);
				$obList->AddField(array(
					"SORT" => 10,
					"NAME" => GetMessage("CC_BLLE_NAME_FIELD"),
					"IS_REQUIRED" => "Y",
					"MULTIPLE" => "N",
					"TYPE" => "NAME",
					"DEFAULT_VALUE" => "",
				));
				$obList->Save();
			}
		}

		if($res && $arParams["SOCNET_GROUP_ID"])
		{
			//Successfull update and social network
			CLists::SetSocnetPermission($res, $_POST["GROUPS"]);
		}

		if($res && !$arParams["SOCNET_GROUP_ID"])
		{
			//Successfull update set iblock permissions

			//Set iblock permissions
			$arIBlockPerms = CIBlock::GetGroupPermissions($res);
			$bChanged = false;

			//At first "filter" input
			$arNewPerms = array();
			if(is_array($_POST["GROUPS"]))
			{
				foreach($_POST["GROUPS"] as $arPerm)
				{
					if(
						isset($arPerm["GROUP"]) && $arPerm["GROUP"] > 0
						&& isset($arPerm["PERM"])
					)
					{
						if(strlen($arPerm["PERM"]) == 1 && strpos("DRUW", $arPerm["PERM"])!==false)
							$arNewPerms[intval($arPerm["GROUP"])] = $arPerm["PERM"];
						elseif(strlen($arPerm["PERM"]) == 0)
							$arNewPerms[intval($arPerm["GROUP"])] = false;
					}
				}
			}

			//Read changed permissions, but w/o administrative.
			foreach($arIBlockPerms as $group_id => $perm)
			{
				if($perm <= "W" && array_key_exists($group_id, $arNewPerms))
				{
					if($perm != $arNewPerms[$group_id])
					{
						$bChanged = true;
						if($arNewPerms[$group_id]!==false)
							$arIBlockPerms[$group_id] = $arNewPerms[$group_id];
						else
							unset($arIBlockPerms[$group_id]);
					}
					unset($arNewPerms[$group_id]);
				}
			}

			//Read added permissions
			foreach($arNewPerms as $group_id => $perm)
			{
				if($perm && !array_key_exists($group_id, $arIBlockPerms))
				{
					$bChanged = true;
					$arIBlockPerms[$group_id] = $perm;
				}
			}

			if($bChanged)
			{
				CIBlock::SetPermission($res, $arIBlockPerms);
			}
		}

		if($res)
		{
			//Clear components cache
			global $CACHE_MANAGER;
			$CACHE_MANAGER->ClearByTag("lists_list_".$res);
			$CACHE_MANAGER->ClearByTag("lists_list_any");
			$CACHE_MANAGER->CleanDir("menu");

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

			//And go to proper page
			if(isset($_POST["save"]))
				LocalRedirect($arResult["LISTS_URL"]);
			elseif($arIBlock)
				LocalRedirect(CHTTP::urlAddParams(
					$arResult["LIST_EDIT_URL"],
					array($tab_name => $_POST[$tab_name]),
					array("skip_empty" => true, "encode" => true)
				));
			else
				LocalRedirect(CHTTP::urlAddParams(str_replace(
					array("#list_id#", "#group_id#"),
					array($res, $arParams["SOCNET_GROUP_ID"]),
					$arParams["LIST_EDIT_URL"]
					),
					array($tab_name => $_POST[$tab_name]),
					array("skip_empty" => true, "encode" => true)
				));
		}
		else
		{
			ShowError($ob->LAST_ERROR);
			$bVarsFromForm = true;
		}
	}
	elseif(isset($_POST["action"]) && $_POST["action"]==="delete" && $arResult["IBLOCK_ID"])
	{
		if(CIBlock::Delete($arResult["IBLOCK_ID"]))
		{
			//Clear components cache
			global $CACHE_MANAGER;
			$CACHE_MANAGER->ClearByTag("lists_list_".$res);
			$CACHE_MANAGER->ClearByTag("lists_list_any");
			$CACHE_MANAGER->CleanDir("menu");
		}
		LocalRedirect($arResult["~LISTS_URL"]);
	}
	else
	{
		//Go to lists page
		LocalRedirect($arResult["~LISTS_URL"]);
	}
}

$data = array();

if($bVarsFromForm)
{//There was an error so display form values
	$data["ID"] = $arIBlock? $arIBlock["ID"]: "";
	$data["NAME"] = $_POST["NAME"];
	$data["SORT"] = $_POST["SORT"];
	if($bBizProc)
		$data["BIZPROC"] = $_POST["BIZPROC"];
	$data["PICTURE"] = $arIBlock? $arIBlock["PICTURE"]: "";
	$data["ELEMENTS_NAME"] = $_POST["ELEMENTS_NAME"];
	$data["ELEMENT_NAME"] = $_POST["ELEMENT_NAME"];
	$data["ELEMENT_ADD"] = $_POST["ELEMENT_ADD"];
	$data["ELEMENT_EDIT"] = $_POST["ELEMENT_EDIT"];
	$data["ELEMENT_DELETE"] = $_POST["ELEMENT_DELETE"];
	$data["SECTIONS_NAME"] = $_POST["SECTIONS_NAME"];
	$data["SECTION_NAME"] = $_POST["SECTION_NAME"];
	$data["SECTION_ADD"] = $_POST["SECTION_ADD"];
	$data["SECTION_EDIT"] = $_POST["SECTION_EDIT"];
	$data["SECTION_DELETE"] = $_POST["SECTION_DELETE"];
}
elseif($arIBlock)
{//Edit existing iblock
	$data["ID"] = $arIBlock["ID"];
	$data["NAME"] = $arIBlock["NAME"];
	$data["SORT"] = $arIBlock["SORT"];
	if($bBizProc)
		$data["BIZPROC"] = $arIBlock["BIZPROC"];
	$data["PICTURE"] = $arIBlock["PICTURE"];
	$data["ELEMENTS_NAME"] = $arIBlock["ELEMENTS_NAME"];
	$data["ELEMENT_NAME"] = $arIBlock["ELEMENT_NAME"];
	$data["ELEMENT_ADD"] = $arIBlock["ELEMENT_ADD"];
	$data["ELEMENT_EDIT"] = $arIBlock["ELEMENT_EDIT"];
	$data["ELEMENT_DELETE"] = $arIBlock["ELEMENT_DELETE"];
	$data["SECTIONS_NAME"] = $arIBlock["SECTIONS_NAME"];
	$data["SECTION_NAME"] = $arIBlock["SECTION_NAME"];
	$data["SECTION_ADD"] = $arIBlock["SECTION_ADD"];
	$data["SECTION_EDIT"] = $arIBlock["SECTION_EDIT"];
	$data["SECTION_DELETE"] = $arIBlock["SECTION_DELETE"];
}
else
{//New one
	$data["ID"] = "";
	$data["NAME"] = GetMessage("CC_BLLE_FIELD_NAME_DEFAULT");
	$data["SORT"] = 500;
	if($bBizProc)
		$data["BIZPROC"] = "Y";
	$data["PICTURE"] = "";
	$arMessages = CIBlock::GetMessages(0, $arParams["~IBLOCK_TYPE_ID"]);
	$data["ELEMENTS_NAME"] = $arMessages["ELEMENTS_NAME"];
	$data["ELEMENT_NAME"] = $arMessages["ELEMENT_NAME"];
	$data["ELEMENT_ADD"] = $arMessages["ELEMENT_ADD"];
	$data["ELEMENT_EDIT"] = $arMessages["ELEMENT_EDIT"];
	$data["ELEMENT_DELETE"] = $arMessages["ELEMENT_DELETE"];
	$data["SECTIONS_NAME"] = $arMessages["SECTIONS_NAME"];
	$data["SECTION_NAME"] = $arMessages["SECTION_NAME"];
	$data["SECTION_ADD"] = $arMessages["SECTION_ADD"];
	$data["SECTION_EDIT"] = $arMessages["SECTION_EDIT"];
	$data["SECTION_DELETE"] = $arMessages["SECTION_DELETE"];
}

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

if($arParams["SOCNET_GROUP_ID"])
{
	$arSocnetPerm = CLists::GetSocnetPermission($arResult["IBLOCK_ID"]);

	$arResult["IBLOCK_GROUPS"] = array();
	$arResult["GROUPS"] = array(
		//"A" => GetMessage("CC_BLLE_ROLE_GROUP_ADMIN"),
		"E" => GetMessage("CC_BLLE_ROLE_GROUP_MODERATOR"),
		"K" => GetMessage("CC_BLLE_ROLE_GROUP_MEMBER"),
		"L" => GetMessage("CC_BLLE_ROLE_GROUP_AUTHORIZED"),
		"N" => GetMessage("CC_BLLE_ROLE_GROUP_EVERYONE"),
		//"T" => GetMessage("CC_BLLE_ROLE_GROUP_BLACKLISTED"),
		//"Z" => Request
	);

	foreach($arSocnetPerm as $role => $permission)
	{
		if(isset($arResult["GROUPS"][$role]))
			$arResult["IBLOCK_GROUPS"][$role] = $permission;
	}
}
else
{
	$arIBlockPerms = CIBlock::GetGroupPermissions($arResult["IBLOCK_ID"]);
	$arListsPerm = CLists::GetPermission($arParams["~IBLOCK_TYPE_ID"]);

	$arResult["IBLOCK_GROUPS"] = array();
	$arResult["GROUPS"] = array();
	$rsGroups = CGroup::GetList($by="sort", $order="asc");
	while($ar = $rsGroups->Fetch())
	{
		if(
			!in_array($ar["ID"], $arListsPerm) //exclude groups which have permissions to create iblocks in this type
		)
		{
			if(array_key_exists($ar["ID"], $arIBlockPerms))
			{
				if($arIBlockPerms[$ar["ID"]] <= "W")
				{
					$arResult["GROUPS"][$ar["ID"]] = "[".$ar["ID"]."] ".htmlspecialchars($ar["NAME"]);
					$arResult["IBLOCK_GROUPS"][$ar["ID"]] = $arIBlockPerms[$ar["ID"]];
				}
			}
			else
			{
				$arResult["GROUPS"][$ar["ID"]] = "[".$ar["ID"]."] ".htmlspecialchars($ar["NAME"]);
			}
		}
	}
}

if($arIBlock["WORKFLOW"] == "Y")
	$arResult["RIGHTS"] = array(
		"D"=>GetMessage("CC_BLLE_ACCESS_D"),
		"R"=>GetMessage("CC_BLLE_ACCESS_R"),
		"U"=>GetMessage("CC_BLLE_ACCESS_U"),
		"W"=>GetMessage("CC_BLLE_ACCESS_W"),
		//"X"=>GetMessage("CC_BLLE_ACCESS_X"),
	);
elseif($arIBlock["BIZPROC"] == "Y")
	$arResult["RIGHTS"] = array(
		"D"=>GetMessage("CC_BLLE_ACCESS_D"),
		"R"=>GetMessage("CC_BLLE_ACCESS_R"),
		"U"=>GetMessage("CC_BLLE_ACCESS_U2"),
		"W"=>GetMessage("CC_BLLE_ACCESS_W"),
		//"X"=>GetMessage("CC_BLLE_ACCESS_X"),
	);
else
	$arResult["RIGHTS"] = array(
		"D"=>GetMessage("CC_BLLE_ACCESS_D"),
		"R"=>GetMessage("CC_BLLE_ACCESS_R"),
		"W"=>GetMessage("CC_BLLE_ACCESS_W"),
		//"X"=>GetMessage("CC_BLLE_ACCESS_X"),
	);

$this->IncludeComponentTemplate();

if($arIBlock)
	$APPLICATION->SetTitle(GetMessage("CC_BLLE_TITLE_EDIT", array("#NAME#" => $arResult["IBLOCK"]["NAME"])));
else
	$APPLICATION->SetTitle(GetMessage("CC_BLLE_TITLE_NEW"));

if($arResult["IBLOCK_ID"])
	$APPLICATION->AddChainItem($arResult["IBLOCK"]["NAME"], $arResult["~LIST_URL"]);

$APPLICATION->AddChainItem(GetMessage("CC_BLLE_CHAIN_EDIT"), $arResult["~LIST_EDIT_URL"]);
?>