if (!$client_ip) { $client_ip = $_SERVER['REMOTE_ADDR']; } $client_region = getRegionFromIP($client_ip); $fallback_region = getFallbackRegion($client_region); $use_this_region = throttleGeoIPRegion($client_region); $region_id = false; if ($use_this_region && $client_region) { $region_id = $client_region; } else { if (!$use_this_region && $fallback_region) { $region_id = $fallback_region; } } if ($region_id) { $mirrors = $sdo->get("\n SELECT\n mirror_mirrors.id,\n baseurl,\n rating\n FROM \n mirror_mirrors\n JOIN\n mirror_location_mirror_map ON mirror_mirrors.id = mirror_location_mirror_map.mirror_id\n LEFT JOIN\n mirror_lmm_lang_exceptions AS lang_exc ON (mirror_location_mirror_map.id = lang_exc.location_mirror_map_id AND NOT lang_exc.language = '%s')\n INNER JOIN\n geoip_mirror_region_map ON (geoip_mirror_region_map.mirror_id = mirror_mirrors.id)\n WHERE\n mirror_location_mirror_map.location_id = %d AND\n geoip_mirror_region_map.region_id = %d AND\n mirror_mirrors.active='1' AND \n mirror_location_mirror_map.active ='1' \n ORDER BY rating", array($where_lang, $location['id'], $client_region), MYSQL_ASSOC, 'id'); } } // If we're here we've fallen back to global $fallback_global = getGlobalFallbackProhibited($client_region); if (empty($mirrors) && !$fallback_global) { // either no region chosen or no mirror found in the given region $mirrors = $sdo->get("\n SELECT\n mirror_mirrors.id,\n baseurl,\n rating\n FROM \n mirror_mirrors,\n mirror_location_mirror_map\n LEFT JOIN\n mirror_lmm_lang_exceptions AS lang_exc ON (mirror_location_mirror_map.id = lang_exc.location_mirror_map_id AND NOT lang_exc.language = '%s')\n WHERE\n mirror_mirrors.id = mirror_location_mirror_map.mirror_id AND\n mirror_location_mirror_map.location_id = %d AND\n mirror_mirrors.active='1' AND \n mirror_location_mirror_map.active ='1' \n ORDER BY rating", array($where_lang, $location['id']), MYSQL_ASSOC, 'id'); } $mirrors_rand = array(); $sum = 0; foreach ($mirrors as $buf) { $mirrors_rand[$buf['id']] = $buf['rating']; $sum += $buf['rating']; } $mirror_rand_id = getRandElement($mirrors_rand, $sum);