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