From 3f9becf80cdeeafc12b1c20e6e7de16209f9e61b Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Fri, 12 Nov 2021 10:30:54 +0100 Subject: [PATCH] Refactorisation : vue users/index generique... --- CHANGELOG | 27 +++++++++++++++++++++------ README.md | 4 ++-- config/app_labinvent_mandatory_fields.default.yml | 2 +- src/Controller/AppController.php | 43 +++++++++++++++++++++++++++++++++++++------ src/Controller/CategoriesController.php | 11 +++++++++-- src/Controller/SousCategoriesController.php | 9 ++++++++- src/Controller/SurCategoriesController.php | 5 ++++- src/Controller/UsersController.php | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------- src/Template/Common/index_gen.ctp | 11 ++++++++--- src/Template/Users/index.ctp | 117 ++++++++++++++++++++++----------------------------------------------------------------------------------------------- 10 files changed, 185 insertions(+), 155 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 53d88cc..c4a4450 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -523,25 +523,40 @@ TODO : - - un champ OBLIGATOIRE mais VIDE doit pouvoir être renseigné ! *) Stats de connexion - le tri des autres colonnes ne marche plus - - saisir pweb2 + extension garantie (bc+fact+bl) +- documents/index generique +- emprunts/index generic +- projets/index generic - ProjetsController minimaliste, doit juste étendre AppController avec un minimum de changement -- projets/index generic -- emprunts/index generic -- stats/index generic -- users/index generic +- add_edit generic + +- fusionner groupe thematique et metier (et projet ?) + + + +======= NEXT ======= + +index view : groupe metier et thematique => recup nom selon config + +garantie jqa 8/11/22 pour les 2 serveurs ======= CHANGES ======= ------- +11/11/2021 v5.2.28-3.7.9 + - (i) Refactorisation : vue users/index generique + - (e) amélioration des tris par colonne pour toutes les listes + - (e) la plupart des listes sont désormais triées par défaut par le nom + +------- 10/11/2021 v5.2.27-3.7.9 + - un champ OBLIGATOIRE mais VIDE doit pouvoir être renseigné ! - (e) date fin garantie : date en orange quand < 1 an, rouge quand expirée (et mieux calculée qu'avant) ------- diff --git a/README.md b/README.md index d015891..032a3dc 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 10/11/2021 -Version: v5.2.27-3.7.9 +Date: 11/11/2021 +Version: v5.2.28-3.7.9 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/config/app_labinvent_mandatory_fields.default.yml b/config/app_labinvent_mandatory_fields.default.yml index 4a4bd19..49d91a2 100644 --- a/config/app_labinvent_mandatory_fields.default.yml +++ b/config/app_labinvent_mandatory_fields.default.yml @@ -451,7 +451,7 @@ MANDATORY_FIELDS_FOR_LOT2: numero_commande: 'Num. BC' # Docs attachés obligatoires pour valider - #DOC_DEVIS: 'Devis' + DOC_DEVIS: 'Devis' #DOC_BC: "Bon de Commande" #DOC_BL: "Bon de Livraison" #DOC_FACTURE: "Facture" diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 3ed9939..ef2ebda 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -33,7 +33,7 @@ use Cake\Http\Exception\NotImplementedException; use Cake\Controller\Component\AuthComponent; use Cake\ORM\Entity; use Cake\Utility\Inflector; - +use Cake\Collection\Collection; /** @@ -2146,20 +2146,50 @@ class AppController extends Controller $entity_plural, $fields_names=[], $contained_controllers=null, $HAS_ADD_BUTTON=true, - $HAS_EDIT_DEL_BUTTONS=true , - $sortBy = null + $HAS_EDIT_DEL_BUTTONS=true, + $sortBy = null, + $conditions = [], + $sortWhitelist = [], + $limit = 20 ) { $controller_name = $this->getName(); //debug($controller_name); $this->paginate = [ - 'contain' => $contained_controllers + 'contain' => $contained_controllers, //'contain' => ['SurCategories'] + 'conditions' => $conditions, + //'order' => ['nom' => 'asc'], + //'sortWhitelist' => $sortWhitelist, + /* + 'sortWhitelist' => [ + 'nom', + 'email', + 'role', + 'GroupesThematiques.nom', + 'GroupesMetiers.nom', + 'SurCategories.nom', + ], + */ + //'limit' => 20, + 'limit' => $limit, ]; + if ($sortBy) $this->paginate['order'] = [$sortBy => 'asc']; + if ($sortWhitelist) $this->paginate['sortWhitelist'] = array_values($sortWhitelist); + //$categories = $this->paginate($this->Categories); $entities = $this->paginate($this->$controller_name); - if ($sortBy) $entities = $entities->sortBy($sortBy); + //debug($entities->first()); + //debug($entities->toArray()); + //debug($entities->toArray()); + //foreach ($entities as $e) debug($e->nom); + /* + $collection = new Collection($entities); + $sorted = $collection->sortBy($sortBy); + foreach ($sorted as $e) debug($e->nom); + */ + // 'order' => array('Tapplicant.AppID' => 'desc'), // $this->Paginator->sort('Hobby.name', 'Hobby'); @@ -2174,7 +2204,8 @@ class AppController extends Controller $this->set(compact( 'CAN_ADD', 'entities', 'entity_plural', 'fields_names', - 'HAS_EDIT_DEL_BUTTONS', 'HAS_ADD_BUTTON' + 'HAS_EDIT_DEL_BUTTONS', 'HAS_ADD_BUTTON', + 'sortWhitelist' )); // Pas bien..., mais pratique : diff --git a/src/Controller/CategoriesController.php b/src/Controller/CategoriesController.php index a70e66f..41d95b7 100755 --- a/src/Controller/CategoriesController.php +++ b/src/Controller/CategoriesController.php @@ -109,7 +109,14 @@ class CategoriesController extends AppController 'nom'=>[], 'sur_categorie_id'=>['nice_name'=>'Domaine', 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories'], ], - ['SurCategories'] + ['SurCategories'], + true, true, + 'nom', + [], + [ + 'nom' => 'nom', + 'sur_categorie_id'=>'SurCategories.nom' + ] ); /* @@ -143,7 +150,7 @@ class CategoriesController extends AppController //return parent::view($id, $associated_entity_types); //return $this->view_generic($id, $associated_entity_types, 'SurCategories'); //return $this->view_generic($id, $child_entity_types, ['SurCategories']); - return $this->view_generic($id, $child_entity_types, 'SousCategories', 'sous-categories', ' une sous-catégorie'); + $this->view_generic($id, $child_entity_types, 'SousCategories', 'sous-categories', ' une sous-catégorie'); /* $category = $this->Categories->get($id, [ diff --git a/src/Controller/SousCategoriesController.php b/src/Controller/SousCategoriesController.php index 864f8f6..0402ecb 100755 --- a/src/Controller/SousCategoriesController.php +++ b/src/Controller/SousCategoriesController.php @@ -101,7 +101,14 @@ class SousCategoriesController extends AppController 'nom'=>[], 'categorie_id'=>['nice_name'=>'Catégorie', 'contained_entity_name'=>'category', 'controller_name'=>'Categories'], ], - ['Categories'] + ['Categories'], + true, true, + 'nom', + [], + [ + 'nom' => 'nom', + 'categorie_id'=>'Categories.nom' + ] ); /* diff --git a/src/Controller/SurCategoriesController.php b/src/Controller/SurCategoriesController.php index 75c13a5..a20898f 100755 --- a/src/Controller/SurCategoriesController.php +++ b/src/Controller/SurCategoriesController.php @@ -175,8 +175,11 @@ class SurCategoriesController extends AppController 'nom'=>[], //'nom'=>['nice_name'=>'Nom'], //'sur_categorie_id'=>['nice_name'=>'Domaine', 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories'], - ] + ], //['SurCategories'] + [], + true, true, + 'nom' ); /* diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index ac83933..b768e5d 100755 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -514,32 +514,85 @@ class UsersController extends AppController { */ public function index() { - $filtre = $this->request->getQuery('filtre'); //debug($this->viewVars); + //$priviledgedUsers = $this->Users->find()->where(['role !=' => 'Utilisateur']); + + // ALL users + //$entities = $this->paginate(); + // ce qui revient au même que : + //$users = $this->paginate($this->Users); + // Only priviledged users + //$users = $this->paginate($priviledgedUsers); + + // Affichage informations disponible pour l'utilisateur connecté + $this->myDebug($this->LdapAuth->user()); + + $filtre = $this->request->getQuery('filtre'); + // Si on est sur l'instance de l'IRAP (InventIrap), // on affiche l'url vers la page de l'ANNUAIRE du site web du labo - $lab_website_urls = ($this->confLabinvent->labNameShort != 'IRAP') ? [] : [ - "Annuaire IRAP" => 'https://www.irap.omp.eu/annuaire', - "Annuaire IRAP (OMP)" => 'http://ezomp2.omp.obs-mip.fr/annuaire/annuaire-irap2', - ]; + $lab_website_urls = + $this->confLabinvent->labNameShort != 'IRAP' ? [] : + [ + "Annuaire IRAP" => 'https://www.irap.omp.eu/annuaire', + "Annuaire IRAP (OMP)" => 'http://ezomp2.omp.obs-mip.fr/annuaire/annuaire-irap2', + ]; - //$priviledgedUsers = $this->Users->find()->where(['role !=' => 'Utilisateur']); + $this->set(compact('lab_website_urls', 'filtre')); + $conditions = $filtre ? ['role =' => 'Responsable'] : []; /* - $this->paginate = [ - 'contain' => [ - 'GroupesMetiers', - 'GroupesThematiques', - 'SurCategories' - ], - 'limit' => 12, - 'order' => [ - 'Users.nom' => 'asc' - ] - ]; + $entities = $this->paginate($this->Users->find('all', [ + 'conditions' => $conditions + ])); */ + $contains = [ + 'GroupesThematiques', + 'GroupesMetiers', + 'SurCategories' + ]; + + $sortWhitelist = [ + 'nom' => 'nom', + 'email' => 'email', + 'role' => 'role', + 'groupes_thematique_id' => 'GroupesThematiques.nom', + 'groupes_metier_id' => 'GroupesMetiers.nom', + 'sur_categorie_id' => 'SurCategories.nom', + ]; + $orderby = 'nom'; + $limit = 20; + + $this->index_generic( + 'utilisateurs', + [ + 'nom' => [], + 'email' => [], + 'role' => [], + 'groupes_thematique_id'=>[ + 'nice_name'=>'Groupe Thématique', + 'contained_entity_name'=>'groupes_thematique', 'controller_name'=>'GroupesThematiques' + ], + 'groupes_metier_id'=>[ + 'nice_name'=>'Groupe Métier', + 'contained_entity_name'=>'groupes_metier', 'controller_name'=>'GroupesMetiers' + ], + 'sur_categorie_id'=>[ + 'nice_name'=>'Domaine', + 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories' + ], + ], + $contains, + false, true, + $orderby, + $conditions, + $sortWhitelist, + $limit + ); + + /* $this->paginate = [ 'contain' => [ 'GroupesMetiers', @@ -555,32 +608,14 @@ class UsersController extends AppController { 'SurCategories.nom', ], 'limit' => 20, - /* + /S 'order' => [ 'Users.nom' => 'asc' ] - */ + S/ ]; + */ - $conditions = $filtre ? ['role =' => 'Responsable'] : []; - $entities = $this->paginate($this->Users->find('all', [ - 'conditions' => $conditions - ])); - // ALL users - //$entities = $this->paginate(); - // ce qui revient au même que : - //$users = $this->paginate($this->Users); - // Only priviledged users - //$users = $this->paginate($priviledgedUsers); - - // Affichage informations disponible pour l'utilisateur connecté - $this->myDebug($this->LdapAuth->user()); - - //////$this->set('nbUsers', $this->Users->find()->count()); - //$this->set('nbUsers', $this->Users->find('all')->count()); - //$this->set('nbUsers', $priviledgedUsers->count()); - - $this->set(compact('entities', 'lab_website_urls', 'filtre')); /* Inutile si pas de JSON $this->set('_serialize', [ 'users' diff --git a/src/Template/Common/index_gen.ctp b/src/Template/Common/index_gen.ctp index 932a14c..ba2f97b 100755 --- a/src/Template/Common/index_gen.ctp +++ b/src/Template/Common/index_gen.ctp @@ -23,6 +23,8 @@ $entity_plural = $entity_plural; $fields_names = $fields_names; $HAS_ADD_BUTTON = $HAS_ADD_BUTTON; $HAS_EDIT_DEL_BUTTONS = $HAS_EDIT_DEL_BUTTONS; +$sortWhitelist = $sortWhitelist; + /* // Ajout du champ "nom" automatique @@ -70,8 +72,9 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; //foreach ($fields_names as $fname=>$infos) { foreach ($fields_names as $fname=>$infos) { $nice_name = isset($infos['nice_name']) ? $infos['nice_name'] : $fname; - echo "".$this->Paginator->sort($fname, ucfirst($nice_name)).""; - } + if ( in_array($fname, array_keys($sortWhitelist)) ) $fname = $sortWhitelist[$fname]; + echo "".$this->Paginator->sort($fname, ucfirst($nice_name)).""; + } ?> @@ -79,7 +82,9 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; - + - - Paginator->sort('role') ?> - - - Paginator->sort('GroupesThematiques.nom', $configuration->nom_groupe_thematique) ?> - Paginator->sort('GroupesMetiers.nom', $configuration->nom_groupe_metier) ?> - Paginator->sort('SurCategories.nom', 'Domaine') ?> - - - - - - - - - Html->link(__(''), ['action' => 'edit', $user->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]); - //echo $this->Form->postLink(__(''), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer l\'utilisateur {0} ?', $user->nom)]); - } - ?> - - - Html->link($user->nom, ['action' => 'view', $user->id]) ?> - email) ?> - - - - role) ?> - - - has('groupes_thematique') ? h($user->groupes_thematique->nom) : '' ?> - has('groupes_metier') ? h($user->groupes_metier->nom) : '' ?> - has('sur_categorie_id') ? h($user->sur_category->nom) : '' ?> +$new_filtre = $filtre ? null : 'responsable'; +$link = $filtre ? 'Voir tous les utilisateurs' : 'Voir uniquement les responsables de groupes'; +echo $this->Html->link($link, [ + //'controller' => 'users', + //'action' => 'indexRecap', + //'sort' => 'sur_categorie_id', + 'sort' => 'nom', + 'direction' => 'asc', + 'filtre' => $new_filtre, +]); +echo "

"; - - - - +$this->end(); - element('pagination'); - echo $this->element('pagination_with_first_and_last'); - ?> - - \ No newline at end of file +$this->extend('/Common/index_gen'); +//$this->extend('index.orig'); \ No newline at end of file -- libgit2 0.21.2