From e0bfe89cc6404f7dfff0084ab856edf9c7f9eae5 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 20 Jul 2016 16:50:41 +0200 Subject: [PATCH] Gestion de l'affichage des groupes mixtes : 'groups/view' --- manager/module/clusterDefault.php | 1 - manager/view/group/view.php | 108 ++++++++++++++++++++++++------ todo.md | 18 ++--- view/groups.php | 6 +- view/js/groups-min.js | 12 ++-- view/js/groups.js | 64 +++++++++--------- 6 files changed, 136 insertions(+), 73 deletions(-) diff --git a/manager/module/clusterDefault.php b/manager/module/clusterDefault.php index e632409..ca80faa 100644 --- a/manager/module/clusterDefault.php +++ b/manager/module/clusterDefault.php @@ -87,7 +87,6 @@ $repoMethod = ($class==0) ? 'user_cluster/getAll' : 'machine_cluster/getAll'; - // On recupere les donnees $clusters = new Repo($repoMethod, [ $_SESSION['WAREHOUSE']['id'] ]); diff --git a/manager/view/group/view.php b/manager/view/group/view.php index f87ae7b..20877c9 100644 --- a/manager/view/group/view.php +++ b/manager/view/group/view.php @@ -37,7 +37,7 @@ @icon_type - machines (@nb_members) + @members @@ -62,7 +62,7 @@ @icon_type - utilisateurs (@nb_members) + @members @@ -86,42 +86,66 @@ public static function view($params){ $view = ''; - /* [1] On récupère la liste des utilisateurs + /* [1] On récupère la liste des groupes d'utilisatuers =========================================================*/ - $request = new ModuleRequest('clusterDefault/getAll'); // On utilise la methode 'getAll' du module 'clusterDefault' - $answer = $request->dispatch(); // On recupere la reponse + /* (1) On récupère les groupes */ + $getAllUsersReq = new ModuleRequest('clusterDefault/getAll', ['class' => 0]); + $getAllUsers = $getAllUsersReq->dispatch(); - // si erreur, on affiche l'explicitation - if( $answer->error != ManagerError::Success ) + /* (2) si erreur, on affiche l'explicitation */ + if( $getAllUsers->error != ManagerError::Success ) return View::$htmlError; - $CLUSTERLIST = $answer->get('clusters'); + /* (3) On enregistre le résultat */ + $USERCLUSTERS = $getAllUsers->get('clusters'); - foreach($CLUSTERLIST as $u=>$cluster){ - $membersReq = new ModuleRequest('clusterDefault/getMembers', [ 'id_cluster' => $cluster['id_cluster'] ]); + + /* [2] On récupère la liste des groupes de machines + =========================================================*/ + /* (1) On récupère les groupes */ + $getAllMachinesReq = new ModuleRequest('clusterDefault/getAll', ['class' => 1]); + $getAllMachines = $getAllMachinesReq->dispatch(); + + /* (2) si erreur, on affiche l'explicitation */ + if( $getAllMachines->error != ManagerError::Success ) + return View::$htmlError; + + /* (3) On enregistre le résultat */ + $MACHINECLUSTERS = $getAllMachines->get('clusters'); + + + /* [3] On crée la vue avec les groupes d'utilisateurs + =========================================================*/ + foreach($USERCLUSTERS as $u=>$cluster){ + /* (1) On récupère les members */ + $membersReq = new ModuleRequest('clusterDefault/getMembers', [ + 'id_cluster' => $cluster['id_user_cluster'], + 'class' => 0 + ]); $membersRes = $membersReq->dispatch(); /* (2) Gestion si erreur */ if( $membersRes->error == ManagerError::Success ) $members = $membersRes->get('members'); else $members = []; - $CLUSTERLIST[$u]['members'] = View::replaceMultiple( - self::template('member'), + /* (3) On crées les vues des membres (utilisateurs) */ + $USERCLUSTERS[$u]['users'] = View::replaceMultiple( + self::template('user'), $members, - [ 'id_cluster' => $cluster['id_cluster'] ] + [ 'id_cluster' => $cluster['id_user_cluster'] ] ); - - $CLUSTERLIST[$u]['class'] = (isset($cluster['id_user_cluster'])) ? 0 : 1; - $CLUSTERLIST[$u]['nb_members'] = (count($members)<2) ? count($members).' membre' : count($members).'membres'; - $CLUSTERLIST[$u]['icon_type'] = ($cluster['class']==0) ? file_get_contents( __ROOT__.'/src/static/menu-side/users.svg' ) : file_get_contents( __ROOT__.'/src/static/menu-side/device.svg' ); + /* (4) On ajoute les attributs utiles */ + $USERCLUSTERS[$u]['members'] = (count($members)<2) ? count($members).' utilisateur' : count($members).' utilisateurs'; + $USERCLUSTERS[$u]['icon_type'] = file_get_contents(__ROOT__.'/src/static/menu-side/users.svg'); } - - $view_cluster = View::replaceMultiple( - self::template('cluster'), - $CLUSTERLIST, [ + /* (5) On crée la vue de la liste des tous les groupes d'utilisateurs */ + $user_clusters = View::replaceMultiple( + self::template('user_cluster'), + $USERCLUSTERS, [ + 'icon_type' => file_get_contents( __ROOT__.'/src/static/menu-side/users.svg' ), 'icon_remove' => file_get_contents( __ROOT__.'/src/static/sub-menu-side/remove.svg' ), 'icon_group' => file_get_contents( __ROOT__.'/src/static/container/group.svg' ), 'icon_edit' => file_get_contents( __ROOT__.'/src/static/sub-menu-side/edit.svg' ) @@ -131,7 +155,47 @@ - return View::replaceSingle(self::template(), [ 'clusterlist' => $view_cluster ]); + /* [4] On crée la vue avec les groupes de machines + =========================================================*/ + foreach($MACHINECLUSTERS as $u=>$cluster){ + /* (1) On récupère les members */ + $membersReq = new ModuleRequest('clusterDefault/getMembers', [ + 'id_cluster' => $cluster['id_machine_cluster'], + 'class' => 1 + ]); + $membersRes = $membersReq->dispatch(); + + /* (2) Gestion si erreur */ + if( $membersRes->error == ManagerError::Success ) $members = $membersRes->get('members'); + else $members = []; + + /* (3) On crées les vues des membres (machines) */ + $MACHINECLUSTERS[$u]['machines'] = View::replaceMultiple( + self::template('machine'), + $members, + [ 'id_cluster' => $cluster['id_machine_cluster'] ] + ); + + /* (4) On ajoute les attributs utiles */ + $MACHINECLUSTERS[$u]['members'] = (count($members)<2) ? count($members).' machine' : count($members).' machines'; + $MACHINECLUSTERS[$u]['icon_type'] = file_get_contents(__ROOT__.'/src/static/menu-side/machines.svg'); + } + + /* (5) On crée la vue de la liste des tous les groupes de machines */ + $machine_clusters = View::replaceMultiple( + self::template('machine_cluster'), + $MACHINECLUSTERS, [ + 'icon_type' => file_get_contents( __ROOT__.'/src/static/menu-side/device.svg' ), + 'icon_remove' => file_get_contents( __ROOT__.'/src/static/sub-menu-side/remove.svg' ), + 'icon_group' => file_get_contents( __ROOT__.'/src/static/container/group.svg' ), + 'icon_edit' => file_get_contents( __ROOT__.'/src/static/sub-menu-side/edit.svg' ) + ]); + + + + + + return View::replaceSingle(self::template(), [ 'clusterlist' => $user_clusters.''.$machine_clusters ]); } diff --git a/todo.md b/todo.md index aabafb0..2ac6566 100755 --- a/todo.md +++ b/todo.md @@ -3,7 +3,7 @@ ########### - [ ] Prendre en compte au lieu de SERVER['HTTP_HOST'] l'hote et son dossier source - [ ] Gestion de l'erreur de chargement ou erreur de nav (page-manager) - + ############ # EN COURS # ############ @@ -41,7 +41,7 @@ - [x] [view/js/machines] Implementer la recherche pour la suppression - [x] Nettoyage git - [x] [ResourceDispatcher] Gestion de la coloration de svg - - [x] [src/*.svg] Modification des svg (attribution des ID) + - [x] [src/....svg] Modification des svg (attribution des ID) - [x] Correctifs - [x] [container.scss] Gestion des boutons "enabled"/"disabled" lorsqu'on doit faire une recherche - [x] [view/users+machines] Suppression du sous-menu "Recherche" @@ -57,7 +57,7 @@ - [x] [users.js][userDefault][userRepo] Gestion de la nouvelle modification (avec recherche) - [x] [view/js/machines] Modification de machine - [x] [userDefault] Implementer la modification - - [x] [userRepo] Gestion des parametres optionnels + - [x] [userRepo] Gestion des parametres optionnels - [x] [view/users] Gestion des parametres optionnels physiques -> separer la selection et modification - [x] [machineDefault] Implementation de la recherche - [x] [userDefault] Implementation de la recherche @@ -70,7 +70,7 @@ - [x] [view/users][view/machines] Affichage des erreurs pour la liste des utilisateurs et des machines - [x] [view/users][container.scss] Barre de recherche instantannee (physiques) - [x] [view/machines+view/js/machines] Prise en compte de pageManager.vars[1] pour le suppression de machine -- [x] [repo+css+view] Split les listes en 2 colonnes -> Finalisation +- [x] [repo+css+view] Split les listes en 2 colonnes -> Finalisation - [x] [repo+css+view] Split les listes en 2 colonnes - [x] [container.scss] Ajout de padding-top/bottom pour les input/button - [x] [container.scss] Inversion des etats pour boutons @@ -107,7 +107,7 @@ - [x] Conception BDD + ameliorations - [x] Liste des tables - [x] Liste de attributs - - [x] Attributs statiques + - [x] Attributs statiques - [x] utilisateur - [x] machine - [x] cluster @@ -127,7 +127,7 @@ - [x] [view/machines] Affichage des groupes des machines - [x] [view/users] Affichage des groupes des utilisateurs - [x] [cluster::link/unlink] Ajout/Suppression d'association des utilisateurs/machines a des groupes -- [x] [user::getClusters] Recuperation des groupes d'un utilisateur +- [x] [user::getClusters] Recuperation des groupes d'un utilisateur - [x] [manager/repo/]Creation des repos - [x] [user] utilisateur - [x] [machine] machines @@ -150,11 +150,11 @@ - [x] [Database] Checker de type (types utilises dans la BDD) - [x] [manager/Repo] Gestion des Repo - [x] [ManagerError] Correction/ajout des codes erreurs - - [x] [ModuleRequest] Modification des erreurs + - [x] [ModuleRequest] Modification des erreurs - [x] [ResourceDispatcher] Modification du gestionnaire de ressource car ne marche pas en ligne - [x] [css/container.css + js/action-script.js] Gestion de l'affichage de la page associee au sous-menu (.active) - [x] [view/*.php] Modification des views -- [x] Mise a jour / Modification / Correction des images du menu-side +- [x] Mise a jour / Modification / Correction des images du menu-side - [x] [ModuleRequest->dispatch] Passage de l'erreur a la reponse - [x] [ModuleResponse->serialize] Integration de l'erreur dans la serialisation - [x] [ModuleResponse->get+getAll] Accesseurs aux donnees de la reponse @@ -201,4 +201,4 @@ - [x] Adaptation de page-manger.js - [x] Conception et dev routeur - [x] Initialiser le github.com/git -- [x] Structure HTML de base \ No newline at end of file +- [x] Structure HTML de base diff --git a/view/groups.php b/view/groups.php index 09b3a48..b0955db 100755 --- a/view/groups.php +++ b/view/groups.php @@ -29,7 +29,7 @@ Modification - + Composition @@ -61,8 +61,8 @@ echo "
"; + debug(); $clusterView = new View('group.view', []); - echo ""; $clusterView->view(); echo '
'; @@ -172,7 +172,7 @@ /* [4] Gestion de filtrage =========================================================*/ - echo "
"; + echo "
"; /* (1) Si on a un ID_CLUSTER, on affiche la composition ---------------------------------------------------------*/ diff --git a/view/js/groups-min.js b/view/js/groups-min.js index 82b81cf..2c0c579 100644 --- a/view/js/groups-min.js +++ b/view/js/groups-min.js @@ -1,10 +1,10 @@ var section={view:{text:'#CONTAINER > section[data-sublink="view"] ',element:document.querySelector('#CONTAINER > section[data-sublink="view"]'),searchbar:document.querySelector('#CONTAINER > section[data-sublink="view"] > .searchbar')},create:{text:'#CONTAINER > section[data-sublink="create"] ',element:document.querySelector('#CONTAINER > section[data-sublink="create"]')},remove:{text:'#CONTAINER > section[data-sublink="remove"] ',element:document.querySelector('#CONTAINER > section[data-sublink="remove"]')}, -edit:{text:'#CONTAINER > section[data-sublink="edit"] ',element:document.querySelector('#CONTAINER > section[data-sublink="edit"]')},filter:{text:'#CONTAINER > section[data-sublink="filter"] ',element:document.querySelector('#CONTAINER > section[data-sublink="filter"]'),chooser:{text:'#CONTAINER > section[data-sublink="filter"] form#choose-cluster ',element:document.querySelector('#CONTAINER > section[data-sublink="filter"] form#choose-cluster')}},permissions:{text:'#CONTAINER > section[data-sublink="permissions"] ', +edit:{text:'#CONTAINER > section[data-sublink="edit"] ',element:document.querySelector('#CONTAINER > section[data-sublink="edit"]')},members:{text:'#CONTAINER > section[data-sublink="members"] ',element:document.querySelector('#CONTAINER > section[data-sublink="members"]'),chooser:{text:'#CONTAINER > section[data-sublink="members"] form#choose-cluster ',element:document.querySelector('#CONTAINER > section[data-sublink="members"] form#choose-cluster')}},permissions:{text:'#CONTAINER > section[data-sublink="permissions"] ', element:document.querySelector('#CONTAINER > section[data-sublink="permissions"]')}}; if(null!=section.view.element){1 article.inline-box[id]");for(b=0;b section[data-sublink="edit"]') }, - filter: { - text: '#CONTAINER > section[data-sublink="filter"] ', - element: document.querySelector('#CONTAINER > section[data-sublink="filter"]'), + members: { + text: '#CONTAINER > section[data-sublink="members"] ', + element: document.querySelector('#CONTAINER > section[data-sublink="members"]'), chooser: { - text: '#CONTAINER > section[data-sublink="filter"] form#choose-cluster ', - element: document.querySelector('#CONTAINER > section[data-sublink="filter"] form#choose-cluster') + text: '#CONTAINER > section[data-sublink="members"] form#choose-cluster ', + element: document.querySelector('#CONTAINER > section[data-sublink="members"] form#choose-cluster') } }, @@ -150,13 +150,13 @@ if( section.view.element != null ){ } - /* (7) On gere la "modification" d'un groupe */ + /* (7) On gere la "modification" des membres d'un groupe */ for( var i = 0 ; i < section.view.group.add.length ; i++ ){ section.view.group.add[i].addEventListener('click', function(e){ pageManager.vars[1] = e.target.getData('cluster'); - navSubMenu('filter'); + navSubMenu('members'); document.location = ''; }, false); @@ -625,31 +625,31 @@ if( section.edit.element != null ){ /* GESTION DU CHOIX DU GROUPE AUQUEL MODIFIER LA COMPOSITION DES MEMBRES * */ -if( section.filter.element != null && section.filter.chooser.element != null ){ +if( section.members.element != null && section.members.chooser.element != null ){ /* [1] Initialisation et gestion statique =========================================================*/ /* (1) On initialise le deflater */ - section.filter.chooser.deflater = new FormDeflater( - section.filter.chooser.element, + section.members.chooser.deflater = new FormDeflater( + section.members.chooser.element, ['select'], ['data-name'] ); /* (2) On récupère le bouton */ - section.filter.chooser.submit = document.querySelector(section.filter.chooser.text+'#choose-cluster'); + section.members.chooser.submit = document.querySelector(section.members.chooser.text+'#choose-cluster'); /* [2] Gestion de l'évènement =========================================================*/ - section.filter.chooser.submit.addEventListener('click', function(e){ + section.members.chooser.submit.addEventListener('click', function(e){ /* (0) On annule l'action par défaut (PHP) */ e.preventDefault(); /* (1) On récupère les données */ - var data = section.filter.chooser.deflater.deflate()['cluster']; + var data = section.members.chooser.deflater.deflate()['cluster']; // Vérification du type if( isNaN(data) ) @@ -679,55 +679,55 @@ if( section.filter.element != null && section.filter.chooser.element != null ){ /* GESTION DE LA MODIFICATION DES MEMBRES * */ -if( section.filter.element != null && section.filter.chooser.element == null ){ +if( section.members.element != null && section.members.chooser.element == null ){ /* (1) On initialise le Deflater() */ - section.filter.deflater = new FormDeflater( - section.filter.element, + section.members.deflater = new FormDeflater( + section.members.element, ['input'], ['data-name'] ); /* (2) On enregistre les données initiales */ - section.filter.baseData = section.filter.deflater.deflate()['members']; + section.members.baseData = section.members.deflater.deflate()['members']; /* (3) On enregistre les données in-HTML */ - section.filter.class = document.querySelector('#filter-member-class').value; - section.filter.idcluster = document.querySelector('#filter-member-idcluster').value; + section.members.class = document.querySelector('#members-member-class').value; + section.members.idcluster = document.querySelector('#members-member-idcluster').value; /* [1] Dès qu'une valeur est modifiée dans le formulaire =========================================================*/ - section.filter.element.addEventListener('click', function(e){ + section.members.element.addEventListener('click', function(e){ /* (0) On récupère les données + initialise les variables */ var linked = []; var unlinked = []; - var data = section.filter.deflater.deflate()['members']; + var data = section.members.deflater.deflate()['members']; // Si c'est pas un tableau, on le met en tableau if( !(data instanceof Array) ) data = [data]; /* (1) Si on a ajouté des liens */ for( var i = 0 ; i < data.length ; i++ ) - if( section.filter.baseData.indexOf(data[i]) == -1 ) // Si pas dans les données initiales, on ajoute + if( section.members.baseData.indexOf(data[i]) == -1 ) // Si pas dans les données initiales, on ajoute linked.push( data[i] ); /* (2) Si on a supprimé des liens */ - for( var i = 0 ; i < section.filter.baseData.length ; i++ ) - if( data.indexOf(section.filter.baseData[i]) == -1 ) // Si pas dans les données modifiées, on ajoute - unlinked.push( section.filter.baseData[i] ); + for( var i = 0 ; i < section.members.baseData.length ; i++ ) + if( data.indexOf(section.members.baseData[i]) == -1 ) // Si pas dans les données modifiées, on ajoute + unlinked.push( section.members.baseData[i] ); /* (3) Gestion de l'ajout de liens */ for( var i = 0 ; i < linked.length ; i++ ){ // {1} On rédige la requête // var linkReq = {}; - linkReq.path = (section.filter.class==0) ? 'userDefault/link' : 'machineDefault/link'; - linkReq.id_cluster = section.filter.idcluster; + linkReq.path = (section.members.class==0) ? 'userDefault/link' : 'machineDefault/link'; + linkReq.id_cluster = section.members.idcluster; - if( section.filter.class == 0 ) linkReq.id_user = linked[i]; + if( section.members.class == 0 ) linkReq.id_user = linked[i]; else linkReq.id_machine = linked[i]; // {2} On envoie la requête // @@ -743,10 +743,10 @@ if( section.filter.element != null && section.filter.chooser.element == null ){ for( var i = 0 ; i < unlinked.length ; i++ ){ // {1} On rédige la requête // var unlinkReq = {}; - unlinkReq.path = (section.filter.class==0) ? 'userDefault/unlink' : 'machineDefault/unlink'; - unlinkReq.id_cluster = section.filter.idcluster; + unlinkReq.path = (section.members.class==0) ? 'userDefault/unlink' : 'machineDefault/unlink'; + unlinkReq.id_cluster = section.members.idcluster; - if( section.filter.class == 0 ) unlinkReq.id_user = unlinked[i]; + if( section.members.class == 0 ) unlinkReq.id_user = unlinked[i]; else unlinkReq.id_machine = unlinked[i]; // {2} On envoie la requête // @@ -758,7 +758,7 @@ if( section.filter.element != null && section.filter.chooser.element == null ){ /* (5) On met à jour les données initiales */ - section.filter.baseData = data; + section.members.baseData = data; }, false);