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 &laquo; {$groupe_id} &raquo; 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 &laquo; {$couche_id} &raquo; 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());
 }
Esempio n. 2
0
 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.");
     }
 }
Esempio n. 3
0
 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");
     }
 }
Esempio n. 4
0
 /**
  * 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);
 }