/** * Créé le groupe et lui associe ses enfants * @param type $r_controller * @param type $r_action * @param type $r_id */ public function createAction($r_controller = null, $r_action = null, $r_id = null) { if (!$this->request->isPost()) { return $this->dispatcher->forward(array("controller" => $this->ctlName, "action" => "index")); } $igo_groupe = new IgoGroupe(); $this->assigneFromPost($igo_groupe); try { if (!$igo_groupe->save()) { foreach ($igo_groupe->getMessages() as $message) { $this->flash->error($message); } return $this->dispatcher->forward(array("controller" => $this->ctlName, "action" => "new", "param" => !is_null($r_id) ? "/" . $r_controller . "/" . $r_action . "/" . $r_id : "")); } else { $this->flash->success(Text::camelize(str_replace("igo_", "", $this->ctlName)) . " " . $igo_groupe->id . " créé avec succès"); } } catch (\Exception $e) { //Réassigner les couches enfants pour l'affichage if ('couche' == $specifier) { //Couches qu'il ne faut pas réafficher comme enfant du groupe $couchesPasEnfantDeGroupe = $this->modelsManager->executeQuery("SELECT c.id AS valeur, c.mf_layer_name AS libelle " . "FROM IgoGroupeCouche AS gc " . "INNER JOIN IgoCouche AS c ON c.id = gc.couche_id " . "WHERE gc.id NOT IN ({$ids}) " . "ORDER BY c.mf_layer_name"); //Couches qu'ils faut réafficher comme enfant du groupe $couchesEnfantDeGroupe = $this->modelsManager->executeQuery("SELECT c.id AS valeur, c.mf_layer_name AS libelle " . "FROM IgoGroupeCouche AS gc " . "INNER JOIN IgoCouche AS c ON c.id = gc.couche_id " . "WHERE gc.id IN ({$ids}) "); $this->view->setVar("couchesPasEnfantDeGroupe", $couchesPasEnfantDeGroupe); $this->view->setVar("couchesEnfantDeGroupe", $couchesEnfantDeGroupe); $this->definirGroupesPourSelecteur(); //Réassigner les groupes enfants pour l'affichage } elseif ('groupe' == $specifier) { //Groupes qu'on peut assigner comme enfant. Ceux qui sont à la racine et qui ne sont pas ses parents $groupesPasEnfantDeGroupe = $this->modelsManager->executeQuery("SELECT id AS valeur, nom AS libelle FROM IgoGroupe WHERE id NOT IN :ids: ORDER BY nom", array('ids' => $ids)); //Groupes qui sont dans le groupe $groupesEnfantDeGroupe = $this->modelsManager->executeQuery("SELECT id AS valeur, nom AS libelle FROM IgoGroupe WHERE id IN :ids: ORDER BY nom", array('ids' => $ids)); $this->view->setVar("groupesPasEnfantDeGroupe", $groupesPasEnfantDeGroupe); $this->view->setVar("groupesEnfantDeGroupe", $groupesEnfantDeGroupe); $this->definirCouchesPourSelecteur(); } $this->flash->error($e->getMessage()); return $this->dispatcher->forward(array("controller" => $this->ctlName, "action" => "new", "param" => !is_null($r_id) ? "/" . $r_controller . "/" . $r_action . "/" . $r_id : "")); } $specifier = $this->request->getPost('specifier'); //Nettoyer les id de la liste des enfants à traiter if ('couche' == $specifier) { $ids = $this->request->getPost('multiselect_couche_valeurs'); } elseif ('groupe' == $specifier) { $ids = $this->request->getPost('multiselect_groupe_valeurs'); } //Nettoyer la liste de ID $ids = explode(',', $ids); foreach ($ids as $cle => $valeur) { $ids[$cle] = intval($valeur); } $ids = implode(',', $ids); $profil_proprietaire_id = intval($this->request->getPost('profil_proprietaire_id')); $this->gererAssociationEnfantsGroupeCouche($specifier, $igo_groupe->id, $ids, $profil_proprietaire_id); if ($profil_proprietaire_id && !$igo_groupe->groupe_id) { //Créer une permission pour le groupe $igo_permission = new IgoPermission(); $igo_permission->profil_id = $profil_proprietaire_id; $igo_permission->groupe_id = $igo_groupe->id; $igo_permission->est_lecture = true; $igo_permission->est_analyse = true; $igo_permission->est_ecriture = true; $igo_permission->est_export = true; $igo_permission->est_association = true; if (!$igo_permission->save()) { foreach ($igo_permission->getMessages() as $message) { echo $message; } } } return $this->dispatcher->forward(array("controller" => $this->ctlName, "action" => "search")); }
public function arbreCouchesEditAction($param) { $params = array(); $deleted = false; parse_str($param, $params); $profil_id = isset($params['profil_id']) ? $params['profil_id'] : false; if (!$profil_id) { $this->flash->error("igo_profil non-trouvé"); return $this->dispatcher->forward(array("controller" => "igo_profil", "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 $igoPermission = false; foreach ($valeurs as $name => $valeur) { if (!$deleted) { $phql = "DELETE FROM IgoPermission WHERE profil_id={$profil_id}"; $this->modelsManager->executeQuery($phql); $deleted = true; //var_dump($deleted); } $couche_id = null; $changed = false; $type = null; $titre = null; //Déterminer à quoi on a affaire if ('G' == substr($name, 0, 1)) { $type = 'groupe'; $a = explode("_", substr($name, 2)); $groupe_id = array_pop($a); } elseif ('CX' == substr($name, 0, 2)) { $type = 'colonne'; $a = explode("_", substr($name, 2)); $attribut_id = array_pop($a); $couche_id = substr($name, 2, strpos($name, "_") - 2); } elseif ('C' == substr($name, 0, 1)) { $type = 'couche'; $couche_id = explode("_", substr($name, 2))[0]; } //if (isset($valeur)&& $valeur!=0){ // printf("name: %s, groupe_id: %s, couche_id: %s, type: %s, valeur: %s<br>", $name, $groupe_id, $couche_id, $type, $valeur); // } //Tenter de récupérer le igo_couche_contexte associé switch ($type) { case 'groupe': if (!$igoPermission || $igoPermission->groupe_id != $groupe_id) { $igoPermission = IgoPermission::findFirst("profil_id={$profil_id} AND groupe_id={$groupe_id} AND attribut_id is null"); } break; case 'colonne': $igoPermission = IgoPermission::findFirst("profil_id={$profil_id} AND attribut_id={$attribut_id}"); break; case 'couche': if (!$igoPermission || $igoPermission->couche_id != $couche_id) { $igoPermission = IgoPermission::findFirst("profil_id={$profil_id} AND couche_id={$couche_id} AND attribut_id is null"); } break; } if (!$igoPermission && $valeur) { $changed = true; $igoPermission = new IgoPermission(); $igoPermission->profil_id = $profil_id; switch ($type) { case 'groupe': $igoPermission->groupe_id = $groupe_id; break; case 'colonne': //$igoGroupeCouche = IgoGroupeCouche::findFirst('id=' . $couche_id); // if (!$igoGroupeCouche) { // $this->flash->error("La couche ayant le igo_couche.id « $couche_id » n'existe pas."); // } $igoCouche = IgoCouche::findFirst('id=' . $couche_id); if (!$igoCouche) { $this->flash->error("La couche ayant le igo_couche.id « {$couche_id} » n'existe pas."); } $igoPermission->attribut_id = $attribut_id; $igoPermission->couche_id = $couche_id; $igoPermission->est_exclu = null; $igoPermission->couche_id = $couche_id; break; case 'couche': // $igoGroupeCouche = IgoGroupeCouche::findFirst('id=' . $couche_id); //// if (!$igoGroupeCouche) { // $this->flash->error("La couche ayant le igo_couche.id « $couche_id » n'existe pas."); // } $igoCouche = IgoCouche::findFirst('id=' . $couche_id); if (!$igoCouche) { $this->flash->error("La couche ayant le igo_couche.id « {$couche_id} » n'existe pas."); } $igoPermission->couche_id = $couche_id; //$igoPermission->couche_id = $igoGroupeCouche->couche_id; break; } } if ($igoPermission) { $valeur = $valeur == '1'; $attribut = substr($name, 1, 1); switch ($attribut) { case "L": //$changed = $changed || ($igoPermission->est_lecture) <> $valeur; $igoPermission->est_lecture = $igoPermission->est_lecture || $valeur; break; case "A": // $changed = $changed || ($igoPermission->est_analyse) <> $valeur; $igoPermission->est_analyse = $igoPermission->est_analyse || $valeur; break; case "E": // $changed = $changed || ($igoPermission->est_ecriture) <> $valeur; $igoPermission->est_ecriture = $igoPermission->est_ecriture || $valeur; break; case "P": // $changed = $changed || ($igoPermission->est_export) <> $valeur; $igoPermission->est_export = $igoPermission->est_export || $valeur; break; case "S": // $changed = $changed || ($igoPermission->est_association) <> $valeur; $igoPermission->est_association = $igoPermission->est_association || $valeur; break; case "X": // $changed = $changed || ($igoPermission->est_exclu) <> $valeur; $igoPermission->est_exclu = $igoPermission->est_exclu || $valeur; break; } } if ($valeur) { if (!$igoPermission->save()) { foreach ($igoPermission->getMessages() as $message) { $this->flash->error($message); } } } } /* //Supprimer les permissions qui n'ont plus lieu d'être $igoPermissions = IgoPermission::find('NOT (COALESCE(est_lecture,false) OR COALESCE(est_analyse,false) OR COALESCE(est_ecriture,false) OR COALESCE(est_export,false) OR COALESCE(est_association,false) OR COALESCE(est_exclu,false))'); foreach ($igoPermissions as $igoPermission) { $igoPermission->delete(); }*/ $igo_profil = IgoProfil::findFirstByid($profil_id); if (!$igo_profil) { $this->flash->error("igo_permission non-trouvé"); return $this->dispatcher->forward(array("controller" => "igo_permission", "action" => "index")); } $this->view->igo_profil = $igo_profil; ///****À TESTER ****/// $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,\n gr.groupe_id as id,\n gr.nom,\n gr.nom_complet AS mf_layer_meta_group_title,\n gr.groupe_id AS groupe_id,\n NULL::integer AS attribut_id,\n false AS lecture,\n false AS analyse_spa,\n false AS ecriture,\n false AS export,\n false AS association,\n false AS exclu,\n NULL::text AS colonne,\n NULL::integer AS couche_id,\n p.id AS permission_id,\n true AS association_est_association,\n gr.grp,\n (length(grp) - length(replace(grp, '_'::text, ''::text))) as len\n from igo_vue_groupes_recursif gr\n LEFT JOIN igo_permission p ON p.groupe_id=gr.groupe_id AND p.profil_id={$profil_id} and p.couche_id IS NULL\n --LEFT JOIN igo_vue_permissions_pour_groupes pg ON pg.profil_id IN ({$liste_profil_id_utilisateur})\n WHERE NOT (gr.grp IN ( SELECT substr(grp, strpos(concat(grp, '_'), '_'::text) + 1) AS substr\n FROM igo_vue_groupes_recursif)) \n UNION\n select 'C'::character varying(1) AS type,\n c.id,\n c.mf_layer_meta_title AS nom,\n gr.nom_complet AS mf_layer_meta_group_title,\n gc.groupe_id AS groupe_id,\n igo_attribut.id AS attribut_id,\n COALESCE(p.est_lecture, false) AS lecture,\n COALESCE(p.est_analyse, false) AS analyse_spa,\n COALESCE(p.est_ecriture, false) AS ecriture,\n COALESCE(p.est_export, false) AS export,\n COALESCE(p.est_association, false) AS association,\n COALESCE(p2.est_exclu, false) AND igo_attribut.id = p2.attribut_id AS exclu,\n igo_attribut.colonne AS colonne,\n c.id AS couche_id,\n p.id AS permission_id,\n igo_vue_permissions_pour_couches.est_association AS association_est_association,\n gr.grp,\n (length(grp) - length(replace(grp, '_'::text, ''::text))) as len\n from igo_vue_groupes_recursif gr\n JOIN igo_groupe_couche gc ON gc.groupe_id=gr.groupe_id\n JOIN igo_couche c ON gc.couche_id=c.id\n JOIN igo_geometrie ON c.geometrie_id = igo_geometrie.id\n LEFT JOIN igo_attribut ON igo_attribut.geometrie_id = igo_geometrie.id\n LEFT JOIN igo_permission p ON c.id=p.couche_id AND p.profil_id={$profil_id} and p.attribut_id IS NULL\n LEFT JOIN igo_permission p2 ON c.id=p.couche_id AND p.profil_id={$profil_id} and p2.attribut_id IS NOT NULL and p2.attribut_id=igo_attribut.id\n LEFT JOIN igo_vue_permissions_pour_couches ON igo_vue_permissions_pour_couches.couche_id = p.id \n WHERE NOT (gr.grp IN ( SELECT substr(grp, strpos(concat(grp, '_'), '_'::text) + 1) AS substr\n FROM igo_vue_groupes_recursif)) \n ORDER BY grp, len, type DESC"; //echo $sql; $igo_permission = new IgoPermission(); $igo_permission = new Resultset(null, $igo_permission, $igo_permission->getReadConnection()->query($sql)); $this->view->setVar("arbre", $igo_permission); }