- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::GetDepartmentManagers
static function GetDepartmentManagers($arDepartments, $skipUserId = false, $arSelectFields = ['ID'])
{
global $CACHE_MANAGER;
if ((!is_array($arDepartments)) || empty($arDepartments) || (!is_array($arSelectFields)))
{
return false;
}
// We need ID in any case
if (!in_array('ID', $arSelectFields))
{
$arSelectFields[] = 'ID';
}
$arManagers = [];
$obCache = new CPHPCache();
$lifeTime = CTasksTools::CACHE_TTL_UNLIM;
$cacheDir = "/tasks/subordinatedeps";
$cacheFPrint = sha1(
serialize($arDepartments) . '|' . serialize($arSelectFields)
);
if ($obCache->InitCache($lifeTime, $cacheFPrint, $cacheDir))
{
$arManagers = $obCache->GetVars();
}
elseif ($obCache->StartDataCache())
{
$IBlockID = COption::GetOptionInt('intranet', 'iblock_structure', 0);
$CACHE_MANAGER->StartTagCache($cacheDir);
$CACHE_MANAGER->RegisterTag("iblock_id_" . $IBlockID);
$arUserIDs = self::GetDepartmentManagersIDs($arDepartments, $IBlockID);
if (count($arUserIDs) > 0)
{
$arFilter = [
'ID' => implode('|', $arUserIDs),
];
// Prevent using users, that doesn't activate it's account
// http://jabber.bx/view.php?id=29118
if (IsModuleInstalled('bitrix24'))
{
$arFilter['!LAST_LOGIN'] = false;
}
$dbUser = CUser::GetList(
'ID',
'ASC',
$arFilter,
['FIELDS' => $arSelectFields] // selects only $arSelectFields fields
);
while ($arUser = $dbUser->GetNext())
{
$arManagers[(int)$arUser["ID"]] = $arUser;
}
}
$CACHE_MANAGER->EndTagCache();
$obCache->EndDataCache($arManagers);
}
// remove user to be skipped
if (($skipUserId !== false) && (isset($arManagers[(int)$skipUserId])))
{
unset ($arManagers[(int)$skipUserId]);
}
return $arManagers;
}