Exemple #1
0
 function IsUserModuleAdmin($userID, $site_id = SITE_ID)
 {
     global $DB, $CACHE_MANAGER;
     static $arSocnetModuleAdminsCache = array();
     if ($userID <= 0) {
         return false;
     }
     if ($site_id && !is_array($site_id)) {
         $site_id = array($site_id, false);
     } elseif ($site_id && is_array($site_id)) {
         $site_id = array_merge($site_id, array(false));
     }
     $cache_key = serialize($site_id);
     if (!array_key_exists($cache_key, $arSocnetModuleAdminsCache)) {
         $cache = new CPHPCache();
         $cache_time = 31536000;
         $cache_id = 'site' . ($site_id ? '_' . implode('|', $site_id) : '');
         $cache_path = "/sonet/user_admin/";
         $arModuleAdmins = array();
         if ($cache->InitCache($cache_time, $cache_id, $cache_path)) {
             $arCacheVars = $cache->GetVars();
             $arModuleAdmins = $arCacheVars["RESULT"];
         } else {
             $cache->StartDataCache($cache_time, $cache_id, $cache_path);
             if (!$site_id) {
                 $strSqlSite = "AND MG.SITE_ID IS NULL";
             } else {
                 $strSqlSite = " AND (";
                 foreach ($site_id as $i => $site_id_tmp) {
                     if ($i > 0) {
                         $strSqlSite .= " OR ";
                     }
                     $strSqlSite .= "MG.SITE_ID " . ($site_id_tmp ? "= '" . $DB->ForSQL($site_id_tmp) . "'" : "IS NULL");
                 }
                 $strSqlSite .= ")";
             }
             $strSql = "SELECT " . "UG.USER_ID U_ID, " . "G.ID G_ID, " . CDatabase::DatetimeToTimestampFunction("UG.DATE_ACTIVE_FROM") . " UG_DATE_FROM_TS, " . 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 " . "\t(G.ID = MG.GROUP_ID or G.ID = 1) " . "\tAND MG.MODULE_ID = 'socialnetwork' " . "\tAND G.ID = UG.GROUP_ID " . "\tAND G.ACTIVE = 'Y' " . "\tAND G_ACCESS >= 'W'\t" . "\tAND (G.ANONYMOUS<>'Y' OR G.ANONYMOUS IS NULL) " . $strSqlSite . " " . "GROUP BY " . "\tUG.USER_ID, G.ID";
             $result = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
             while ($ar = $result->Fetch()) {
                 if (!array_key_exists($ar["U_ID"], $arModuleAdmins)) {
                     $arModuleAdmins[$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"]);
                 }
             }
         }
         $arCacheData = array("RESULT" => $arModuleAdmins);
         $cache->EndDataCache($arCacheData);
         foreach ($arModuleAdmins 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($arModuleAdmins[$key]);
             }
         }
         $arSocnetModuleAdminsCache[$cache_key] = $arModuleAdmins;
     }
     return array_key_exists($userID, $arSocnetModuleAdminsCache[$cache_key]);
 }