- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskcomments.php
- Класс: CTaskComments
- Вызов: CTaskComments::addFilesRights
static function addFilesRights($taskId, $arFilesIds)
{
$arFilesIds = array_unique(array_filter($arFilesIds));
// Nothing to do?
if (empty($arFilesIds))
return;
if(!CModule::IncludeModule('webdav') || !CModule::IncludeModule('iblock'))
return;
$arRightsTasks = CWebDavIblock::GetTasks(); // tasks-operations
try
{
$oTask = new CTaskItem((int)$taskId, CTasksTools::getCommanderInChief());
$arTask = $oTask->getData(false);
}
catch (TasksException | CTaskAssertException $e)
{
return;
}
$arTaskMembers = array_unique(array_merge(
array($arTask['CREATED_BY'], $arTask['RESPONSIBLE_ID']),
$arTask['AUDITORS'],
$arTask['ACCOMPLICES']
));
$ibe = new CIBlockElement();
$dbWDFile = $ibe->GetList(
array(),
array('ID' => $arFilesIds, 'SHOW_NEW' => 'Y'),
false,
false,
array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW')
);
if ($dbWDFile)
{
$i = 0;
$arRightsForTaskMembers = array();
foreach ($arTaskMembers as $userId)
{
// For intranet users and their managers
$arRightsForTaskMembers['n' . $i++] = array(
'GROUP_CODE' => 'IU' . $userId,
'TASK_ID' => $arRightsTasks['R'] // rights for reading
);
// For extranet users
$arRightsForTaskMembers['n' . $i++] = array(
'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")
{
$ibRights = new CIBlockElementRights($arWDFile['IBLOCK_ID'], $fileId);
$arCurRightsRaw = $ibRights->getRights();
// Preserve existing rights
$i = $iNext;
$arRights = $arRightsForTaskMembers;
foreach ($arCurRightsRaw as $arRightsData)
{
$arRights['n' . $i++] = array(
'GROUP_CODE' => $arRightsData['GROUP_CODE'],
'TASK_ID' => $arRightsData['TASK_ID']
);
}
$ibRights->setRights($arRights);
}
}
}
}