• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/iblock.php
  • Класс: CWebDavIblock
  • Вызов: CWebDavIblock::GetReaders
static function GetReaders($ID, $iblockID = null)
{
	static $arValidTasks = null;
	static $readersCache = array();

	$arReaders = array();

	$ID = (int) $ID;
	if ($ID <= 0)
		return $arReaders;

	if (isset($readersCache[$ID]))
		return $readersCache[$ID];

	if ($arValidTasks == null)
	{
		$arTasks = CWebDavIblock::GetTasks();
		$arValidTasks = array();
		foreach ($arTasks as $taskLetter => $taskID)
		{
			$arOperations = CTask::GetOperations($taskID, true);
			if (array_search('element_read', $arOperations) !== false)
				$arValidTasks[$taskID] = true;
		}
	}

	if ($iblockID === null)
	{
		$rElement = CIBlockElement::GetList(
			array(),
			array(
				'ID' => $ID,
				'SHOW_NEW' => 'Y',
			),
			false,
			false,
			array(
				'ID',
				'IBLOCK_ID',
			)
		);

		if ($rElement && $arElement = $rElement->Fetch())
		{
			$iblockID = $arElement['IBLOCK_ID'];
		}
	}

	$iblockID = (int) $iblockID;
	if ($iblockID <= 0)
		return $arReaders;

	$bSocNet = (CModule::IncludeModule('socialnetwork'));

	if (CIBlock::GetArrayByID($iblockID, "RIGHTS_MODE") === "E")
	{
		$ibRights = new CIBlockElementRights($iblockID, $ID);
		$arRights = $ibRights->GetRights();
		foreach($arRights as $rightID => $arRight)
		{
			if (isset($arValidTasks[$arRight['TASK_ID']]))
			{
				$arReaders[] = $arRight['GROUP_CODE'];
				if (
					$bSocNet
					&& preg_match(
							'/^SG(d+)_['.SONET_ROLES_OWNER.SONET_ROLES_MODERATOR.SONET_ROLES_USER.']$/',
							$arRight['GROUP_CODE'],
							$matches
						)
					)
						$arReaders[] = "SG".$matches[1];
			}
		}
	}
	else
	{
		$gr_res = CIBlock::GetGroupPermissions($iblockID);
		foreach($gr_res as $group_id => $perm)
		{
			if ($perm >= 'R')
				$arReaders[] = 'G'.$group_id;
		}
	}

	$readersCache[$ID] = array_unique($arReaders);

	return $readersCache[$ID];
}