- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/control/task.php
- Класс: BitrixTasksControlTask
- Вызов: Task::addFilesRights
private function addFilesRights($filesIds)
{
$filesIds = array_unique(array_filter($filesIds));
// Nothing to do?
if (empty($filesIds))
return;
if(
!Loader::includeModule('webdav')
|| !Loader::includeModule('iblock')
)
{
return;
}
$arRightsTasks = CWebDavIblock::GetTasks();
$task = $this->getTask();
$task->fillMemberList();
$memberList = $task->getMemberList();
$members = [
$task->getCreatedBy(),
$task->getResponsibleId(),
];
foreach ($memberList as $member)
{
$members[] = $member->getUserId();
}
$members = array_unique($members);
$ibe = new CIBlockElement();
$dbWDFile = $ibe->GetList(
[],
[
'ID' => $filesIds,
'SHOW_NEW' => 'Y'
],
false,
false,
['ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW']
);
if (!$dbWDFile)
{
return;
}
$i = 0;
$arRightsForTaskMembers = array();
foreach ($members as $userId)
{
// For intranet users and their managers
$arRightsForTaskMembers['n' . $i++] = [
'GROUP_CODE' => 'IU' . $userId,
'TASK_ID' => $arRightsTasks['R'] // rights for reading
];
// For extranet users
$arRightsForTaskMembers['n' . $i++] = [
'GROUP_CODE' => 'U' . $userId,
'TASK_ID' => $arRightsTasks['R'] // rights for reading
];
}
$iNext = $i;
while ($arWDFile = $dbWDFile->Fetch())
{
if (!$arWDFile['IBLOCK_ID'])
{
continue;
}
$fileId = $arWDFile['ID'];
if (!CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E")
{
continue;
}
$ibRights = new CIBlockElementRights($arWDFile['IBLOCK_ID'], $fileId);
$arCurRightsRaw = $ibRights->getRights();
// Preserve existing rights
$i = $iNext;
$arRights = $arRightsForTaskMembers;
foreach ($arCurRightsRaw as $arRightsData)
{
$arRights['n' . $i++] = [
'GROUP_CODE' => $arRightsData['GROUP_CODE'],
'TASK_ID' => $arRightsData['TASK_ID']
];
}
$ibRights->setRights($arRights);
}
}