Commit 404b35d8c618e44f6cd8c3f59817152f16fa857b

Authored by Etienne Pallier
1 parent 06938694
Exists in master and in 1 other branch dev

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
@@ -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
@@ -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[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;]; @@ -135,9 +136,11 @@ if (empty($fields_names[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;];
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[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;]; @@ -149,6 +152,7 @@ if (empty($fields_names[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;];
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[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;]; @@ -163,7 +167,16 @@ if (empty($fields_names[&#39;nom&#39;])) $fields_names[&#39;nom&#39;] = [&#39;nice_name&#39;=&gt;&#39;Nom&#39;];
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