public function arbreCouchesEditAction($param = null) { //var_dump($this->udate()); $deleted = false; $params = array(); parse_str($param, $params); $contexte_id = isset($params['contexte_id']) ? $params['contexte_id'] : $this->request->get('contexte_id'); if (!$contexte_id) { $this->flash->error("igo_contexte non-trouvé"); return $this->dispatcher->forward(array("controller" => "igo_contexte", "action" => "index")); } //On récupére les données du formulaire Associer des groupes et des couches if (isset($_POST['valeursArbo'])) { $valeurs = json_decode($_POST['valeursArbo']); //On récupéres les données de la rétro d'un mapfile } else { $valeurs = $_POST; } //Sauvegarde des items du formulaire $igoCoucheContexte = false; foreach ($valeurs as $name => $valeur) { if (!$deleted) { $phql = "DELETE FROM IgoCoucheContexte WHERE contexte_id={$contexte_id}"; $this->modelsManager->executeQuery($phql); $deleted = true; //var_dump($deleted); } $arbre_id = null; $couche_id = null; $changed = false; $type = null; $titre = null; $ordre = 0; if ('T' == substr($name, 1, 1)) { $titre = $valeur; } if ('O' == substr($name, 1, 1)) { $ordre = $valeur; } //Déterminer à quoi on a affaire if ('G' == substr($name, 0, 1)) { $type = 'groupe'; $a = explode("_", substr($name, 2)); array_shift($a); $arbre_id = implode('_', $a); $groupe_id = array_pop($a); } elseif ('CX' == substr($name, 0, 2)) { $type = 'colonne'; $a = explode("_", substr($name, 2)); $attribut_id = array_pop($a); array_shift($a); $arbre_id = implode('_', $a); $couche_id = substr($name, 2, strpos($name, "_") - 2); } elseif ('C' == substr($name, 0, 1)) { $type = 'couche'; $a = explode("_", substr($name, 2)); array_shift($a); $arbre_id = implode('_', $a); $couche_id = explode("_", substr($name, 2))[0]; } if (isset($valeur) && $valeur != 0) { // printf("name: %s, arbre_id: %s, groupe_id: %s, couche_id: %s, type: %s, valeur: %s<br>", $name, $arbre_id, $groupe_id, $couche_id, $type, $valeur); } //Tenter de récupérer le igo_couche_contexte associé switch ($type) { case 'groupe': // echo "1"; if (!$igoCoucheContexte || $igoCoucheContexte->arbre_id != $arbre_id || $igoCoucheContexte->couche_id != null || $igoCoucheContexte->attribut_id != null) { // echo "-1R"; $igoCoucheContexte = null; //$igoCoucheContexte = IgoCoucheContexte::findFirst("contexte_id={$contexte_id} AND groupe_id={$groupe_id} AND couche_id IS NULL AND attribut_id is null"); // var_dump($igoCoucheContexte); } break; case 'colonne': // echo "3"; if (!$igoCoucheContexte || $igoCoucheContexte->arbre_id != $arbre_id || $igoCoucheContexte->couche_id != $couche_id || $igoCoucheContexte->attribut_id != $attribut_id) { // echo "-3R"; $igoCoucheContexte = null; //$igoCoucheContexte = IgoCoucheContexte::findFirst("contexte_id={$contexte_id} AND groupe_id={$groupe_id} AND attribut_id={$attribut_id} AND couche_id={$couche_id}"); } break; case 'couche': // echo "2"; if (!$igoCoucheContexte || $igoCoucheContexte->arbre_id != $arbre_id || $igoCoucheContexte->couche_id != $couche_id || $igoCoucheContexte->attribut_id != null) { // echo "-2R"; $igoCoucheContexte = null; //$igoCoucheContexte = IgoCoucheContexte::findFirst("contexte_id={$contexte_id} AND groupe_id={$groupe_id} AND couche_id={$couche_id} AND attribut_id is null"); //var_dump("contexte_id={$contexte_id} AND groupe_id={$groupe_id} AND couche_id={$couche_id} AND attribut_id is null"); } break; } //On n'a pas trouvé le igo_couche_contexte associé if (!$igoCoucheContexte && $valeur) { //echo "***Création***"; $changed = true; $igoCoucheContexte = new IgoCoucheContexte(); $igoCoucheContexte->contexte_id = $contexte_id; //Initialiser les champs du contexte switch ($type) { case 'groupe': $igoGroupe = IgoGroupe::findFirst("id=" . $groupe_id); if (!$igoGroupe) { $this->flash->error("Le groupe « {$groupe_id} » n'existe pas."); } $igoCoucheContexte->groupe_id = $groupe_id; $igoCoucheContexte->arbre_id = $arbre_id; $igoCoucheContexte->ind_fond_de_carte = 'D'; $igoCoucheContexte->mf_layer_meta_name = $igoGroupe->nom; $igoCoucheContexte->mf_layer_meta_title = $igoGroupe->nom; if (!is_null($titre) && "" != $titre) { $igoCoucheContexte->mf_layer_meta_group_title = $titre; } if (!is_null($ordre)) { $igoCoucheContexte->layer_a_order = $ordre; } $igoCoucheContexte->mf_layer_meta_z_order = $igoGroupe->mf_layer_meta_z_order; break; case 'colonne': $igoCoucheContexte->couche_id = $couche_id; $igoCoucheContexte->groupe_id = $groupe_id; $igoCoucheContexte->arbre_id = $arbre_id; $igoCoucheContexte->attribut_id = $attribut_id; $igoCoucheContexte->ind_fond_de_carte = 'D'; //$igoCoucheContexte->couche_id = $couche_id; break; case 'couche': $igoCouche = IgoCouche::findFirst('id=' . $couche_id); if (!$igoCouche) { $this->flash->error("La couche ayant le igo_couche.id « {$couche_id} » n'existe pas."); } $igoCoucheContexte->groupe_id = $groupe_id; $igoCoucheContexte->couche_id = $couche_id; $igoCoucheContexte->arbre_id = $arbre_id; $igoCoucheContexte->ind_fond_de_carte = 'D'; $igoCoucheContexte->mf_layer_meta_name = $igoCouche->mf_layer_meta_name; $igoCoucheContexte->mf_layer_meta_title = $igoCouche->mf_layer_meta_title; $igoCoucheContexte->mf_layer_meta_z_order = $igoCouche->mf_layer_meta_z_order; if (!is_null($titre)) { $igoCoucheContexte->mf_layer_meta_group_title = $titre; $igoCoucheContexte->mf_layer_meta_title = $titre; } if (!is_null($ordre)) { $igoCoucheContexte->layer_a_order = $ordre; } break; } } if ($igoCoucheContexte) { //Modifier la valeur de l'attribut $valeur = $valeur == '1'; $attribut = substr($name, 1, 1); switch ($attribut) { case "V": $changed = $changed || $igoCoucheContexte->est_visible != $valeur; $igoCoucheContexte->est_visible = $valeur; break; case "A": $changed = $changed || $igoCoucheContexte->est_active != $valeur; $igoCoucheContexte->est_active = $valeur; break; case "X": $changed = $changed || $igoCoucheContexte->est_exclu != $valeur; $igoCoucheContexte->est_exclu = $valeur; break; case "T": if (!is_null($titre) && "" != $titre) { $changed = $changed || $igoCoucheContexte->mf_layer_meta_group_title != $titre; $igoCoucheContexte->mf_layer_meta_group_title = $titre; } break; case "O": if (!is_null($ordre)) { $changed = $changed || $igoCoucheContexte->layer_a_order != $ordre; $igoCoucheContexte->layer_a_order = $ordre; } break; } } if ($changed) { if (!$igoCoucheContexte->save()) { foreach ($igoCoucheContexte->getMessages() as $message) { $this->flash->error($message); } } } } $contexteController = new IgoContexteController(); $contexteController->saveMapFile($contexte_id); $igo_contexte = IgoContexte::findFirstByid($contexte_id); if (!$igo_contexte) { $this->flash->error("igo_contexte non-trouvé"); return $this->dispatcher->forward(array("controller" => "igo_contexte", "action" => "index")); } $profils = $this->session->get("profils"); $liste_profil_id_utilisateur = array(); if ($profils) { foreach ($profils as $profil) { array_push($liste_profil_id_utilisateur, $profil["id"]); } } $liste_profil_id_utilisateur = implode(",", $liste_profil_id_utilisateur); if (!$liste_profil_id_utilisateur) { $liste_profil_id_utilisateur = 0; } $sql = " select 'G'::character varying(1) AS type,\r\n gr.groupe_id as id,\r\n gr.nom,\r\n cc.mf_layer_meta_group_title AS mf_layer_meta_group_title,\r\n gr.groupe_id AS groupe_id,\r\n NULL::integer AS attribut_id,\r\n COALESCE(cc.est_visible, false) AS visible,\r\n COALESCE(cc.est_active, false) AS active,\r\n COALESCE(cc.est_exclu, false) AS exclu,\r\n NULL::text AS colonne,\r\n NULL::boolean AS est_commune,\r\n NULL::integer AS couche_id,\r\n cc.id AS couche_contexte_id,\r\n cc.layer_a_order AS layer_a_order,\r\n true AS association_est_association,\r\n COALESCE(cc.arbre_id, gr.grp) as grp,\r\n (length(grp) - length(replace(grp, '_'::text, ''::text))) as len\r\n from igo_vue_groupes_recursif gr\r\n LEFT JOIN igo_couche_contexte cc ON cc.arbre_id=grp AND cc.contexte_id={$contexte_id} and cc.couche_id IS NULL\r\n --LEFT JOIN igo_vue_permissions_pour_groupes pg ON pg.profil_id IN ({$liste_profil_id_utilisateur})\r\n UNION\r\n select 'C'::character varying(1) AS type,\r\n c.id,\r\n c.mf_layer_meta_title AS nom,\r\n cc.mf_layer_meta_group_title AS mf_layer_meta_group_title,\r\n gc.groupe_id AS groupe_id,\r\n igo_attribut.id AS attribut_id,\r\n COALESCE(cc.est_visible,false) AND cc.arbre_id = gr.grp AS visible,\r\n COALESCE(cc.est_active,false) AND cc.arbre_id = gr.grp AS active,\r\n COALESCE(cc2.est_exclu,false) AND igo_attribut.id = cc2.attribut_id AS exclu,\r\n igo_attribut.colonne AS colonne,\r\n c.est_commune AS est_commune,\r\n c.id AS couche_id,\r\n cc.id AS couche_contexte_id,\r\n COALESCE(NULLIF(cc.layer_a_order, 0), c.layer_a_order) AS layer_a_order,\r\n igo_vue_permissions_pour_couches.est_association AS association_est_association,\r\n COALESCE(cc.arbre_id, gr.grp) as grp,\r\n (length(grp) - length(replace(grp, '_'::text, ''::text))) as len\r\n from igo_vue_groupes_recursif gr\r\n JOIN igo_groupe_couche gc ON gc.groupe_id=gr.groupe_id\r\n JOIN igo_couche c ON gc.couche_id=c.id\r\n JOIN igo_geometrie ON c.geometrie_id = igo_geometrie.id\r\n LEFT JOIN igo_attribut ON igo_attribut.geometrie_id = igo_geometrie.id\r\n LEFT JOIN igo_couche_contexte cc ON c.id=cc.couche_id AND cc.contexte_id={$contexte_id} and cc.arbre_id=grp and cc.attribut_id IS NULL\r\n LEFT JOIN igo_couche_contexte cc2 ON c.id=cc.couche_id AND cc.contexte_id={$contexte_id} and cc.arbre_id=grp and cc2.attribut_id IS NOT NULL and cc2.attribut_id=igo_attribut.id\r\n LEFT JOIN igo_vue_permissions_pour_couches ON igo_vue_permissions_pour_couches.couche_id = cc.id \r\nORDER BY grp, len, type DESC, layer_a_order"; //echo $sql; $igo_groupe = new IgoGroupe(); $igo_groupe = new Resultset(null, $igo_groupe, $igo_groupe->getReadConnection()->query($sql)); //$igo_groupe=$this->modelsManager->executeQuery($sql); $this->view->setVar("arbre", $igo_groupe); // var_dump($this->udate()); }
function wms_proxy($contexteId) { global $app; $httprequest = new Phalcon\Http\Request(); $httprequest->setDI($app->getDI()); //Possible sanitize filters: string, email, int, float, alphanum, striptags, trim, lower, upper $filter = new \Phalcon\Filter(); if ($httprequest->isGet() || $httprequest->isPost()) { $datain = $httprequest->get(); $data = array(); foreach ($datain as $key => $value) { $data[strtoupper($key)] = $value; } $service = $filter->sanitize($data["SERVICE"], array("string", "upper")); $request = $filter->sanitize($data["REQUEST"], array("string", "upper")); } else { // TODO : Gérer l'erreur, on ne peut appeler un service wms en put ou en delete. error_log("not a get or a post?"); return; } error_log("service: {$service}, request: {$request}"); if ($service === "WMS") { $config = $app->getDI()->get("config"); $mapserver = $config['mapserver']['host'] . $config['mapserver']['mapserver_path'] . $config['mapserver']['executable']; $contexte = IgoContexte::findFirst("id='{$contexteId}'"); $map = $config['mapserver']['mapfileCacheDir'] . $config['mapserver']['contextesCacheDir'] . $contexte->code . ".map"; $method = $httprequest->getMethod(); $data = $httprequest->get(); $data["MAP"] = $map; $response = null; switch ($request) { case "GETCAPABILITIES": $response = proxy_request($mapserver, $data, $method); // Devrait-on enlever les couches non permises en lecture de la réponse.? C'est probablement trop complexe... break; case "GETMAP": case "GETFEATUREINFO": case "DESCRIBELAYER": case "GETLEGENDGRAPHIC": $authentificationModule = obtenirAuthentificationModule(); if ($authentificationModule === null) { $response = proxy_request($mapserver, $data, $method); } else { if (isset($data["LAYERS"])) { $couches = explode(",", $data["LAYERS"]); } else { $couches = explode(",", $data["LAYER"]); } foreach ($couches as $couche) { $igoVueContexteCoucheNavigateur = IgoVueContexteCoucheNavigateur::findFirst("mf_layer_name='{$couche}'"); $coucheContexte = array($igoVueContexteCoucheNavigateur); if ($igoVueContexteCoucheNavigateur === false) { $coucheContexte = IgoVueContexteCoucheNavigateur::find("mf_layer_group='{$couche}' and contexte_id='{$contexteId}'"); } if (count($coucheContexte) === 0) { // L'utilisateur essaie d'appeler la couche root du mapfile qui consiste à toutes les couches. // Nous interdissons ce type d'appels pour le moment. die("Forbidden"); } $estPermis = false; foreach ($coucheContexte as $igoVueContexteCoucheNavigateur) { $permission = obtenirPermission($igoVueContexteCoucheNavigateur->couche_id); if ($permission !== null && $permission->est_lecture) { $estPermis = true; break; } } if (!$estPermis) { die("Forbidden"); } } $response = proxy_request($mapserver, $data, $method); } break; default: break; } $headerArray = explode("\r\n", $response["header"]); foreach ($headerArray as $headerLine) { header($headerLine); } echo $response["content"]; } else { die("Seul les services WMS sont pris en charge par ce proxy."); } }
public function contexteAction($code) { $this->definirVariablesCommunes(); $this->view->setVar("titre", "Navigateur"); if (isset($this->getDi()->getConfig()->configurations["defaut"])) { $xmlPath = $this->getDi()->getConfig()->configurations["defaut"]; } else { $xmlPath = $this->getDi()->getConfig()->configurationsDir . "defaut" . '.xml'; } $filemtime = filemtime($xmlPath); $this->view->setVar("configuration", "defaut?v={$filemtime}"); $this->view->setVar("couche", "null"); $type = "id"; if (!is_numeric($code)) { $type = "code"; $contexte = IgoContexte::findFirst("{$type}='{$code}'"); } else { $contexte = IgoContexte::findFirst("{$type}={$code}"); } $this->view->setVar("contexteCode", "null"); $this->view->setVar("contexteId", "null"); if ($contexte) { $this->view->setVar("contexte" . ucfirst($type), $code . "?v=" . md5($contexte->date_modif)); } else { $this->view->setVar("avertissement", "Le contexte avec le {$type}:{$code} n'existe pas"); } }
/** * Récupère la liste de igo_contexte dont l'utilisateur courant est * propriétaire (un admin possède tous les contextes) * @return igoContexte[] */ private function igoContextesQuilPossede() { $sql = ''; if (!$this->getDI()->get('session')->get('info_utilisateur')->estAdmin) { //Récupérer les profils de l'utilisateurs $profils = $this->getDI()->get('session')->get('info_utilisateur')->profils; if (!count($profils)) { return false; } $idsProfils = array(); foreach ($profils as $profil) { $idsProfils[] = $profil['id']; } $idsProfils = implode(',', $idsProfils); //Récupérer les contextes auquels ces profils donne droit $sql = "profil_proprietaire_id IN ({$idsProfils})"; } return IgoContexte::find($sql); }