if ($szLayer == '') { continue; } // Nom du layer pour le GetLegendGraphic de la legende $szLayer_legend = $szLayer; // si plus d'une couche dans un ajouter service web : on prend le premier nom du layer pour le GetLegendGraphic de la legende if (strstr($szLayer_legend, ',')) { list($szLayer_legend) = explode(",", $szLayer_legend); } $szLayer_legend = str_replace(" ", ",", $szLayer_legend); $szURL = strrpos($aszURLs[$i], '?') === false ? $aszURLs[$i] . '?' : $aszURLs[$i]; $szFormat = $aszFormats[$i]; $szOpacity = $aszOpacity[$i]; $szTime = $aszTimes[$i]; $szLegendTitle = $aszTitles[$i]; $igoController = new IgoController(); //TODO afficher des messages d'erreur pour les URLS qui //ne fonctionne pas. $szUrl = $igoController->verifierPermis($szURL); if ($szURL === false) { continue; } if ($showLegend) { if ($hasbaselayer == "false" || $i != 0) { // Construit requete GetLegendGraphic $getLegendGraphic = $szURL . "&TRANSPARENT=TRUE&NOCACHE=0.39793555804004654&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&LAYER=" . $szLayer_legend . "&FORMAT=image%2Fpng"; // Requete a GetLegendGraphic $resource = curl_file_get_contents($getLegendGraphic); if (strpos($resource, '<?xml') !== false) { continue; }
function proxyNavigateur() { //todo: http://php.net/manual/en/function.curl-setopt.php global $app; $config = $app->getDI()->get("config"); $method = $_SERVER['REQUEST_METHOD']; if ($method !== "GET" && $method !== "POST") { http_response_code(405); die("Seules les méthodes POST ou GET sont autorisées"); } $paramsGet = $_GET; $paramsPost = $method == "POST" ? $_POST : array(); $options = array(); $files = count($_FILES) > 0 ? $_FILES : null; if ($files != null) { $options['files'] = $files; } $service = urldecode(isset($paramsPost['_service']) ? $paramsPost['_service'] : $paramsGet['_service']); unset($paramsPost['_service']); unset($paramsGet['_service']); unset($paramsPost['_url']); unset($paramsGet['_url']); unset($paramsPost['_client_IP']); unset($paramsGet['_client_IP']); //Session $session = $app->getDI()->getSession(); if (!$session->has("info_utilisateur")) { http_response_code(401); die("Vous devez être connecté pour utiliser ce service"); } //Services $igoController = new IgoController(); $url = $igoController->verifierPermis($service); if ($url === false) { http_response_code(403); die("Vous n'avez pas les droits pour ce service."); } $protocole = strtolower(substr($_SERVER["SERVER_PROTOCOL"], 0, strpos($_SERVER["SERVER_PROTOCOL"], '/'))) . '://'; if (isset($url) && is_string($url) && $url !== "") { //$url = str_replace("//localhost/","//".$appelant."/", $url); if (substr($url, 0, 1) === "/") { //$url = $protocole.$appelant.$url; $url = $protocole . "localhost" . $url; } } else { http_response_code(403); die("Ce service n'est pas permis."); } $urlParse = parse_url($url); if (!isset($urlParse['scheme']) || $urlParse['scheme'] . "://" != $protocole) { http_response_code(403); die('Seul le protocole (' . $protocole . ') est valide'); } $encodage = isset($paramsPost['_encodage']) ? $paramsPost['_encodage'] : (isset($paramsGet['_encodage']) ? $paramsGet['_encodage'] : NULL); if ($encodage != NULL) { $options['encodage'] = $encodage; unset($paramsPost['_encodage']); unset($paramsGet['_encodage']); } //ajouter la clé if (isset($paramsPost['_cle'])) { $_cle = $paramsPost['_cle']; $cleM = "POST"; } else { if (isset($paramsGet['_cle'])) { $_cle = $paramsGet['_cle']; $cleM = "GET"; } } if (isset($_cle)) { if ($session->has("info_utilisateur") && isset($config['profilsDroit'])) { //utilisateur if ($session->info_utilisateur->identifiant && isset($config->profilsDroit[$session->info_utilisateur->identifiant]["cles"])) { $clesUser = $config->profilsDroit[$session->info_utilisateur->identifiant]["cles"]; if (isset($clesUser[$_cle])) { $cle = $clesUser[$_cle]; } } //profils if (!isset($cle) && isset($session->info_utilisateur->profils)) { $profilActif = $session->info_utilisateur->profilActif; $nbProfils = count($session->info_utilisateur->profils); foreach ($session->info_utilisateur->profils as $key => $value) { if (is_array($value)) { $idValue = $value["id"]; $profil = $value["libelle"]; } else { $idValue = $value->id; $profil = $value->libelle; } if ($nbProfils === 1 || $idValue == $profilActif) { if (isset($profil) && isset($config->profilsDroit[$profil]["cles"])) { $clesProfil = $config->profilsDroit[$profil]["cles"]; if (isset($clesProfil[$_cle])) { $cle = $clesProfil[$_cle]; } } break; } } } } if (!isset($cle)) { if (isset($config['cles'][$_cle])) { $cle = $config['cles'][$_cle]; } else { $cle = $_cle; } } unset($paramsPost['_cle']); unset($paramsGet['_cle']); if ($cleM == "POST") { $paramsPost['_client_IP'] = ObtenirAdresseIP($_SERVER); $paramsPost['cle'] = $cle; } else { $paramsGet['_client_IP'] = ObtenirAdresseIP($_SERVER); $paramsGet['cle'] = $cle; } } if (count($paramsGet) != 0) { if (strpos($url, '?') === false) { $url = $url . '?'; } else { if (substr($url, -1) !== '?') { $url = $url . '&'; } } $url = $url . http_build_query($paramsGet); //remplacer les parametres array ([0]= , [1]= , ...) par le même nom. //todo en faire une option? $url = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $url); } proxyRequestNavigateur($url, $paramsPost, $method, $options); }