Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/dav/classes/general/ |
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/dav/classes/general/account.php |
<? includeModuleLangFile(__FILE__); class CDavAccount { private static $accountsCache = array("groups" => array(), "users" => array()); private static $accountsCacheMap = array(); public static function GetAccountByName($name) { if (strlen($name) <= 0) throw new Exception("name"); $arResult = null; if (!strncasecmp("group-", $name, 6) && CModule::IncludeModule("socialnetwork")) { $groupId = intval(substr($name, 6)); if (array_key_exists($groupId, self::$accountsCache["groups"])) return self::$accountsCache["groups"][$groupId]; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => $groupId, "ACTIVE" => "Y"), false, false, array("ID", "SITE_ID", "NAME", "OWNER_ID", "OWNER_EMAIL")); if ($arGroup = $dbGroup->Fetch()) { $arResult = self::ExtractAccountFromGroup($arGroup); self::$accountsCache["groups"][$arGroup["ID"]] = $arResult; } return $arResult; } if (array_key_exists($name, self::$accountsCacheMap)) return self::$accountsCache["users"][self::$accountsCacheMap[$name]]; $dbUsers = \Bitrix\Main\UserTable::getList(array( 'filter' => array("=LOGIN" => $name, "=ACTIVE" => "Y"), 'select' => array("ID", "NAME", "EMAIL", "LAST_NAME", "LOGIN") )); if ($arUser = $dbUsers->fetch()) { $arResult = self::ExtractAccountFromUser($arUser); self::$accountsCache["users"][$arUser["ID"]] = $arResult; self::$accountsCacheMap[$name] = $arUser["ID"]; } return $arResult; } private static function ExtractAccountFromGroup($arGroup) { return array( "ID" => $arGroup["ID"], "TYPE" => "group", "CODE" => "group-".$arGroup["ID"], "SITE_ID" => $arGroup["SITE_ID"], "NAME" => $arGroup["NAME"], "EMAIL" => $arGroup["OWNER_EMAIL"], ); } private static function ExtractAccountFromUser($arUser) { return array( "ID" => $arUser["ID"], "TYPE" => "user", "CODE" => $arUser["LOGIN"], "NAME" => self::FormatUserName($arUser), "EMAIL" => $arUser["EMAIL"], "FIRST_NAME" => $arUser["NAME"], "LAST_NAME" => $arUser["LAST_NAME"], ); } private static function FormatUserName($arUser) { $r = $arUser["NAME"]; if (strlen($r) > 0 && strlen($arUser["LAST_NAME"]) > 0) $r .= " "; $r .= $arUser["LAST_NAME"]; if (strlen($r) <= 0) $r = $arUser["LOGIN"]; return $r; } public static function GetAccountById($account) { if (!is_array($account) || count($account) != 2) throw new Exception("account"); $arResult = null; if ($account[0] == "group") { if (CModule::IncludeModule("socialnetwork")) { if (array_key_exists($account[1], self::$accountsCache["groups"])) return self::$accountsCache["groups"][$account[1]]; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => $account[1], "ACTIVE" => "Y")); if ($arGroup = $dbGroup->Fetch()) { $arResult = self::ExtractAccountFromGroup($arGroup); self::$accountsCache["groups"][$arGroup["ID"]] = $arResult; } return $arResult; } } if (array_key_exists($account[1], self::$accountsCache["users"])) return self::$accountsCache["users"][$account[1]]; $params = array( 'filter' => array("ID" => $account[1], "=ACTIVE" => "Y"), 'select' => array("ID", "NAME", "EMAIL", "LAST_NAME", "LOGIN") ); $dbUsers = \Bitrix\Main\UserTable::getList($params); if ($arUser = $dbUsers->Fetch()) { $arResult = self::ExtractAccountFromUser($arUser); self::$accountsCache["users"][$arUser["ID"]] = $arResult; self::$accountsCacheMap[$arUser["LOGIN"]] = $arUser["ID"]; } return $arResult; } public static function GetAccountsList($type, $arOrder = array(), $arFilter = array()) { $arResult = array(); if ($type == "group") { if (CModule::IncludeModule("socialnetwork")) { $arFilter = array_merge($arFilter, array("ACTIVE" => "Y", "VISIBLE" => "Y")); $dbGroup = CSocNetGroup::GetList($arOrder, $arFilter); if ($arGroup = $dbGroup->Fetch()) $arResult[] = self::ExtractAccountFromGroup($arGroup); return $arResult; } } $arFilter = array_merge($arFilter, array("=ACTIVE" => "Y")); $dbUsers = \Bitrix\Main\UserTable::getList(array( 'filter' => $arFilter, 'select' => array("ID", "NAME", "EMAIL", "LAST_NAME", "LOGIN"), 'order' => array( 'ID' => 'desc' ) )); while ($arUser = $dbUsers->fetch()) $arResult[] = self::ExtractAccountFromUser($arUser); return $arResult; } private static function GetAddressbookExtranetUserFilter($siteId, $arFilter = array()) { if (CModule::IncludeModule('extranet') && (CExtranet::IsExtranetSite($siteId) || !CExtranet::IsIntranetUser($siteId))) { if (!CExtranet::IsExtranetAdmin()) { if (array_key_exists('ID', $arFilter) || empty($arFilter['XML_ID'])) { $arIDs = array_merge(CExtranet::GetMyGroupsUsers($siteId), CExtranet::GetPublicUsers()); if (array_key_exists("ID", $arFilter)) { $arIDs1 = $arFilter["ID"]; $arIDs = array_intersect($arIDs1, $arIDs); } else { $extranet_site = isModuleInstalled('extranet') ? COption::getOptionString('extranet', 'extranet_site') : (isModuleInstalled('bitrix24') ? 'ex' : false); $arFilter['XML_ID'] = array( 'feed-'.$extranet_site, 'task-'.$extranet_site, ); } if (count($arIDs) <= 0) $arFilter['ID'] = 0; } } } else { $arFilter['!UF_DEPARTMENT'] = false; } return $arFilter; } public static function getAddressbookModificationLabel($collectionId) { list($siteId) = $collectionId; $arFilter = self::GetAddressbookExtranetUserFilter($siteId); if (!empty($arFilter['XML_ID'])) unset($arFilter['XML_ID']); $dbUsers = \Bitrix\Main\UserTable::getList(array( 'filter' => $arFilter, 'select' => array('TIMESTAMP_X'), 'order' => array( 'TIMESTAMP_X' => 'desc' ), 'limit' => 1 )); if ($arUser = $dbUsers->fetch()) return $arUser["TIMESTAMP_X"]; return ""; } public static function GetAddressbookContactsList($collectionId, $arFilter = array()) { list($siteId) = $collectionId; $arFilter = self::GetAddressbookExtranetUserFilter($siteId, $arFilter); $arFilter["ACTIVE"] = "Y"; $arResult = array(); $canCache = false; $fromCache = false; if(count($arFilter) == 2 && $arFilter['!UF_DEPARTMENT'] === false) { $canCache = true; $obDavCache = new CPHPCache; $cache_id = 'kp_dav_address_book'; $cache_dir = '/dav/address_book'; if(defined("BX_COMP_MANAGED_CACHE")) $cache_ttl = 2592000; else $cache_ttl = 1200; if($obDavCache->InitCache($cache_ttl, $cache_id, $cache_dir)) { $fromCache = true; $arResult = $obDavCache->GetVars(); } } if (!$fromCache) { $xmlIds = array(); if (!empty($arFilter['XML_ID'])) $xmlIds = (array) $arFilter['XML_ID']; if (empty($xmlIds) || !empty($arFilter['ID'])) { unset($arFilter['XML_ID']); $params = array( 'filter' => $arFilter, 'select' => array( 'ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'EMAIL', 'PERSONAL_BIRTHDAY', 'PERSONAL_PHOTO', 'WORK_PHONE', 'PERSONAL_MOBILE', 'PERSONAL_PHONE', 'WORK_COMPANY', 'WORK_POSITION', 'WORK_WWW', 'PERSONAL_WWW', 'PERSONAL_STREET', 'PERSONAL_CITY', 'PERSONAL_STATE', 'PERSONAL_ZIP', 'PERSONAL_COUNTRY', 'WORK_STREET', 'WORK_CITY', 'WORK_STATE', 'WORK_ZIP', 'WORK_COUNTRY', 'TIMESTAMP_X', 'UF_DEPARTMENT', 'UF_PHONE_INNER' ) ); $dbUsers = \Bitrix\Main\UserTable::getList($params); while ($arUser = $dbUsers->fetch()) { $arUser['UF_DEPARTMENT'] = self::getDepartmentsNames($arUser['UF_DEPARTMENT']); $arResult[] = $arUser; } } if ($canCache) { if (defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->startTagCache($cache_dir); $CACHE_MANAGER->registerTag("USER_CARD"); $CACHE_MANAGER->endTagCache(); } if ($obDavCache->startDataCache()) $obDavCache->endDataCache($arResult); } } global $USER; if ($USER->isAuthorized() and !empty($xmlIds) || empty($arFilter['ID']) and CModule::includeModule('mail')) { $timestampX = self::getAddressbookModificationLabel($collectionId); $extranetSite = isModuleInstalled('extranet') ? COption::getOptionString('extranet', 'extranet_site') : (isModuleInstalled('bitrix24') ? 'ex' : false); $extranetUser = (CModule::IncludeModule("extranet") && !CExtranet::IsIntranetUser()); $rsSite = CSite::getList(($b=''), ($o=''), array('LID' => $siteId)); while ($arSite = $rsSite->fetch()) { if ( (!$extranetUser && $extranetSite && $arSite['LID'] == $extranetSite) || ($extranetUser && $extranetSite && $arSite['LID'] != $extranetSite) ) continue; $server_name = $arSite['SERVER_NAME'] ?: COption::getOptionString('main', 'server_name', ''); $xmlId = 'feed-'.$arSite['LID']; $siteName = !empty($arSite['SITE_NAME']) ? $arSite['SITE_NAME'] : strtoupper($arSite['LID']); if (empty($xmlIds) || in_array($xmlId, $xmlIds) and isModuleInstalled('blog')) { $arResult[] = array( 'ID' => $xmlId, 'LAST_NAME' => getMessage('DAV_BLOG_POST_CONTACT_NAME') . '(' . $siteName . ')', 'EMAIL' => reset(Bitrix\Mail\User::getForwardTo($arSite['LID'], $USER->getId(), 'BLOG_POST')), 'WORK_WWW' => $server_name, 'TIMESTAMP_X' => $timestampX, 'PERSONAL_PHOTO' => array('src' => '/bitrix/modules/dav/images/addressbook/feed.png') ); } $xmlId = 'task-'.$arSite['LID']; if (empty($xmlIds) || in_array($xmlId, $xmlIds) and isModuleInstalled('tasks')) { $arResult[] = array( 'ID' => $xmlId, 'LAST_NAME' => getMessage('DAV_TASK_CONTACT_NAME') . '(' . $siteName . ')', 'EMAIL' => reset(Bitrix\Mail\User::getForwardTo($arSite['LID'], $USER->getId(), 'TASKS_TASK')), 'WORK_WWW' => $server_name, 'TIMESTAMP_X' => $timestampX, 'PERSONAL_PHOTO' => array('src' => '/bitrix/modules/dav/images/addressbook/task.png') ); } } } return $arResult; } /** * @param $departmentIds * @return array */ private static function getDepartmentsNames($departmentIds) { static $cachedDepartments = array(); $notCachedDepartmentIds = array_diff($departmentIds, array_keys($cachedDepartments)); if (!empty($notCachedDepartmentIds)) { $departmentsResult = CIBlockSection::GetList( array(), array('ID' => $notCachedDepartmentIds), false, array('ID', 'NAME') ); while ($department = $departmentsResult->Fetch()) { $cachedDepartments[''. $department['ID'] . ''] = $department; } } $departmentNames = array(); foreach ($departmentIds as $id) { $departmentNames[] = $cachedDepartments[$id]; } return $departmentNames; } } ?>