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