- Модуль: 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];
}