Commit 404b35d8c618e44f6cd8c3f59817152f16fa857b
1 parent
06938694
Exists in
master
and in
1 other branch
Refactorisations, vues index et view génériques
- Vue détaillée users (view) générique avec contenu enrichi ("(responsable)") - Vue liste users (index) générique avec contenu enrichi ("(responsable)") - user->groupe_thematique_with_resp : groupe + (responsable) si c'est le cas - user->groupe_metier_with_resp : groupe + (responsable) si c'est le cas v5.3.0-3.7.9
Showing
8 changed files
with
136 additions
and
139 deletions
Show diff stats
CHANGELOG
@@ -359,6 +359,33 @@ Commencer à implémenter le nouveau workflow v5 : | @@ -359,6 +359,33 @@ Commencer à implémenter le nouveau workflow v5 : | ||
359 | ======= TODO ======= | 359 | ======= TODO ======= |
360 | 360 | ||
361 | 361 | ||
362 | + *) TESTS !!!! | ||
363 | + *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo) | ||
364 | + *) Ajouter test Commande (avec devis joint !) | ||
365 | + | ||
366 | + *) | ||
367 | + Relance auto lors de suivis périodiques | ||
368 | + | ||
369 | + *) Validation multiple ne marche plus | ||
370 | + | ||
371 | + *) DOMPDF : pb Qrcode absent sur fiche pdf (mais présent sur page web), alors que le QrCode est bien généré et que le chemin dans le pdf est OK !!! | ||
372 | +Par contre, ok avec FPDF | ||
373 | + | ||
374 | + *) LDAP trou sécu (autres labos) : user se connecte avec bad mdp | ||
375 | + | ||
376 | + *) | ||
377 | + Rendre modifiable la config via page web "Gérer les champs obligatoires" | ||
378 | + - OFF_nom_du_champ : 'libellé' | ||
379 | + - Restaurer la config par défaut | ||
380 | + - Réactiver une variable : OFF_nom_du_champ => nom_du_champ | ||
381 | + | ||
382 | + *) => update matos lifecycle diag | ||
383 | + | ||
384 | + | ||
385 | + | ||
386 | + | ||
387 | + | ||
388 | + | ||
362 | *) Quand on supprime un matos de “ma liste”, il faut revenir à “ma liste”, pas à “tous les matos” | 389 | *) Quand on supprime un matos de “ma liste”, il faut revenir à “ma liste”, pas à “tous les matos” |
363 | 390 | ||
364 | *) TEST_WEB ne marche pas avec docker | 391 | *) TEST_WEB ne marche pas avec docker |
@@ -366,22 +393,11 @@ Commencer à implémenter le nouveau workflow v5 : | @@ -366,22 +393,11 @@ Commencer à implémenter le nouveau workflow v5 : | ||
366 | (update doc) | 393 | (update doc) |
367 | Mais ca serait mieux de faire localhost:8080 pour le site web et :8081 pour phpmyadmin (et non pas l’inverse !!) | 394 | Mais ca serait mieux de faire localhost:8080 pour le site web et :8081 pour phpmyadmin (et non pas l’inverse !!) |
368 | 395 | ||
369 | - *) LDAP trou sécu (autres labos) : user se connecte avec bad mdp | ||
370 | - | ||
371 | - *) DOMPDF : pb Qrcode absent sur fiche pdf (mais présent sur page web), alors que le QrCode est bien généré et que le chemin dans le pdf est OK !!! | ||
372 | -Par contre, ok avec FPDF | ||
373 | - | ||
374 | *) Check extension ldap dans page web installation | 396 | *) Check extension ldap dans page web installation |
375 | 397 | ||
376 | *) Augmenter taille upload de mon labo | 398 | *) Augmenter taille upload de mon labo |
377 | 399 | ||
378 | *) Créer une page qui liste les gestionnaires | 400 | *) Créer une page qui liste les gestionnaires |
379 | - | ||
380 | - *) | ||
381 | - Rendre modifiable la config via page web "Gérer les champs obligatoires" | ||
382 | - - OFF_nom_du_champ : 'libellé' | ||
383 | - - Restaurer la config par défaut | ||
384 | - - Réactiver une variable : OFF_nom_du_champ => nom_du_champ | ||
385 | 401 | ||
386 | *) SUPERADMIN | 402 | *) SUPERADMIN |
387 | => par défaut, au minimum, mêmes droits que ADMIN | 403 | => par défaut, au minimum, mêmes droits que ADMIN |
@@ -395,7 +411,6 @@ Par contre, ok avec FPDF | @@ -395,7 +411,6 @@ Par contre, ok avec FPDF | ||
395 | - numéro inventaire (hidden par défaut pour l'édition) | 411 | - numéro inventaire (hidden par défaut pour l'édition) |
396 | - ... | 412 | - ... |
397 | 413 | ||
398 | - *) => update matos lifecycle diag | ||
399 | 414 | ||
400 | *) Vincent : | 415 | *) Vincent : |
401 | - email pas trouvé (ancienne fiche de vincent) | 416 | - email pas trouvé (ancienne fiche de vincent) |
@@ -407,12 +422,8 @@ Par contre, ok avec FPDF | @@ -407,12 +422,8 @@ Par contre, ok avec FPDF | ||
407 | 422 | ||
408 | *) qqsoit user : doit pouvoir voir sa fiche user (no modif) | 423 | *) qqsoit user : doit pouvoir voir sa fiche user (no modif) |
409 | => mais pas celle des autres... | 424 | => mais pas celle des autres... |
410 | - | ||
411 | - *) TESTS !!!! | ||
412 | - *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo) | ||
413 | - *) Ajouter test Commande (avec devis joint !) | ||
414 | 425 | ||
415 | - *) Validation multiple ne marche plus | 426 | + |
416 | 427 | ||
417 | *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? ==> voir message de log associé | 428 | *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? ==> voir message de log associé |
418 | (quelle diff avec "[LabInvent] Ajout d'un matériel" ??) | 429 | (quelle diff avec "[LabInvent] Ajout d'un matériel" ??) |
@@ -438,10 +449,7 @@ Par contre, ok avec FPDF | @@ -438,10 +449,7 @@ Par contre, ok avec FPDF | ||
438 | *) | 449 | *) |
439 | Procédures pour les utilisateurs et les gestionnaires désormais configurable via le fichier de conf | 450 | Procédures pour les utilisateurs et les gestionnaires désormais configurable via le fichier de conf |
440 | 451 | ||
441 | - | ||
442 | - *) | ||
443 | - Relance auto lors de suivis périodiques | ||
444 | - | 452 | + |
445 | *) | 453 | *) |
446 | Généraliser l'usage de Element/buttons_edit_del.ctp dans tous les formulaires de view | 454 | Généraliser l'usage de Element/buttons_edit_del.ctp dans tous les formulaires de view |
447 | 455 | ||
@@ -504,7 +512,6 @@ TODO : | @@ -504,7 +512,6 @@ TODO : | ||
504 | 512 | ||
505 | - fusionner elem/button_add_edit et MyHelper echoActionButton... | 513 | - fusionner elem/button_add_edit et MyHelper echoActionButton... |
506 | (ne garder que elem/) | 514 | (ne garder que elem/) |
507 | - | ||
508 | - séparer elem/button_add, button_edit, button_delete, et button_tout_court (générique) | 515 | - séparer elem/button_add, button_edit, button_delete, et button_tout_court (générique) |
509 | 516 | ||
510 | - short_role AppController ligne 819 => généraliser | 517 | - short_role AppController ligne 819 => généraliser |
@@ -537,17 +544,35 @@ TODO : | @@ -537,17 +544,35 @@ TODO : | ||
537 | - fusionner groupe thematique et metier (et projet ?) | 544 | - fusionner groupe thematique et metier (et projet ?) |
538 | 545 | ||
539 | - Utiliser les vues "index" des entités associées pour la vue "view" de materiel (et suivi) : | 546 | - Utiliser les vues "index" des entités associées pour la vue "view" de materiel (et suivi) : |
540 | - => éviter la redondance, le contenu est pratiquement le meme | 547 | + => éviter la redondance, le contenu est pratiquement le meme (???, sauf que les colonnes ne sont pas triables) |
541 | 548 | ||
542 | ======= NEXT ======= | 549 | ======= NEXT ======= |
543 | 550 | ||
551 | +print etiquette pour les 2 serveurs + tester fin garantie orange | ||
552 | + | ||
544 | view générique à utiliser pour plusieurs entités | 553 | view générique à utiliser pour plusieurs entités |
545 | 554 | ||
546 | -print etiquette pour les 2 serveurs + tester fin garantie orange | 555 | +Vues génériques (index et view) : |
556 | + - savoir gérer les champs virtuels pour le tri | ||
557 | + - new champs virtuels à implémenter : | ||
558 | + - prets : | ||
559 | + - intitulé = nom sinon id | ||
560 | + - lieu_stockage = concat(site,lieu) | ||
561 | + - users : vue "index" avec (responsable) | ||
562 | + | ||
563 | +- Suivis.statut => "en cours" ou "à terminer" => à calculer auto | ||
547 | 564 | ||
565 | + | ||
548 | ======= CHANGES ======= | 566 | ======= CHANGES ======= |
549 | 567 | ||
550 | ------- | 568 | ------- |
569 | +15/11/2021 v5.3.0-3.7.9 | ||
570 | + - (e) Refactorisation : Vue détaillée users (view) générique avec contenu enrichi ("(responsable)") | ||
571 | + - (e) Refactorisation : Vue liste users (index) générique avec contenu enrichi ("(responsable)") | ||
572 | + - user->groupe_thematique_with_resp : groupe + (responsable) si c'est le cas | ||
573 | + - user->groupe_metier_with_resp : groupe + (responsable) si c'est le cas | ||
574 | + | ||
575 | +------- | ||
551 | 12/11/2021 v5.2.30-3.7.9 | 576 | 12/11/2021 v5.2.30-3.7.9 |
552 | - (e) Refactorisation : Vue liste projets (index) générique | 577 | - (e) Refactorisation : Vue liste projets (index) générique |
553 | - (e) Amélioration vue des Stats de connexion : le tri des colonnes est maintenant ok | 578 | - (e) Amélioration vue des Stats de connexion : le tri des colonnes est maintenant ok |
@@ -556,7 +581,7 @@ print etiquette pour les 2 serveurs + tester fin garantie orange | @@ -556,7 +581,7 @@ print etiquette pour les 2 serveurs + tester fin garantie orange | ||
556 | - tri par défaut amélioré | 581 | - tri par défaut amélioré |
557 | - bugfix label du champ 'nom' | 582 | - bugfix label du champ 'nom' |
558 | - généralisation de l'affichage des booleens | 583 | - généralisation de l'affichage des booleens |
559 | - | 584 | + |
560 | ------- | 585 | ------- |
561 | 12/11/2021 v5.2.29-3.7.9 | 586 | 12/11/2021 v5.2.29-3.7.9 |
562 | - (b) Bugfix label (configurable) des groupes métier et thématique : maintenant ok dans toutes les vues | 587 | - (b) Bugfix label (configurable) des groupes métier et thématique : maintenant ok dans toutes les vues |
README.md
@@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : | ||
52 | 52 | ||
53 | -------------------------------------------------------------------------------------------- | 53 | -------------------------------------------------------------------------------------------- |
54 | 54 | ||
55 | -Date: 12/11/2021 | ||
56 | -Version: v5.2.30-3.7.9 | 55 | +Date: 15/11/2021 |
56 | +Version: v5.3.0-3.7.9 | ||
57 | 57 | ||
58 | 58 | ||
59 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) | 59 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) |
src/Controller/AppController.php
@@ -2148,7 +2148,8 @@ class AppController extends Controller | @@ -2148,7 +2148,8 @@ class AppController extends Controller | ||
2148 | */ | 2148 | */ |
2149 | public function index_generic( | 2149 | public function index_generic( |
2150 | $entity_plural, | 2150 | $entity_plural, |
2151 | - $fields_names=[], $contained_controllers=null, | 2151 | + $fields_names=[], |
2152 | + $contained_controllers=null, | ||
2152 | $HAS_ADD_BUTTON=true, | 2153 | $HAS_ADD_BUTTON=true, |
2153 | $HAS_EDIT_DEL_BUTTONS=true, | 2154 | $HAS_EDIT_DEL_BUTTONS=true, |
2154 | $sortBy = null, | 2155 | $sortBy = null, |
@@ -2266,8 +2267,11 @@ class AppController extends Controller | @@ -2266,8 +2267,11 @@ class AppController extends Controller | ||
2266 | 2267 | ||
2267 | //public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) { | 2268 | //public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) { |
2268 | //public function view_generic($id, $associated_entity_types, $containavirer=[]) { | 2269 | //public function view_generic($id, $associated_entity_types, $containavirer=[]) { |
2269 | - public function view_generic($id, $child_entity_types=[], | ||
2270 | - $sub_controller_class_name=null, $sub_controller=null, $sub_controller_singular=null) { | 2270 | + public function view_generic( |
2271 | + $id, $child_entity_types=[], | ||
2272 | + $sub_controller_class_name=null, $sub_controller=null, $sub_controller_singular=null, | ||
2273 | + $improved=[], $excluded=[] | ||
2274 | + ) { | ||
2271 | 2275 | ||
2272 | //debug($contain_children); | 2276 | //debug($contain_children); |
2273 | // ex: SurCategories | 2277 | // ex: SurCategories |
@@ -2393,6 +2397,9 @@ class AppController extends Controller | @@ -2393,6 +2397,9 @@ class AppController extends Controller | ||
2393 | $parent_entity_infos['type_name'] = $parent_entity_type_name; | 2397 | $parent_entity_infos['type_name'] = $parent_entity_type_name; |
2394 | $parent_entity_infos['name'] = $parent_entity_name; | 2398 | $parent_entity_infos['name'] = $parent_entity_name; |
2395 | $parent_entity_infos['fk_contained_name'] = $parent_entity_contained_name; | 2399 | $parent_entity_infos['fk_contained_name'] = $parent_entity_contained_name; |
2400 | + //if ($fk_name=='groupes_thematique_id') $parent_entity_infos['improved'] = 'groupe_thematique_with_resp'; | ||
2401 | + if ( isset($improved[$fk_name]) ) $parent_entity_infos['improved'] = $improved[$fk_name]; | ||
2402 | + | ||
2396 | } | 2403 | } |
2397 | //debug($parent_entities_infos); | 2404 | //debug($parent_entities_infos); |
2398 | //exit; | 2405 | //exit; |
@@ -2568,7 +2575,8 @@ class AppController extends Controller | @@ -2568,7 +2575,8 @@ class AppController extends Controller | ||
2568 | // Optionnel : sous-controleur pour pouvoir ajouter une sous-entité (ex: ajouter une sous-catégorie à une catégorie) | 2575 | // Optionnel : sous-controleur pour pouvoir ajouter une sous-entité (ex: ajouter une sous-catégorie à une catégorie) |
2569 | 'sub_controller', | 2576 | 'sub_controller', |
2570 | 'sub_controller_singular', | 2577 | 'sub_controller_singular', |
2571 | - 'CAN_ADD_SUB_ENTITY' | 2578 | + 'CAN_ADD_SUB_ENTITY', |
2579 | + 'excluded' | ||
2572 | 2580 | ||
2573 | )); | 2581 | )); |
2574 | //debug($this->viewVars);exit; | 2582 | //debug($this->viewVars);exit; |
src/Controller/UsersController.php
@@ -573,11 +573,15 @@ class UsersController extends AppController { | @@ -573,11 +573,15 @@ class UsersController extends AppController { | ||
573 | 'role' => [], | 573 | 'role' => [], |
574 | 'groupes_thematique_id'=>[ | 574 | 'groupes_thematique_id'=>[ |
575 | //'nice_name'=>'Groupe Thématique', | 575 | //'nice_name'=>'Groupe Thématique', |
576 | - 'contained_entity_name'=>'groupes_thematique', 'controller_name'=>'GroupesThematiques', | 576 | + 'contained_entity_name'=>'groupes_thematique', |
577 | + 'controller_name'=>'GroupesThematiques', | ||
578 | + 'improved' => 'groupe_thematique_with_resp', | ||
577 | ], | 579 | ], |
578 | 'groupes_metier_id'=>[ | 580 | 'groupes_metier_id'=>[ |
579 | //'nice_name'=>'Groupe Métier', | 581 | //'nice_name'=>'Groupe Métier', |
580 | - 'contained_entity_name'=>'groupes_metier', 'controller_name'=>'GroupesMetiers', | 582 | + 'contained_entity_name'=>'groupes_metier', |
583 | + 'controller_name'=>'GroupesMetiers', | ||
584 | + 'improved' => 'groupe_metier_with_resp', | ||
581 | ], | 585 | ], |
582 | 'sur_categorie_id'=>[ | 586 | 'sur_categorie_id'=>[ |
583 | //'nice_name'=>'Domaine', | 587 | //'nice_name'=>'Domaine', |
@@ -686,6 +690,28 @@ class UsersController extends AppController { | @@ -686,6 +690,28 @@ class UsersController extends AppController { | ||
686 | */ | 690 | */ |
687 | public function view($id = null) | 691 | public function view($id = null) |
688 | { | 692 | { |
693 | + /* | ||
694 | + $child_entity_types = [ | ||
695 | + 'GroupesMetiers', | ||
696 | + 'GroupesThematiques', | ||
697 | + 'SurCategories', | ||
698 | + ]; | ||
699 | + */ | ||
700 | + //return parent::view($id, $associated_entity_types); | ||
701 | + //return $this->view_generic($id, $associated_entity_types, 'SurCategories'); | ||
702 | + //return $this->view_generic($id, $child_entity_types, ['SurCategories']); | ||
703 | + //$this->view_generic($id, $child_entity_types); | ||
704 | + $improved = [ | ||
705 | + 'groupes_thematique_id' => 'groupe_thematique_with_resp', | ||
706 | + 'groupes_metier_id' => 'groupe_metier_with_resp', | ||
707 | + ]; | ||
708 | + $excluded = [ 'is_resp_groupes_metier', 'is_resp_groupes_thematique', 'modified', ]; | ||
709 | + $this->view_generic($id, [], null, null, null, | ||
710 | + $improved, | ||
711 | + $excluded | ||
712 | + ); | ||
713 | + return; | ||
714 | + | ||
689 | $user = $this->Users->get($id, [ | 715 | $user = $this->Users->get($id, [ |
690 | 'contain' => [ | 716 | 'contain' => [ |
691 | 'GroupesMetiers', | 717 | 'GroupesMetiers', |
@@ -693,11 +719,12 @@ class UsersController extends AppController { | @@ -693,11 +719,12 @@ class UsersController extends AppController { | ||
693 | 'SurCategories' | 719 | 'SurCategories' |
694 | ] | 720 | ] |
695 | ]); | 721 | ]); |
696 | - | ||
697 | $this->set('user', $user); | 722 | $this->set('user', $user); |
723 | + /* (EP) inutile sauf json | ||
698 | $this->set('_serialize', [ | 724 | $this->set('_serialize', [ |
699 | 'user' | 725 | 'user' |
700 | ]); | 726 | ]); |
727 | + */ | ||
701 | } | 728 | } |
702 | 729 | ||
703 | 730 |
src/Model/Entity/User.php
@@ -87,6 +87,20 @@ class User extends Entity | @@ -87,6 +87,20 @@ class User extends Entity | ||
87 | //protected function _getIsAdminplus() { return $this->role == 'Administration Plus'; } | 87 | //protected function _getIsAdminplus() { return $this->role == 'Administration Plus'; } |
88 | // $user->is_super | 88 | // $user->is_super |
89 | protected function _getIsSuper() { return $this->role == 'Super Administrateur'; } | 89 | protected function _getIsSuper() { return $this->role == 'Super Administrateur'; } |
90 | + | ||
91 | + // $user->groupe_thematique_with_resp | ||
92 | + protected function _getGroupeThematiqueWithResp() { | ||
93 | + $group_with_resp = ''; | ||
94 | + if ($this->has('groupes_thematique')) $group_with_resp .= $this->groupes_thematique->nom; | ||
95 | + if ($this->is_resp_groupes_thematique) $group_with_resp .= ' (responsable)'; | ||
96 | + return $group_with_resp; | ||
97 | + } | ||
98 | + protected function _getGroupeMetierWithResp() { | ||
99 | + $group_with_resp = ''; | ||
100 | + if ($this->has('groupes_metier')) $group_with_resp .= $this->groupes_metier->nom; | ||
101 | + if ($this->is_resp_groupes_metier) $group_with_resp .= ' (responsable)'; | ||
102 | + return $group_with_resp; | ||
103 | + } | ||
90 | 104 | ||
91 | 105 | ||
92 | /* | 106 | /* |
src/Template/Common/index_gen.ctp
@@ -127,6 +127,7 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | @@ -127,6 +127,7 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | ||
127 | //debug($fname); | 127 | //debug($fname); |
128 | //<td class="smallText"><?= $this->Html->link($e->nom, ['action' => 'view', $e->id]) ></td> | 128 | //<td class="smallText"><?= $this->Html->link($e->nom, ['action' => 'view', $e->id]) ></td> |
129 | echo "<td class='smallText'>"; | 129 | echo "<td class='smallText'>"; |
130 | + | ||
130 | // - S'il y a une fonction de transformation à appliquer, ben... on l'applique | 131 | // - S'il y a une fonction de transformation à appliquer, ben... on l'applique |
131 | //var_dump($fname); | 132 | //var_dump($fname); |
132 | if ( isset($fields_names[$fname]['f']) ) { | 133 | if ( isset($fields_names[$fname]['f']) ) { |
@@ -135,9 +136,11 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | @@ -135,9 +136,11 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | ||
135 | //var_dump("Y"); | 136 | //var_dump("Y"); |
136 | echo $this->MyHelper->$f($fval); | 137 | echo $this->MyHelper->$f($fval); |
137 | } | 138 | } |
139 | + | ||
138 | // - Si c'est le champ "nom" ou "id", on l'affiche comme un lien | 140 | // - Si c'est le champ "nom" ou "id", on l'affiche comme un lien |
139 | elseif ($fname == 'nom' || $fname == 'id') | 141 | elseif ($fname == 'nom' || $fname == 'id') |
140 | echo $this->Html->link($fval, ['action' => 'view', $e->id]); | 142 | echo $this->Html->link($fval, ['action' => 'view', $e->id]); |
143 | + | ||
141 | // - Si le champ est boolean => on affiche oui/non | 144 | // - Si le champ est boolean => on affiche oui/non |
142 | //elseif ( (substr($fname,0,3)=='is_') && ($fval===false || $fval===true) ) | 145 | //elseif ( (substr($fname,0,3)=='is_') && ($fval===false || $fval===true) ) |
143 | elseif ( | 146 | elseif ( |
@@ -149,6 +152,7 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | @@ -149,6 +152,7 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | ||
149 | //echo $fval ? "Oui" : "Non"; | 152 | //echo $fval ? "Oui" : "Non"; |
150 | echo $fval ? $bool_values[0] : $bool_values[1]; | 153 | echo $fval ? $bool_values[0] : $bool_values[1]; |
151 | } | 154 | } |
155 | + | ||
152 | // - Si le champ est une FK => on récupère la valeur du 'contained' | 156 | // - Si le champ est une FK => on récupère la valeur du 'contained' |
153 | //elseif ( strpos($fname,'_id') !== strlen($fname)-3 ) | 157 | //elseif ( strpos($fname,'_id') !== strlen($fname)-3 ) |
154 | elseif ( substr($fname,-3) == '_id' ) { | 158 | elseif ( substr($fname,-3) == '_id' ) { |
@@ -163,7 +167,16 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | @@ -163,7 +167,16 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; | ||
163 | $name_field_label = $infos['name_field_label']; // 'nom' ou 'designation' ou ... | 167 | $name_field_label = $infos['name_field_label']; // 'nom' ou 'designation' ou ... |
164 | 168 | ||
165 | //$projet->has('chef_science_id') ? $this->Html->link($projet->chef_science->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_science_id]) : '' ></td> | 169 | //$projet->has('chef_science_id') ? $this->Html->link($projet->chef_science->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_science_id]) : '' ></td> |
166 | - $linkval = $e->has($contained_entity_name) ? $e->$contained_entity_name->$name_field_label : $fval; | 170 | + //$linkval = $e->has($contained_entity_name) ? $e->$contained_entity_name->$name_field_label : $fval; |
171 | + if ($e->has($contained_entity_name)) { | ||
172 | + if ( isset($fields_names[$fname]['improved']) ) { | ||
173 | + $fk_field = $fields_names[$fname]['improved']; | ||
174 | + $linkval = $e->$fk_field; | ||
175 | + } | ||
176 | + else | ||
177 | + $linkval = $e->$contained_entity_name->$name_field_label; | ||
178 | + } | ||
179 | + else $linkval = $fval; | ||
167 | //echo $this->Html->link($fval, ['controller' => $controller_name, 'action' => 'view', $e->sur_category->id]); | 180 | //echo $this->Html->link($fval, ['controller' => $controller_name, 'action' => 'view', $e->sur_category->id]); |
168 | echo $this->Html->link($linkval, ['controller' => $controller_name, 'action' => 'view', $fval]); | 181 | echo $this->Html->link($linkval, ['controller' => $controller_name, 'action' => 'view', $fval]); |
169 | /* | 182 | /* |
src/Template/Common/view.ctp
@@ -32,6 +32,9 @@ $entity = $entity; | @@ -32,6 +32,9 @@ $entity = $entity; | ||
32 | //debug($entity); | 32 | //debug($entity); |
33 | //$parent_entity_infos=$parent_entity_infos; | 33 | //$parent_entity_infos=$parent_entity_infos; |
34 | $parent_entities_infos = $parent_entities_infos; | 34 | $parent_entities_infos = $parent_entities_infos; |
35 | +//$parent_entities_infos['groupes_thematique_id']['improved'] = 'groupe_thematique_with_resp'; | ||
36 | +//$parent_entities_infos['groupes_metier_id']['improved'] = 'groupe_metier_with_resp'; | ||
37 | +//debug($parent_entities_infos); | ||
35 | $fields_label = $fields_label; | 38 | $fields_label = $fields_label; |
36 | /* | 39 | /* |
37 | $parent_entity_controller_name = $parent_entity_controller_name; | 40 | $parent_entity_controller_name = $parent_entity_controller_name; |
@@ -49,6 +52,7 @@ $entity_name = $entity_name; | @@ -49,6 +52,7 @@ $entity_name = $entity_name; | ||
49 | // Liste des entités à afficher (en tant qu'entité associée) : | 52 | // Liste des entités à afficher (en tant qu'entité associée) : |
50 | // En général, par défaut : "Matériels associés" et "Utilisateurs associés" | 53 | // En général, par défaut : "Matériels associés" et "Utilisateurs associés" |
51 | $child_entities_list = $child_entities_list; | 54 | $child_entities_list = $child_entities_list; |
55 | +$excluded = $excluded; | ||
52 | 56 | ||
53 | // OPTIONNELS | 57 | // OPTIONNELS |
54 | if (isset($sub_controller)) { | 58 | if (isset($sub_controller)) { |
@@ -130,13 +134,15 @@ if (isset($sub_controller)) { | @@ -130,13 +134,15 @@ if (isset($sub_controller)) { | ||
130 | //debug($fields_label); | 134 | //debug($fields_label); |
131 | //debug($parent_entities_infos); | 135 | //debug($parent_entities_infos); |
132 | foreach ($entity->toArray() as $fname=>$fval) { | 136 | foreach ($entity->toArray() as $fname=>$fval) { |
137 | + if (in_array($fname, $excluded)) continue; | ||
133 | if ( $fval!==null && $fname!='id' && $fname!='description' && !is_array($fval) ) { | 138 | if ( $fval!==null && $fname!='id' && $fname!='description' && !is_array($fval) ) { |
134 | //debug($fname); | 139 | //debug($fname); |
135 | //debug($fval); | 140 | //debug($fval); |
136 | $flabel = ucfirst($fields_label[$fname]); | 141 | $flabel = ucfirst($fields_label[$fname]); |
137 | $fvalue = $fval; | 142 | $fvalue = $fval; |
138 | // Si le champ n'est pas une FK (terminant par '_id') => on l'affiche directement | 143 | // Si le champ n'est pas une FK (terminant par '_id') => on l'affiche directement |
139 | - if ( strpos($fname,'_id') !== strlen($fname)-3 ) | 144 | + //if ( strpos($fname,'_id') !== strlen($fname)-3 ) |
145 | + if ( substr($fname,-3)!='_id' ) | ||
140 | $this->MyHelper->displayTableRowLabelAndValue(__($flabel), h($fvalue)); | 146 | $this->MyHelper->displayTableRowLabelAndValue(__($flabel), h($fvalue)); |
141 | // Si le champ est une FK => on récupère la valeur du 'contained' | 147 | // Si le champ est une FK => on récupère la valeur du 'contained' |
142 | else { | 148 | else { |
@@ -146,7 +152,11 @@ if (isset($sub_controller)) { | @@ -146,7 +152,11 @@ if (isset($sub_controller)) { | ||
146 | $fk_contained_name = $parent_entity_infos['fk_contained_name']; | 152 | $fk_contained_name = $parent_entity_infos['fk_contained_name']; |
147 | //debug($fk_contained_name); | 153 | //debug($fk_contained_name); |
148 | //$fvalue = $associated_entity_infos['name']; | 154 | //$fvalue = $associated_entity_infos['name']; |
149 | - $fvalue = $entity->$fk_contained_name->nom; | 155 | + |
156 | + //$fvalue = $entity->$fk_contained_name->nom; | ||
157 | + $fk_field = isset($parent_entity_infos['improved']) ? $parent_entity_infos['improved'] : null; | ||
158 | + $fvalue = $fk_field ? $entity->$fk_field : $entity->$fk_contained_name->nom; | ||
159 | + | ||
150 | $this->MyHelper->displayTableRowLabelAndValue( | 160 | $this->MyHelper->displayTableRowLabelAndValue( |
151 | __(ucfirst($parent_entity_infos['type_name'])), | 161 | __(ucfirst($parent_entity_infos['type_name'])), |
152 | //$category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [ | 162 | //$category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [ |
src/Template/Users/view.ctp
1 | - | ||
2 | - | ||
3 | -<div class="users view"> | ||
4 | - <h2>Détail utilisateur</h2> | ||
5 | - <table style="margin-bottom: 30px;"> | ||
6 | - | ||
7 | - <tr> | ||
8 | - <th style="width: 250px;"></th> | ||
9 | - <th></th> | ||
10 | - </tr> | ||
11 | - | ||
12 | - <?php | ||
13 | - if ($role == 'Super Administrateur') { | ||
14 | - echo $this->Html->link(__('<i class="icon-pencil"></i> Editer cet utilisateur'), [ | ||
15 | - 'action' => 'edit', | ||
16 | - $user->id | ||
17 | - ], [ | ||
18 | - 'style' => 'margin-right: 40px; display: inline-block', | ||
19 | - 'escape' => false, | ||
20 | - 'onclick' => 'return true;' | ||
21 | - ]); | ||
22 | - /* | ||
23 | - * (EP 3/6/19) | ||
24 | - * Voir ma remarque dans la vue edit.ctp | ||
25 | - * La table users n'est qu'un CACHE du LDAP ou du fake ldap (pas d'autre alternative). | ||
26 | - * On ne doit donc pas pouvoir supprimer un user de cette table, mais seulement depuis le LDAP (ou fake ldap, c'est à dire table fakeldapusers) | ||
27 | - */ | ||
28 | - echo $this->Form->postLink(__('<i class="icon-trash"></i> Supprimer cet utilisateur'), [ | ||
29 | - 'action' => 'delete', | ||
30 | - $user->id | ||
31 | - ], [ | ||
32 | - 'style' => 'display: inline-block;', | ||
33 | - 'escape' => false, | ||
34 | - 'confirm' => __('Êtes-vous sur de vouloir supprimer ?', $user->nom) | ||
35 | - ]); | ||
36 | - } | ||
37 | - | ||
38 | - $displayElement(__('Nom'), h($user->nom)); | ||
39 | - $displayElement(__('Login'), h($user->username)); | ||
40 | - $displayElement(__('Email'), h($user->email)); | ||
41 | - $displayElement(__('Rôle'), h($user->role)); | ||
42 | - | ||
43 | - // Groupes métier et thématique | ||
44 | - foreach (['metier','thematique'] as $ftype) { | ||
45 | - //$ftype = 'thematique'; | ||
46 | - $fname = 'groupes_'.$ftype; | ||
47 | - $fname_sing = 'groupe_'.$ftype; | ||
48 | - $fname_isresp = 'is_resp_'.$fname; | ||
49 | - $fname_conf = 'nom_'.$fname_sing; | ||
50 | - $control = 'Groupes'.ucfirst($ftype).'s'; | ||
51 | - if ($user->has($fname)) { | ||
52 | - $group_name = $user->$fname->nom; | ||
53 | - if ($user->$fname_isresp) $group_name .= ' (responsable)'; | ||
54 | - $displayElement(__($configuration->$fname_conf), $this->Html->link($group_name, [ | ||
55 | - 'controller' => $control, | ||
56 | - 'action' => 'view', | ||
57 | - $user->$fname->id | ||
58 | - ])); | ||
59 | - } | ||
60 | - } | ||
61 | - /* | ||
62 | - if ($user->has('groupes_metier')) { | ||
63 | - $groupe_metier = $user->groupes_metier->nom; | ||
64 | - if ($user->is_resp_groupe_metier) $groupe_metier .= ' (responsable)'; | ||
65 | - $displayElement(__($configuration->nom_groupe_metier), $this->Html->link($groupe_metier, [ | ||
66 | - 'controller' => 'GroupesMetiers', | ||
67 | - 'action' => 'view', | ||
68 | - $user->groupes_metier->id | ||
69 | - ])); | ||
70 | - } | ||
71 | - $displayElement(__($configuration->nom_groupe_metier), $user->has('groupes_metier') ? $this->Html->link($user->groupes_metier->nom, [ | ||
72 | - 'controller' => 'GroupesMetiers', | ||
73 | - 'action' => 'view', | ||
74 | - $user->groupes_metier->id | ||
75 | - ]) : ''); | ||
76 | - $displayElement(__('Responsable groupe'), h($user->is_resp_groupe_metier)); | ||
77 | - */ | ||
78 | - | ||
79 | - if ( $user->has('sur_categorie_id') ) $displayElement(__('Domaine'), | ||
80 | - $this->Html->link($user->sur_category->nom, [ | ||
81 | - 'controller' => 'SurCategories', | ||
82 | - 'action' => 'view', | ||
83 | - $user->sur_category->id | ||
84 | - ])); | ||
85 | - | ||
86 | - ?> | ||
87 | - | ||
88 | - </table> | ||
89 | -</div> | ||
90 | - | ||
91 | -<!-- | ||
92 | -<div class="actions"> | ||
93 | - <php echo $this->element('menu') ?> | ||
94 | - <php | ||
95 | - | ||
96 | -echo $this->element('menu_view', [ | ||
97 | - 'pluralHumanName' => 'Utilisateurs', | ||
98 | - 'singularHumanName' => 'Utilisateur', | ||
99 | - 'lien' => $user->id | ||
100 | -])?> | ||
101 | - </div> | ||
102 | ---> | ||
103 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +<?php | ||
3 | +$this->extend('/Common/view'); | ||
104 | \ No newline at end of file | 4 | \ No newline at end of file |