%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/im/lib/integration/intranet/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/im/lib/integration/intranet/department.php |
<?php namespace Bitrix\Im\Integration\Intranet; use Bitrix\Main\Localization\Loc; class Department { const CACHE_TOKEN_TTL = 2592000; // 1 month public static function checkModules() { return \Bitrix\Main\Loader::includeModule('intranet') && \Bitrix\Main\Loader::includeModule("iblock") && \Bitrix\Main\Loader::includeModule("socialnetwork"); } public static function getList() { if (!self::checkModules()) return false; if (\Bitrix\Im\User::getInstance()->isExtranet()) return Array(); $departmentIblockId = (int)\Bitrix\Main\Config\Option::get('intranet', 'iblock_structure', 0); if ($departmentIblockId <= 0) return Array(); $cacheId = 'im_structure_'.$departmentIblockId; $cachePath = '/bx/imc/intranet/department/'; $cache = \Bitrix\Main\Application::getInstance()->getCache(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); if($cache->initCache(self::CACHE_TOKEN_TTL, $cacheId, $cachePath) && false) { return $cache->getVars(); } $taggedCache->startTagCache($cachePath); $sec = \CIBlockSection::GetList( Array("left_margin"=>"asc", "SORT"=>"ASC"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$departmentIblockId), false, Array('ID', 'NAME', 'DEPTH_LEVEL', 'UF_HEAD', 'IBLOCK_SECTION_ID') ); $departments = Array(); while($ar = $sec->GetNext(true, false)) { $departments[$ar['ID']] = Array( 'ID' => (int)$ar['ID'], 'NAME' => $ar['NAME'], 'FULL_NAME' => $ar['DEPTH_LEVEL'] > 1? $ar['NAME'].' / '.$departments[$ar['IBLOCK_SECTION_ID']]['FULL_NAME']: $ar['NAME'], 'MANAGER_USER_ID' => (int)$ar['UF_HEAD'], ); } $taggedCache->registerTag('iblock_id_'.$departmentIblockId); $taggedCache->endTagCache(); $cache->startDataCache(); $cache->endDataCache($departments); return $departments; } public static function getGroup($params) { if (!self::checkModules()) return false; $params = is_array($params)? $params: Array(); if (!isset($params['CURRENT_USER']) && is_object($GLOBALS['USER'])) { $params['CURRENT_USER'] = $GLOBALS['USER']->GetID(); } $userId = intval($params['CURRENT_USER']); if ($userId <= 0) { return false; } $cacheId = 'im_sonet_extranet_v2_'.$userId; $cachePath = '/bx/imc/sonet/extranet'.\Bitrix\Im\Common::getCacheUserPostfix($userId); $cache = \Bitrix\Main\Application::getInstance()->getCache(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); if($cache->initCache(self::CACHE_TOKEN_TTL, $cacheId, $cachePath)) { return $cache->getVars(); } $taggedCache->startTagCache($cachePath); $db = \CSocNetUserToGroup::GetList( array(), array( "USER_ID" => $userId, "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => \CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N" ), false, false, array("ID", "GROUP_ID", "GROUP_NAME") ); $groups = Array(); $groupIds = Array(); while ($row = $db->GetNext(true, false)) { $groupIds[] = $row["GROUP_ID"]; $groups['SG'.$row['GROUP_ID']] = array( 'ID' => 'SG'.$row['GROUP_ID'], 'NAME' => Loc::getMessage('IM_INT_SN_GROUP_EXTRANET', Array('#GROUP_NAME#' => $row['GROUP_NAME'])), 'USERS' => Array() ); $taggedCache->registerTag('sonet_group_'.$row['GROUP_ID']); $taggedCache->registerTag('sonet_user2group_G'.$row['GROUP_ID']); } if (count($groups) <= 0) { return false; } $taggedCache->endTagCache(); $db = \CSocNetUserToGroup::GetList( array(), array( "GROUP_ID" => $groupIds, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y", "USER_CONFIRM_CODE" => false ), false, false, array("ID", "USER_ID", "GROUP_ID") ); while ($ar = $db->GetNext(true, false)) { if($ar["USER_ID"] == $userId) continue; $groups['SG'.$row['GROUP_ID']]['USERS'][] = $ar["USER_ID"]; } $cache->startDataCache(); $cache->endDataCache($groups); return $groups; } }