• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskfiles.php
  • Класс: CTaskFiles
  • Вызов: CTaskFiles::isUserfieldFileAccessibleByUser
static function isUserfieldFileAccessibleByUser($taskId, $fileId, $userId)
{
	/**
	 * @global CUserTypeManager $USER_FIELD_MANAGER
	 */
	global $USER_FIELD_MANAGER;

	$isAccessible = false;

	$fileId = (int) $fileId;

	if ( ! ($fileId >= 1) )
		return (false);

	static $arOrder  = array();
	static $arSelect = array('ID');
	$arFilter = array('ID' => $taskId);
	$arParams = array('USER_ID' => $userId);

	$r = CTasks::GetList($arOrder, $arFilter, $arSelect, $arParams);
	$arTask = $r->Fetch();

	if ( ! $arTask )
		return (false);

	// We got the task, it means user have access to this task and to all files of this task

	$arUserFields = $USER_FIELD_MANAGER->GetUserFields('TASKS_TASK', $arTask['ID'], LANGUAGE_ID, $userId);

	$bFileAttachedToGivenTask = false;

	foreach($arUserFields as $arUserField)
	{
		if ($arUserField['USER_TYPE']['USER_TYPE_ID'] !== 'file')
			continue;

		if ( ! is_array($arUserField['VALUE']) )
			$arUserField['VALUE'] = array($arUserField['VALUE']);

		foreach ($arUserField['VALUE'] as $attachedFileId)
		{
			if ($fileId === (int)$attachedFileId)
			{
				$bFileAttachedToGivenTask = true;
				break;
			}
		}
	}

	if ($bFileAttachedToGivenTask)
		$isAccessible = true;

	return ($isAccessible);
}