Your IP : 18.216.91.245


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/webdav.iblock.rights/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/webdav.iblock.rights/action.php

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if (!CModule::IncludeModule('iblock'))
	return false;
if (!CModule::IncludeModule("webdav"))
	return false;
if (!empty($arParams['ACTION']) && !empty($_REQUEST["ENTITY_ID"]) && check_bitrix_sessid())
{

	$arParams["IBLOCK_ID"] = isset($arParams['IBLOCK_ID']) ? intval($arParams['IBLOCK_ID']) : 0;
	$arParams["ENTITY_TYPE"] = (isset($arParams['ENTITY_TYPE']) && in_array($arParams['ENTITY_TYPE'], array('IBLOCK', 'ELEMENT', 'SECTION'))) ? $arParams['ENTITY_TYPE'] : '';
	$arParams["ENTITY_ID"] = isset($arParams['ENTITY_ID']) ? intval($arParams['ENTITY_ID']) : 0;
	$arParams['SOCNET_GROUP_ID'] = (isset($arParams['SOCNET_GROUP_ID']) && (intval($arParams['SOCNET_GROUP_ID']) > 0)) ? intval($arParams['SOCNET_GROUP_ID']) : 0;
	$arParams["SOCNET_TYPE"] = (isset($arParams['SOCNET_TYPE']) && in_array($arParams['SOCNET_TYPE'], array('user', 'group'))) ? $arParams['SOCNET_TYPE'] : '';
	$arParams["SOCNET_ID"] = isset($arParams['SOCNET_ID']) ? intval($arParams['SOCNET_ID']) : 0;
	$arParams["ACTION"] = (isset($_REQUEST["ACTION"]) ? strtolower($_REQUEST["ACTION"]) : '');
	$arParams["ACTION"] = (in_array($arParams["ACTION"], array("set_rights")) ? $arParams["ACTION"] : '');

	$arError = array();
	$ID = intval($_REQUEST["ENTITY_ID"]);
	switch ($arParams['ACTION'])
	{
		case "set_rights":
			$allowed = $USER->CanDoOperation('webdav_change_settings');
			if ($arParams['ENTITY_TYPE'] == 'SECTION')
			{
				$ibRights = new CIBlockSectionRights($arParams['IBLOCK_ID'], $ID);
				$op = 'section_rights_edit';
			}
			elseif ($arParams['ENTITY_TYPE'] == 'ELEMENT')
			{
				$ibRights = new CIBlockElementRights($arParams['IBLOCK_ID'], $ID);
				$op = 'element_rights_edit';
			}
			else
			{
				$ibRights = new CIBlockRights($arParams['IBLOCK_ID']);
				$op = 'iblock_rights_edit';
			}

			if (!$allowed)
			{
				if ($arParams['ENTITY_TYPE'] == 'IBLOCK')
					$allowed = $ibRights->UserHasRightTo($arParams['IBLOCK_ID'], $arParams['IBLOCK_ID'], $op);
				else
					$allowed = $ibRights->UserHasRightTo($arParams['IBLOCK_ID'], $ID, $op);
			}

			if (!$allowed)
				$arError[] = array("id" => "no_rights", "text" => GetMessage("WD_NO_RIGHTS"));

			if (empty($arError))
			{
				$arRights = CIBlockRights::Post2Array($_POST["RIGHTS"]);
				$ibRights->SetRights($arRights);

				global $CACHE_MANAGER;
				$CACHE_MANAGER->ClearByTag('iblock_id_' . $arParams['IBLOCK_ID']);


				// get affected elements
				$arElements = array();

				if ($arParams['ENTITY_TYPE'] == 'ELEMENT')
				{
					$arElements[] = array(
						'ID' => $ID,
						'IBLOCK_ID' => $arParams['IBLOCK_ID']
					);
				}
				elseif ($arParams['ENTITY_TYPE'] == 'SECTION')
				{
					$dbFiles = CIBlockElement::GetList(
						array(),
						array(
							'IBLOCK_ID' => $arParams['IBLOCK_ID'],
							'SECTION_ID' => $ID,
							'INCLUDE_SUBSECTIONS' => 'Y',
							'SHOW_HISTORY' => 'Y'
						),
						false,
						false,
						array('ID', 'IBLOCK_ID')
					);
					if ($dbFiles)
					{
						while( $arFile = $dbFiles->Fetch())
						{
							$arElements[] = array(
								'ID' => $arFile['ID'],
								'IBLOCK_ID' => $arFile['IBLOCK_ID']
							);
						}
					}
				}
				elseif ($arParams['ENTITY_TYPE'] == 'IBLOCK')
				{
					$dbFiles = CIBlockElement::GetList(
						array(),
						array('IBLOCK_ID' => $ID, 'INCLUDE_SUBSECTIONS' => 'Y'),
						false,
						false,
						array('ID', 'IBLOCK_ID')
					);
					if ($dbFiles)
					{
						while( $arFile = $dbFiles->Fetch())
						{
							$arElements[] = array(
								'ID' => $arFile['ID'],
								'IBLOCK_ID' => $arFile['IBLOCK_ID']
							);
						}
					}
				}

				if (CModule::IncludeModule('socialnetwork')) // update socnet rights
				{
					foreach ($arElements as $elm)
					{
						CWebDavSocNetEvent::SocnetLogUpdateRights($elm['ID'], $elm['IBLOCK_ID'],
							(empty($arParams['SOCNET_TYPE']) ? ENTITY_FILES_COMMON_EVENT_ID : ENTITY_FILES_SOCNET_EVENT_ID));
					}
				}

				if (CModule::IncludeModule('search')) // update search rights
				{
					foreach ($arElements as $elm)
					{
						CWebDavIblock::UpdateSearchRights($elm['ID'], $elm['IBLOCK_ID']);
					}
				}
			}

			break;
	}
	if (!empty($arError))
	{
		$e = new CAdminException($arError);
		$arResult["ERROR_MESSAGE"] = $e->GetString();
	}
	else
	{
		if (!isset($arParams['DO_NOT_REDIRECT']))
		{
			if (isset($_REQUEST['back_url']))
			{
				$dest = urldecode($_REQUEST['back_url']);
			}
			else
			{
				$dest = $APPLICATION->GetCurPageParam("result=".$arParams["ACTION"], array("action", "ID", "sessid", "result"));
			}
			LocalRedirect($dest);
		}
	}
}
?>