%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/socialnetwork/lib/ |
Current File : /home/bitrix/www/bitrix/modules/socialnetwork/lib/user.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage socialnetwork * @copyright 2001-2012 Bitrix */ namespace Bitrix\Socialnetwork; use Bitrix\Main; use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class User { static $moduleAdminListCache = array(); public static function getModuleAdminList($siteIdList) { $cacheKey = serialize($siteIdList); if (!array_key_exists($cacheKey, self::$moduleAdminListCache)) { $cache = new \CPHPCache; $cacheTime = 31536000; $cacheId = 'site'.($siteIdList ? '_'.implode('|', $siteIdList) : '').'new'; $cachePath = "/sonet/user_admin/"; $adminList = $moduleAdminList = array(); if ($cache->initCache($cacheTime, $cacheId, $cachePath)) { $cacheVars = $cache->getVars(); $adminList = $cacheVars["ADMIN"]; $moduleAdminList = $cacheVars["MODULE_ADMIN"]; } else { $cache->startDataCache($cacheTime, $cacheId, $cachePath); $connection = Main\HttpApplication::getConnection(); $helper = $connection->getSqlHelper(); $sql = "SELECT UG.USER_ID U_ID, MAX(".\CDatabase::datetimeToTimestampFunction("UG.DATE_ACTIVE_FROM").") UG_DATE_FROM_TS, MAX(".\CDatabase::datetimeToTimestampFunction("UG.DATE_ACTIVE_TO").") UG_DATE_TO_TS FROM b_user_group UG WHERE UG.GROUP_ID = 1 GROUP BY UG.USER_ID"; $result = $connection->query($sql); while($ar = $result->fetch()) { if(!array_key_exists($ar["U_ID"], $moduleAdminList)) { $adminList[$ar["U_ID"]] = array( "USER_ID" => $ar["U_ID"], "DATE_FROM_TS" => $ar["UG_DATE_FROM_TS"], "DATE_TO_TS" => $ar["UG_DATE_TO_TS"] ); } } if(!$siteIdList) { $sqlSite = "AND MG.SITE_ID IS NULL"; } else { $sqlSite = " AND ("; foreach($siteIdList as $i => $siteId) { if($i > 0) { $sqlSite .= " OR "; } $sqlSite .= "MG.SITE_ID " . ($siteId ? "= '" . $helper->forSQL($siteId) . "'" : "IS NULL"); } $sqlSite .= ")"; } $sql = "SELECT UG.USER_ID U_ID, G.ID G_ID, MAX(".\CDatabase::datetimeToTimestampFunction("UG.DATE_ACTIVE_FROM").") UG_DATE_FROM_TS, MAX(".\CDatabase::datetimeToTimestampFunction("UG.DATE_ACTIVE_TO").") UG_DATE_TO_TS, MAX(MG.G_ACCESS) G_ACCESS FROM b_user_group UG, b_module_group MG, b_group G WHERE G.ID = UG.GROUP_ID AND ( G.ID = MG.GROUP_ID AND MG.MODULE_ID = 'socialnetwork' AND G.ACTIVE = 'Y' AND G_ACCESS >= 'W' AND ( G.ANONYMOUS <> 'Y' OR G.ANONYMOUS IS NULL ) ". $sqlSite ." ) GROUP BY UG.USER_ID, G.ID"; $result = $connection->query($sql); while($ar = $result->fetch()) { if(!array_key_exists($ar["U_ID"], $moduleAdminList)) { $moduleAdminList[$ar["U_ID"]] = array( "USER_ID" => $ar["U_ID"], "DATE_FROM_TS" => $ar["UG_DATE_FROM_TS"], "DATE_TO_TS" => $ar["UG_DATE_TO_TS"] ); } } } $cacheData = Array( "ADMIN" => $adminList, "MODULE_ADMIN" => $moduleAdminList ); $cache->endDataCache($cacheData); foreach ($adminList as $key => $arUserData) { if ( ( !empty($arUserData["DATE_FROM_TS"]) && $arUserData["DATE_FROM_TS"] > time() ) || ( !empty($arUserData["DATE_TO_TS"]) && $arUserData["DATE_TO_TS"] < time() ) ) { unset($adminList[$key]); } } foreach ($moduleAdminList as $key => $arUserData) { if ( ( !empty($arUserData["DATE_FROM_TS"]) && $arUserData["DATE_FROM_TS"] > time() ) || ( !empty($arUserData["DATE_TO_TS"]) && $arUserData["DATE_TO_TS"] < time() ) || ( isset($adminList[$key]) && ( empty($adminList[$key]["DATE_TO_TS"]) || $adminList[$key]["DATE_TO_TS"] > $arUserData["DATE_FROM_TS"] ) ) ) { unset($moduleAdminList[$key]); } } self::$moduleAdminListCache[$cacheKey] = $adminList + $moduleAdminList; } return self::$moduleAdminListCache[$cacheKey]; } }