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