• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/usertypewebdav.php
  • Класс: CUserTypeWebdavElement
  • Вызов: CUserTypeWebdavElement::_updateRights
static function _updateRights($files, $rights, $ufEntity = array())
{
	static $arIBlock = array();
	static $op_X = 'element_rights_edit';
	static $arTasks = null;

	if (!is_array($rights) || sizeof($rights) <= 0)
		return false;
	if ($files===null || $files===false)
		return false;
	if (!is_array($files))
		$files = array($files);
	if (sizeof($files) <= 0)
		return false;
	if (!CModule::IncludeModule('iblock'))
		return false;

	$arFiles = array();
	foreach($files as $id)
	{
		$id = intval($id);
		if (intval($id) > 0)
			$arFiles[] = $id;
	}

	if (sizeof($arFiles) <= 0)
		return false;

	$arFiles = array_unique($arFiles);

	if ($arTasks == null)
		$arTasks = CWebDavIblock::GetTasks();

	$i=0;
	$arViewRights = $arEditRights = array();
	$curUserID = 'U'.$GLOBALS['USER']->GetID();
	foreach($rights as $right)
	{
		if ($curUserID == $right) // do not override owner's rights
			continue;
		$key = 'n' . $i++;
		$arViewRights[$key] = array(
			'GROUP_CODE' => $right,
			'TASK_ID' => $arTasks['R'],
		);
		$arEditRights[$key] = array(
			'GROUP_CODE' => $right,
			'TASK_ID' => $arTasks['W'],
		);
	}

	$ibe = new CIBlockElement();
	$dbWDFile = $ibe->GetList(array(), array('ID' => $arFiles, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW'));
	$iblockIds = array();
	if ($dbWDFile)
	{
		if(!empty($ufEntity['ENTITY_VALUE_ID']))
		{
			//hack you
			CIBlockWebdavSocnet::storeFileIdsByComment($ufEntity['ENTITY_VALUE_ID'], $arFiles);
		}
		while ($arWDFile = $dbWDFile->Fetch())
		{
			$id = $arWDFile['ID'];

			if ($arWDFile['WF_NEW'] == 'Y')
				$ibe->Update($id, array('BP_PUBLISHED' => 'Y'));

			if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E")
			{
				$dropped = false;
				$ibRights = CWebDavIblock::_get_ib_rights_object('ELEMENT', $id, $arWDFile['IBLOCK_ID']);

				// change rights on comment files if they are 'attached to the post'
				$dropped = static::_isDropped($arWDFile['IBLOCK_ID'], $arWDFile['IBLOCK_SECTION_ID']);
				$canEditFiles = static::isAllowEditAttachedFiles($ufEntity);

				if ($dropped || $ibRights->UserHasRightTo($arWDFile['IBLOCK_ID'], $id, 'element_edit'))
				{
					$ibRights->SetRights(static::appendRights($ibRights, $canEditFiles? $arEditRights : $arViewRights, $arTasks));
				}
				else //if view only
				{
					$ibRights->SetRights(static::appendRights($ibRights, $arViewRights, $arTasks));
				}
				if(empty($iblockIds[$arWDFile['IBLOCK_ID']]))
				{
					$iblockIds[$arWDFile['IBLOCK_ID']] = $arWDFile['IBLOCK_ID'];
				}
			}
		}

		global $CACHE_MANAGER;
		foreach ($iblockIds as $iblockId)
		{
			$CACHE_MANAGER->ClearByTag('iblock_id_' . $iblockId);
		}
		unset($iblockId);
	}
}