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()); }
public function mapfileAction($contexte_id, $profil_id = null, $utilisateur_id = null) { $igo_contexte = IgoContexte::findFirstByid($contexte_id); if (!$igo_contexte) { $this->flash->error("Contexte non-trouvé"); return $this->dispatcher->forward(array("controller" => "igo_contexte", "action" => "search")); } $contexte = $igo_contexte->toArray(); $couches = array(); // $igo_couches = $igo_contexte->getCouches(); $contexte["wms_onlineresource"] = $this->view->host . $igo_contexte->mf_map_meta_onlineresource; if (is_numeric($igo_contexte->mf_map_projection)) { $contexte["mf_map_projection"] = "\"init=epsg:" . $igo_contexte->mf_map_projection . "\""; } else { if (trim($igo_contexte->mf_map_projection) != '') { $contexte["mf_map_projection"] = $igo_contexte->mf_map_projection; if ($contexte["mf_map_projection"] != "") { $contexte["mf_map_projection"] = str_replace('"', "\t\t\t", str_replace('" ', '\\n ', $contexte["mf_map_projection"])); } } } $contexteCouches = IgoVueContexteCoucheNavigateur::find(array("conditions" => "contexte_id={$contexte_id}", "order" => array("mf_layer_meta_group_title", "mf_layer_meta_title"))); // Il faut trier les classes par mf_class_z_order, c'est impossible de // le faire avec l'orm ou encore avec le volt... Il faudrait étendre volt // pour y ajouter une fonction usort, préférable d'utiliser la BD pour le sort... // http://docs.phalconphp.com/en/latest/reference/volt.html#extending-volt $couchesClasses = array(); foreach ($contexteCouches as $contexteCouche) { $classes = IgoClasse::find(array("conditions" => "couche_id={$contexteCouche->couche_id}", "order" => array("mf_class_z_order"))); $couchesClasses[$contexteCouche->couche_id] = $classes; } $mapfileInclude = ''; if (isset($this->config->mapserver->mapfileInclude)) { foreach ($this->config->mapserver->mapfileInclude as $chemin) { $mapfileInclude .= parent::fopen_file_get_contents($chemin); } } $this->view->mapfileInclude = $mapfileInclude; $this->view->couchesClasses = $couchesClasses; $this->view->contexteCouches = $contexteCouches; $this->view->contexte = $contexte; $this->view->preview = true; return array($contexte, $couches); }