• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/lib/rightsmanager.php
  • Класс: BitrixReportRightsManager
  • Вызов: RightsManager::getGroupsAndDepartments
public function getGroupsAndDepartments()
{
	$cacheTime = defined('BX_COMP_MANAGED_CACHE') ? 3153600 : 3600*4;
	$cacheId = 'report-rights-'.$this->userId;
	$cacheDir = '/report/rights/'.$this->userId;
	$cache = new CPHPCache;
	if($cache->initCache($cacheTime, $cacheId, $cacheDir))
	{
		$listEntity = $cache->getVars();
	}
	else
	{
		global $CACHE_MANAGER;
		$cache->startDataCache();
		$listEntity = array(Sharing::CODE_USER.$this->userId);
		$userObject = CUser::getByID($this->userId);
		if($userData = $userObject->fetch())
		{
			if(Loader::includeModule('socialnetwork'))
			{
				$queryObject = UserToGroupTable::getList(array(
					'select' => array('GROUP_ID'),
					'filter' => array(
						'USER_ID' => $userData['ID'],
						'ROLE' => array(
							UserToGroupTable::ROLE_USER,
							UserToGroupTable::ROLE_MODERATOR,
							UserToGroupTable::ROLE_OWNER
						)
					)
				));
				while ($groupData = $queryObject->fetch())
					$listEntity[] = Sharing::CODE_SOCNET_GROUP.$groupData['GROUP_ID'];
			}

			if(!empty($userData['UF_DEPARTMENT']))
			{
				$parentDepartmentList = array();
				foreach($userData['UF_DEPARTMENT'] as $departmentId)
					$parentDepartmentList[] = CIntranetUtils::getIBlockTopSection($departmentId);

				$childrenDepartmentList = CIntranetUtils::getIBlockSectionChildren($parentDepartmentList);
				foreach($childrenDepartmentList as $departmentId)
					$listEntity[] = Sharing::CODE_DEPARTMENT.$departmentId;
			}
		}
		$CACHE_MANAGER->startTagCache($cacheDir);
		$CACHE_MANAGER->registerTag("sonet_user2group_U".$this->userId);
		$CACHE_MANAGER->registerTag("USER_CARD_".intval($this->userId/TAGGED_user_card_size));
		$CACHE_MANAGER->endTagCache();
		$cache->endDataCache($listEntity);
	}

	return $listEntity;
}