• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
  • Класс: CCalendar
  • Вызов: CCalendar::UpdateUFRights
static function UpdateUFRights($files, $rights, $ufEntity = [])
{
	global $USER;
	$arTasks = self::getTasksForUpdateUFRights();

	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 (!Loader::includeModule('iblock') || !Loader::includeModule('webdav'))
		return false;

	$arFiles = [];
	foreach($files as $id)
	{
		$id = (int)$id;
		if ($id)
		{
			$arFiles[] = $id;
		}
	}

	if (empty($arFiles))
	{
		return false;
	}

	$arCodes = [];
	foreach($rights as $value)
	{
		if (mb_strpos($value, 'SG') === 0)
		{
			$arCodes[] = $value . '_K';
		}
		$arCodes[] = $value;
	}
	$arCodes = array_unique($arCodes);

	$i = 0;
	$arViewRights = $arEditRights = [];
	$curUserID = 'U'.$USER->GetID();
	foreach($arCodes 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'],
		);
	}

	$ibe = new CIBlockElement();
	$dbWDFile = $ibe->GetList([], array('ID' => $arFiles, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW'));
	$iblockIds = [];
	if ($dbWDFile)
	{
		while ($arWDFile = $dbWDFile->Fetch())
		{
			$id = $arWDFile['ID'];

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

			if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E")
			{
				$ibRights = CWebDavIblock::_get_ib_rights_object('ELEMENT', $id, $arWDFile['IBLOCK_ID']);
				$ibRights->SetRights(CWebDavTools::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);
	}
}