- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskfiles.php
- Класс: CTaskFiles
- Вызов: CTaskFiles::getFilesAttachedInAccessibleTasks
static function getFilesAttachedInAccessibleTasks($userId, $arFilesIds)
{
$arAccessibleFilesIds = array(); // Array of accessible files ids
$arTasksWithFiles = array(); // Tasks with given files
$arAccessibleTasks = array(); // Tasks that user can access
$arTaskFiles = array(); // Mapped FILE_ID to array of TASK_ID, that contains this file
// Usage of 'f' prefix prevents createing indexed array,
// but forces associative. So, PHP wouldn't fill in the gaps in
// index values.
// It should improves perfomance and prevent big memory usage.
// Init $arTaskFiles
foreach ($arFilesIds as $fileId)
$arTaskFiles['f' . $fileId] = array();
$rsTaskFile = self::GetList(
array(),
array('FILE_ID' => $arFilesIds)
);
while ($arTaskFile = $rsTaskFile->Fetch())
{
$taskId = (int) $arTaskFile['TASK_ID'];
$fileId = (int) $arTaskFile['FILE_ID'];
$arTasksWithFiles[] = $taskId;
$arTaskFiles['f' . $fileId][] = $taskId;
}
$arTasksWithFiles = array_unique($arTasksWithFiles);
$rsTask = CTasks::GetList(
array(),
array('ID' => $arTasksWithFiles),
array('ID'),
array('USER_ID' => $userId)
);
while ($arTask = $rsTask->Fetch())
$arAccessibleTasks[] = (int) $arTask['ID'];
// user can access files, that are already attached to tasks, accessibly by user
foreach ($arFilesIds as $fileId)
{
$arTasksIds = array_unique($arTaskFiles['f' . $fileId]);
if (count(array_intersect($arTasksIds, $arAccessibleTasks)))
$arAccessibleFilesIds[] = (int) $fileId;
}
return ($arAccessibleFilesIds);
}