Commit 3f9becf80cdeeafc12b1c20e6e7de16209f9e61b
1 parent
7b381e28
Exists in
master
and in
1 other branch
Refactorisation : vue users/index generique...
- et amélioration des tris par colonne pour toutes les listes - et la plupart des listes sont désormais triées par défaut par le nom v5.2.28-3.7.9
Showing
10 changed files
with
185 additions
and
155 deletions
Show diff stats
CHANGELOG
... | ... | @@ -523,25 +523,40 @@ TODO : |
523 | 523 | |
524 | 524 | |
525 | 525 | |
526 | - - un champ OBLIGATOIRE mais VIDE doit pouvoir être renseigné ! | |
527 | 526 | |
528 | 527 | |
529 | 528 | *) Stats de connexion |
530 | 529 | - le tri des autres colonnes ne marche plus |
531 | 530 | |
532 | - - saisir pweb2 + extension garantie (bc+fact+bl) | |
533 | 531 | |
532 | +- documents/index generique | |
533 | +- emprunts/index generic | |
534 | +- projets/index generic | |
534 | 535 | - ProjetsController minimaliste, doit juste étendre AppController avec un minimum de changement |
535 | 536 | |
536 | -- projets/index generic | |
537 | -- emprunts/index generic | |
538 | -- stats/index generic | |
539 | -- users/index generic | |
537 | +- add_edit generic | |
538 | + | |
539 | +- fusionner groupe thematique et metier (et projet ?) | |
540 | + | |
541 | + | |
542 | + | |
543 | +======= NEXT ======= | |
544 | + | |
545 | +index view : groupe metier et thematique => recup nom selon config | |
546 | + | |
547 | +garantie jqa 8/11/22 pour les 2 serveurs | |
540 | 548 | |
541 | 549 | ======= CHANGES ======= |
542 | 550 | |
543 | 551 | ------- |
552 | +11/11/2021 v5.2.28-3.7.9 | |
553 | + - (i) Refactorisation : vue users/index generique | |
554 | + - (e) amélioration des tris par colonne pour toutes les listes | |
555 | + - (e) la plupart des listes sont désormais triées par défaut par le nom | |
556 | + | |
557 | +------- | |
544 | 558 | 10/11/2021 v5.2.27-3.7.9 |
559 | + - un champ OBLIGATOIRE mais VIDE doit pouvoir être renseigné ! | |
545 | 560 | - (e) date fin garantie : date en orange quand < 1 an, rouge quand expirée (et mieux calculée qu'avant) |
546 | 561 | |
547 | 562 | ------- | ... | ... |
README.md
... | ... | @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : |
52 | 52 | |
53 | 53 | -------------------------------------------------------------------------------------------- |
54 | 54 | |
55 | -Date: 10/11/2021 | |
56 | -Version: v5.2.27-3.7.9 | |
55 | +Date: 11/11/2021 | |
56 | +Version: v5.2.28-3.7.9 | |
57 | 57 | |
58 | 58 | |
59 | 59 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) | ... | ... |
config/app_labinvent_mandatory_fields.default.yml
... | ... | @@ -451,7 +451,7 @@ MANDATORY_FIELDS_FOR_LOT2: |
451 | 451 | numero_commande: 'Num. BC' |
452 | 452 | |
453 | 453 | # Docs attachés obligatoires pour valider |
454 | - #DOC_DEVIS: 'Devis' | |
454 | + DOC_DEVIS: 'Devis' | |
455 | 455 | #DOC_BC: "Bon de Commande" |
456 | 456 | #DOC_BL: "Bon de Livraison" |
457 | 457 | #DOC_FACTURE: "Facture" | ... | ... |
src/Controller/AppController.php
... | ... | @@ -33,7 +33,7 @@ use Cake\Http\Exception\NotImplementedException; |
33 | 33 | use Cake\Controller\Component\AuthComponent; |
34 | 34 | use Cake\ORM\Entity; |
35 | 35 | use Cake\Utility\Inflector; |
36 | - | |
36 | +use Cake\Collection\Collection; | |
37 | 37 | |
38 | 38 | |
39 | 39 | /** |
... | ... | @@ -2146,20 +2146,50 @@ class AppController extends Controller |
2146 | 2146 | $entity_plural, |
2147 | 2147 | $fields_names=[], $contained_controllers=null, |
2148 | 2148 | $HAS_ADD_BUTTON=true, |
2149 | - $HAS_EDIT_DEL_BUTTONS=true , | |
2150 | - $sortBy = null | |
2149 | + $HAS_EDIT_DEL_BUTTONS=true, | |
2150 | + $sortBy = null, | |
2151 | + $conditions = [], | |
2152 | + $sortWhitelist = [], | |
2153 | + $limit = 20 | |
2151 | 2154 | ) |
2152 | 2155 | { |
2153 | 2156 | $controller_name = $this->getName(); |
2154 | 2157 | //debug($controller_name); |
2155 | 2158 | |
2156 | 2159 | $this->paginate = [ |
2157 | - 'contain' => $contained_controllers | |
2160 | + 'contain' => $contained_controllers, | |
2158 | 2161 | //'contain' => ['SurCategories'] |
2162 | + 'conditions' => $conditions, | |
2163 | + //'order' => ['nom' => 'asc'], | |
2164 | + //'sortWhitelist' => $sortWhitelist, | |
2165 | + /* | |
2166 | + 'sortWhitelist' => [ | |
2167 | + 'nom', | |
2168 | + 'email', | |
2169 | + 'role', | |
2170 | + 'GroupesThematiques.nom', | |
2171 | + 'GroupesMetiers.nom', | |
2172 | + 'SurCategories.nom', | |
2173 | + ], | |
2174 | + */ | |
2175 | + //'limit' => 20, | |
2176 | + 'limit' => $limit, | |
2159 | 2177 | ]; |
2178 | + if ($sortBy) $this->paginate['order'] = [$sortBy => 'asc']; | |
2179 | + if ($sortWhitelist) $this->paginate['sortWhitelist'] = array_values($sortWhitelist); | |
2180 | + | |
2160 | 2181 | //$categories = $this->paginate($this->Categories); |
2161 | 2182 | $entities = $this->paginate($this->$controller_name); |
2162 | - if ($sortBy) $entities = $entities->sortBy($sortBy); | |
2183 | + //debug($entities->first()); | |
2184 | + //debug($entities->toArray()); | |
2185 | + //debug($entities->toArray()); | |
2186 | + //foreach ($entities as $e) debug($e->nom); | |
2187 | + /* | |
2188 | + $collection = new Collection($entities); | |
2189 | + $sorted = $collection->sortBy($sortBy); | |
2190 | + foreach ($sorted as $e) debug($e->nom); | |
2191 | + */ | |
2192 | + | |
2163 | 2193 | // 'order' => array('Tapplicant.AppID' => 'desc'), |
2164 | 2194 | // $this->Paginator->sort('Hobby.name', 'Hobby'); |
2165 | 2195 | |
... | ... | @@ -2174,7 +2204,8 @@ class AppController extends Controller |
2174 | 2204 | $this->set(compact( |
2175 | 2205 | 'CAN_ADD', |
2176 | 2206 | 'entities', 'entity_plural', 'fields_names', |
2177 | - 'HAS_EDIT_DEL_BUTTONS', 'HAS_ADD_BUTTON' | |
2207 | + 'HAS_EDIT_DEL_BUTTONS', 'HAS_ADD_BUTTON', | |
2208 | + 'sortWhitelist' | |
2178 | 2209 | )); |
2179 | 2210 | |
2180 | 2211 | // Pas bien..., mais pratique : | ... | ... |
src/Controller/CategoriesController.php
... | ... | @@ -109,7 +109,14 @@ class CategoriesController extends AppController |
109 | 109 | 'nom'=>[], |
110 | 110 | 'sur_categorie_id'=>['nice_name'=>'Domaine', 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories'], |
111 | 111 | ], |
112 | - ['SurCategories'] | |
112 | + ['SurCategories'], | |
113 | + true, true, | |
114 | + 'nom', | |
115 | + [], | |
116 | + [ | |
117 | + 'nom' => 'nom', | |
118 | + 'sur_categorie_id'=>'SurCategories.nom' | |
119 | + ] | |
113 | 120 | ); |
114 | 121 | |
115 | 122 | /* |
... | ... | @@ -143,7 +150,7 @@ class CategoriesController extends AppController |
143 | 150 | //return parent::view($id, $associated_entity_types); |
144 | 151 | //return $this->view_generic($id, $associated_entity_types, 'SurCategories'); |
145 | 152 | //return $this->view_generic($id, $child_entity_types, ['SurCategories']); |
146 | - return $this->view_generic($id, $child_entity_types, 'SousCategories', 'sous-categories', ' une sous-catégorie'); | |
153 | + $this->view_generic($id, $child_entity_types, 'SousCategories', 'sous-categories', ' une sous-catégorie'); | |
147 | 154 | |
148 | 155 | /* |
149 | 156 | $category = $this->Categories->get($id, [ | ... | ... |
src/Controller/SousCategoriesController.php
... | ... | @@ -101,7 +101,14 @@ class SousCategoriesController extends AppController |
101 | 101 | 'nom'=>[], |
102 | 102 | 'categorie_id'=>['nice_name'=>'Catégorie', 'contained_entity_name'=>'category', 'controller_name'=>'Categories'], |
103 | 103 | ], |
104 | - ['Categories'] | |
104 | + ['Categories'], | |
105 | + true, true, | |
106 | + 'nom', | |
107 | + [], | |
108 | + [ | |
109 | + 'nom' => 'nom', | |
110 | + 'categorie_id'=>'Categories.nom' | |
111 | + ] | |
105 | 112 | ); |
106 | 113 | |
107 | 114 | /* | ... | ... |
src/Controller/SurCategoriesController.php
... | ... | @@ -175,8 +175,11 @@ class SurCategoriesController extends AppController |
175 | 175 | 'nom'=>[], |
176 | 176 | //'nom'=>['nice_name'=>'Nom'], |
177 | 177 | //'sur_categorie_id'=>['nice_name'=>'Domaine', 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories'], |
178 | - ] | |
178 | + ], | |
179 | 179 | //['SurCategories'] |
180 | + [], | |
181 | + true, true, | |
182 | + 'nom' | |
180 | 183 | ); |
181 | 184 | |
182 | 185 | /* | ... | ... |
src/Controller/UsersController.php
... | ... | @@ -514,32 +514,85 @@ class UsersController extends AppController { |
514 | 514 | */ |
515 | 515 | public function index() { |
516 | 516 | |
517 | - $filtre = $this->request->getQuery('filtre'); | |
518 | 517 | //debug($this->viewVars); |
519 | 518 | |
519 | + //$priviledgedUsers = $this->Users->find()->where(['role !=' => 'Utilisateur']); | |
520 | + | |
521 | + // ALL users | |
522 | + //$entities = $this->paginate(); | |
523 | + // ce qui revient au même que : | |
524 | + //$users = $this->paginate($this->Users); | |
525 | + // Only priviledged users | |
526 | + //$users = $this->paginate($priviledgedUsers); | |
527 | + | |
528 | + // Affichage informations disponible pour l'utilisateur connecté | |
529 | + $this->myDebug($this->LdapAuth->user()); | |
530 | + | |
531 | + $filtre = $this->request->getQuery('filtre'); | |
532 | + | |
520 | 533 | // Si on est sur l'instance de l'IRAP (InventIrap), |
521 | 534 | // on affiche l'url vers la page de l'ANNUAIRE du site web du labo |
522 | - $lab_website_urls = ($this->confLabinvent->labNameShort != 'IRAP') ? [] : [ | |
523 | - "Annuaire IRAP" => 'https://www.irap.omp.eu/annuaire', | |
524 | - "Annuaire IRAP (OMP)" => 'http://ezomp2.omp.obs-mip.fr/annuaire/annuaire-irap2', | |
525 | - ]; | |
535 | + $lab_website_urls = | |
536 | + $this->confLabinvent->labNameShort != 'IRAP' ? [] : | |
537 | + [ | |
538 | + "Annuaire IRAP" => 'https://www.irap.omp.eu/annuaire', | |
539 | + "Annuaire IRAP (OMP)" => 'http://ezomp2.omp.obs-mip.fr/annuaire/annuaire-irap2', | |
540 | + ]; | |
526 | 541 | |
527 | - //$priviledgedUsers = $this->Users->find()->where(['role !=' => 'Utilisateur']); | |
542 | + $this->set(compact('lab_website_urls', 'filtre')); | |
528 | 543 | |
544 | + $conditions = $filtre ? ['role =' => 'Responsable'] : []; | |
529 | 545 | /* |
530 | - $this->paginate = [ | |
531 | - 'contain' => [ | |
532 | - 'GroupesMetiers', | |
533 | - 'GroupesThematiques', | |
534 | - 'SurCategories' | |
535 | - ], | |
536 | - 'limit' => 12, | |
537 | - 'order' => [ | |
538 | - 'Users.nom' => 'asc' | |
539 | - ] | |
540 | - ]; | |
546 | + $entities = $this->paginate($this->Users->find('all', [ | |
547 | + 'conditions' => $conditions | |
548 | + ])); | |
541 | 549 | */ |
542 | 550 | |
551 | + $contains = [ | |
552 | + 'GroupesThematiques', | |
553 | + 'GroupesMetiers', | |
554 | + 'SurCategories' | |
555 | + ]; | |
556 | + | |
557 | + $sortWhitelist = [ | |
558 | + 'nom' => 'nom', | |
559 | + 'email' => 'email', | |
560 | + 'role' => 'role', | |
561 | + 'groupes_thematique_id' => 'GroupesThematiques.nom', | |
562 | + 'groupes_metier_id' => 'GroupesMetiers.nom', | |
563 | + 'sur_categorie_id' => 'SurCategories.nom', | |
564 | + ]; | |
565 | + $orderby = 'nom'; | |
566 | + $limit = 20; | |
567 | + | |
568 | + $this->index_generic( | |
569 | + 'utilisateurs', | |
570 | + [ | |
571 | + 'nom' => [], | |
572 | + 'email' => [], | |
573 | + 'role' => [], | |
574 | + 'groupes_thematique_id'=>[ | |
575 | + 'nice_name'=>'Groupe Thématique', | |
576 | + 'contained_entity_name'=>'groupes_thematique', 'controller_name'=>'GroupesThematiques' | |
577 | + ], | |
578 | + 'groupes_metier_id'=>[ | |
579 | + 'nice_name'=>'Groupe Métier', | |
580 | + 'contained_entity_name'=>'groupes_metier', 'controller_name'=>'GroupesMetiers' | |
581 | + ], | |
582 | + 'sur_categorie_id'=>[ | |
583 | + 'nice_name'=>'Domaine', | |
584 | + 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories' | |
585 | + ], | |
586 | + ], | |
587 | + $contains, | |
588 | + false, true, | |
589 | + $orderby, | |
590 | + $conditions, | |
591 | + $sortWhitelist, | |
592 | + $limit | |
593 | + ); | |
594 | + | |
595 | + /* | |
543 | 596 | $this->paginate = [ |
544 | 597 | 'contain' => [ |
545 | 598 | 'GroupesMetiers', |
... | ... | @@ -555,32 +608,14 @@ class UsersController extends AppController { |
555 | 608 | 'SurCategories.nom', |
556 | 609 | ], |
557 | 610 | 'limit' => 20, |
558 | - /* | |
611 | + /S | |
559 | 612 | 'order' => [ |
560 | 613 | 'Users.nom' => 'asc' |
561 | 614 | ] |
562 | - */ | |
615 | + S/ | |
563 | 616 | ]; |
617 | + */ | |
564 | 618 | |
565 | - $conditions = $filtre ? ['role =' => 'Responsable'] : []; | |
566 | - $entities = $this->paginate($this->Users->find('all', [ | |
567 | - 'conditions' => $conditions | |
568 | - ])); | |
569 | - // ALL users | |
570 | - //$entities = $this->paginate(); | |
571 | - // ce qui revient au même que : | |
572 | - //$users = $this->paginate($this->Users); | |
573 | - // Only priviledged users | |
574 | - //$users = $this->paginate($priviledgedUsers); | |
575 | - | |
576 | - // Affichage informations disponible pour l'utilisateur connecté | |
577 | - $this->myDebug($this->LdapAuth->user()); | |
578 | - | |
579 | - //////$this->set('nbUsers', $this->Users->find()->count()); | |
580 | - //$this->set('nbUsers', $this->Users->find('all')->count()); | |
581 | - //$this->set('nbUsers', $priviledgedUsers->count()); | |
582 | - | |
583 | - $this->set(compact('entities', 'lab_website_urls', 'filtre')); | |
584 | 619 | /* Inutile si pas de JSON |
585 | 620 | $this->set('_serialize', [ |
586 | 621 | 'users' | ... | ... |
src/Template/Common/index_gen.ctp
... | ... | @@ -23,6 +23,8 @@ $entity_plural = $entity_plural; |
23 | 23 | $fields_names = $fields_names; |
24 | 24 | $HAS_ADD_BUTTON = $HAS_ADD_BUTTON; |
25 | 25 | $HAS_EDIT_DEL_BUTTONS = $HAS_EDIT_DEL_BUTTONS; |
26 | +$sortWhitelist = $sortWhitelist; | |
27 | + | |
26 | 28 | |
27 | 29 | /* |
28 | 30 | // Ajout du champ "nom" automatique |
... | ... | @@ -70,8 +72,9 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; |
70 | 72 | //foreach ($fields_names as $fname=>$infos) { |
71 | 73 | foreach ($fields_names as $fname=>$infos) { |
72 | 74 | $nice_name = isset($infos['nice_name']) ? $infos['nice_name'] : $fname; |
73 | - echo "<th>".$this->Paginator->sort($fname, ucfirst($nice_name))."</th>"; | |
74 | - } | |
75 | + if ( in_array($fname, array_keys($sortWhitelist)) ) $fname = $sortWhitelist[$fname]; | |
76 | + echo "<th>".$this->Paginator->sort($fname, ucfirst($nice_name))."</th>"; | |
77 | + } | |
75 | 78 | ?> |
76 | 79 | |
77 | 80 | </tr> |
... | ... | @@ -79,7 +82,9 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; |
79 | 82 | |
80 | 83 | <!-- DATA --> |
81 | 84 | <tbody> |
82 | - <?php foreach ($entities as $e): ?> | |
85 | + <?php foreach ($entities as $e): | |
86 | + //debug($e); | |
87 | + ?> | |
83 | 88 | <tr> |
84 | 89 | |
85 | 90 | <!-- | ... | ... |
src/Template/Users/index.ctp
1 | 1 | <?php |
2 | -// Variables passées par le contrôleur | |
3 | -$entities = $entities; | |
4 | -$lab_website_urls = $lab_website_urls; | |
5 | -$filtre = $filtre; | |
6 | -//$nbUsers = $nbUsers; | |
7 | 2 | |
8 | -// Nombre total d'entités | |
9 | -$nbUsers = $this->Paginator->param('count'); | |
3 | +// Create the list_header block. | |
4 | +$this->start('list_header'); | |
10 | 5 | |
11 | -?> | |
12 | - | |
13 | -<div class="users index"> | |
14 | - <?php | |
15 | - $title = $filtre ? 'Liste des Responsables' : 'Liste des utilisateurs'; | |
16 | - $title .= " ($nbUsers)"; | |
17 | - echo "<h2><i class='icon-list'></i> $title</h2>"; | |
18 | - | |
19 | - // Si des urls sont données vers des pages web du labo, on les affiche | |
20 | - //$lab_website_urls = []; | |
21 | - if ($lab_website_urls) { | |
22 | - foreach ($lab_website_urls as $type_projet=>$lab_website_url) | |
23 | - echo "=> <a href=$lab_website_url>$type_projet sur le site web du laboratoire</a><br/>"; | |
6 | +// Si des urls sont données vers des pages web du labo, on les affiche | |
7 | +//$lab_website_urls = []; | |
8 | +if ($lab_website_urls) { | |
9 | + foreach ($lab_website_urls as $type_projet=>$lab_website_url) | |
10 | + echo "=> <a href=$lab_website_url>$type_projet sur le site web du laboratoire</a><br/>"; | |
24 | 11 | echo "<br/>"; |
25 | - } | |
26 | - | |
27 | - $new_filtre = $filtre ? null : 'responsable'; | |
28 | - $link = $filtre ? 'Voir tous les utilisateurs' : 'Voir uniquement les responsables de groupes'; | |
29 | - echo $this->Html->link($link, [ | |
30 | - //'controller' => 'users', | |
31 | - //'action' => 'indexRecap', | |
32 | - //'sort' => 'sur_categorie_id', | |
33 | - 'sort' => 'nom', | |
34 | - 'direction' => 'asc', | |
35 | - 'filtre' => $new_filtre, | |
36 | - ]); | |
37 | - echo "<br/><br/>"; | |
38 | - ?> | |
12 | +} | |
39 | 13 | |
40 | - <table style="border-collapse: separate; border-spacing: 0;"> | |
41 | - <thead> | |
42 | - <tr> | |
43 | - <th class="actions"><?= __('') ?></th> | |
44 | - <th><?= $this->Paginator->sort('nom') ?></th> | |
45 | - <th><?= $this->Paginator->sort('email') ?></th> | |
46 | - | |
47 | - <!-- Seulement si pas de filtre --> | |
48 | - <?php if (! $filtre) {?> | |
49 | - <th><?= $this->Paginator->sort('role') ?></th> | |
50 | - <?php }?> | |
51 | - | |
52 | - <th><?= $this->Paginator->sort('GroupesThematiques.nom', $configuration->nom_groupe_thematique) ?></th> | |
53 | - <th><?= $this->Paginator->sort('GroupesMetiers.nom', $configuration->nom_groupe_metier) ?></th> | |
54 | - <th><?= $this->Paginator->sort('SurCategories.nom', 'Domaine') ?></th> | |
55 | - | |
56 | - <th class="actions"><?= __('') ?></th> | |
57 | - </tr> | |
58 | - </thead> | |
59 | - <tbody> | |
60 | - <?php foreach ($entities as $user): ?> | |
61 | - <tr> | |
62 | - <td class="actions" style="padding: 6px 0; text-align: left;"> | |
63 | - <?php | |
64 | - if($role == 'Super Administrateur') { | |
65 | - echo $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $user->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]); | |
66 | - //echo $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer l\'utilisateur {0} ?', $user->nom)]); | |
67 | - } | |
68 | - ?> | |
69 | - </td> | |
70 | - | |
71 | - <td class="smallText"><?= $this->Html->link($user->nom, ['action' => 'view', $user->id]) ?></td> | |
72 | - <td class="smallText"><?= h($user->email) ?></td> | |
73 | - | |
74 | - <!-- Seulement si pas de filtre --> | |
75 | - <?php if (! $filtre) {?> | |
76 | - <td class="smallText"><?= h($user->role) ?></td> | |
77 | - <?php }?> | |
78 | - | |
79 | - <td class="smallText"><?= $user->has('groupes_thematique') ? h($user->groupes_thematique->nom) : '' ?></td> | |
80 | - <td class="smallText"><?= $user->has('groupes_metier') ? h($user->groupes_metier->nom) : '' ?></td> | |
81 | - <td class="smallText"><?= $user->has('sur_categorie_id') ? h($user->sur_category->nom) : '' ?></td> | |
14 | +$new_filtre = $filtre ? null : 'responsable'; | |
15 | +$link = $filtre ? 'Voir tous les utilisateurs' : 'Voir uniquement les responsables de groupes'; | |
16 | +echo $this->Html->link($link, [ | |
17 | + //'controller' => 'users', | |
18 | + //'action' => 'indexRecap', | |
19 | + //'sort' => 'sur_categorie_id', | |
20 | + 'sort' => 'nom', | |
21 | + 'direction' => 'asc', | |
22 | + 'filtre' => $new_filtre, | |
23 | +]); | |
24 | +echo "<br/><br/>"; | |
82 | 25 | |
83 | - </tr> | |
84 | - <?php endforeach; ?> | |
85 | - </tbody> | |
86 | - </table> | |
26 | +$this->end(); | |
87 | 27 | |
88 | - <?php | |
89 | - //echo $this->element('pagination'); | |
90 | - echo $this->element('pagination_with_first_and_last'); | |
91 | - ?> | |
92 | -</div> | |
93 | 28 | |
94 | -<!-- | |
95 | -<div class="actions"> | |
96 | - <php echo $this->element('menu') ?> | |
97 | - <php | |
98 | 29 | |
99 | -echo $this->element('menu_index', [ | |
100 | - 'pluralHumanName' => 'Utilisateurs', | |
101 | - 'singularHumanName' => 'Utilisateur' | |
102 | -])?> | |
103 | - </div> | |
104 | ---> | |
105 | 30 | \ No newline at end of file |
31 | +$this->extend('/Common/index_gen'); | |
32 | +//$this->extend('index.orig'); | |
106 | 33 | \ No newline at end of file | ... | ... |