Commit 134406cd5712fabbf2f42b6aa7c3f15769999f27

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

Une seule vue unique pour la liste des groupes métier/thématique

(refactorisation)

=> nouvelle action générique index_generic() dans
Controller/AppController.php (à côté de view_generic())
=> nouvelle vue générique index.ctp dans Template/Common/ (à côté de
view.ctp)
=> début de vue unique pour TOUTES les "autres listes" (faut juste
généraliser un peu plus...)
=> TODO: ne restera plus qu'à faire la dernière vue/action générique
add_edit (mais aussi delete),
pour avoir un CRUD générique complet pour TOUTES les "autres listes"

Mais aussi :

- Ajout d'un lien vers la page web des projets du lobo (sur page
projets)

- On n'affiche que la 1ère ligne de la description des groupes
thématique/métier

v4.105.10-3.7.9
CHANGES.txt
... ... @@ -120,6 +120,17 @@ Outre ces changements, voici d'autres changements importants :
120 120 ======= CHANGES =======
121 121  
122 122 -------
  123 +09/10/2020 v4.105.10-3.7.9 (EP)
  124 + - (i) Une seule vue unique pour la liste des groupes métier/thématique (refactorisation)
  125 + => nouvelle action générique index_generic() dans Controller/AppController.php (à côté de view_generic())
  126 + => nouvelle vue générique index.ctp dans Template/Common/ (à côté de view.ctp)
  127 + => début de vue unique pour TOUTES les "autres listes" (faut juste généraliser un peu plus...)
  128 + => TODO: ne restera plus qu'à faire la dernière vue/action générique add_edit (mais aussi delete),
  129 + pour avoir un CRUD générique complet pour TOUTES les "autres listes"
  130 + - (e) Ajout d'un lien vers la page web des projets du lobo (sur page projets)
  131 + - (e) On n'affiche que la 1ère ligne de la description des groupes thématique/métier
  132 +
  133 +-------
123 134 08/10/2020 v4.105.9-3.7.9 (EP)
124 135 - (i) Ajout d'un lien vers la page web des groupes métier/thématique du lobo
125 136 - (i) Ajout de la mention de l'utilisateur (proprio) du matériel dans les notifications
... ...
README.md
... ... @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes :
43 43 --------------------------------------------------------------------------------------------
44 44  
45 45 Date: 08/10/2020
46   -Version: 4.105.9-3.7.9
  46 +Version: 4.105.10-3.7.9
47 47  
48 48  
49 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
src/Controller/AppController.php
... ... @@ -2176,6 +2176,29 @@ class AppController extends Controller
2176 2176  
2177 2177 } // beforeFilter()
2178 2178  
  2179 +
  2180 + public function index_generic($group_type1, $group_type2, $lab_website_url=null) {
  2181 +
  2182 + // https://book.cakephp.org/3/fr/controllers/components/pagination.html
  2183 + $groups = $this->paginate();
  2184 + // ce qui revient au même que :
  2185 + //$groupesThematiques = $this->paginate($this->GroupesThematiques);
  2186 +
  2187 + //$group_type1 = 'thematique';
  2188 + //$group_type2 = 'thématique';
  2189 +
  2190 + // Si on est sur l'instance de l'IRAP (InventIrap)
  2191 + // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
  2192 + $lab_website_url = ($this->confLabinvent->labNameShort != 'IRAP') ? null : $lab_website_url;
  2193 +
  2194 + $this->set(compact('group_type1', 'group_type2', 'lab_website_url', 'groups'));
  2195 +
  2196 + /* Utile seulement pour JSON
  2197 + $this->set('_serialize', [
  2198 + 'groupesThematiques'
  2199 + ]);
  2200 + */
  2201 + }
2179 2202  
2180 2203 //public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) {
2181 2204 //public function view_generic($id, $associated_entity_types, $containavirer=[]) {
... ...
src/Controller/GroupesMetiersController.php
... ... @@ -76,20 +76,31 @@ class GroupesMetiersController extends AppController
76 76 *
77 77 * @return \Cake\Network\Response|null
78 78 */
79   - public function index()
80   - {
81   - $groupesMetiers = $this->paginate($this->GroupesMetiers);
  79 + public function index() {
  80 +
  81 + $this->index_generic(
  82 + 'metier', 'métier',
  83 + "https://www.irap.omp.eu/homepage/organisation/groupes-metiers"
  84 + );
  85 +
  86 + /*
  87 + //$groupesMetiers = $this->paginate($this->GroupesMetiers);
  88 + $groups = $this->paginate($this->GroupesMetiers);
  89 +
  90 + $group_type1 = 'metier';
  91 + $group_type2 = 'métier';
82 92  
83 93 // Si on est sur l'instance de l'IRAP (InventIrap)
84 94 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
85 95 $lab_website_url = ($this->confLabinvent->labNameShort != 'IRAP') ? null : "https://www.irap.omp.eu/homepage/organisation/groupes-metiers";
86 96  
87   - $this->set(compact('groupesMetiers', 'lab_website_url'));
88   -
89   - /* Utile seulement pour JSON
  97 + //$this->set(compact('groupesMetiers', 'lab_website_url'));
  98 + $this->set(compact('group_type1', 'group_type2', 'lab_website_url', 'groups'));
  99 + /S Utile seulement pour JSON
90 100 $this->set('_serialize', [
91 101 'groupesMetiers'
92 102 ]);
  103 + S/
93 104 */
94 105 }
95 106  
... ...
src/Controller/GroupesThematiquesController.php
... ... @@ -69,23 +69,36 @@ class GroupesThematiquesController extends AppController
69 69 *
70 70 * @return \Cake\Network\Response|null
71 71 */
72   - public function index()
73   - {
74   - $groupesThematiques = $this->paginate($this->GroupesThematiques);
  72 + public function index() {
  73 +
  74 + $this->index_generic(
  75 + 'thematique', 'thématique',
  76 + "https://www.irap.omp.eu/homepage/organisation/groupes-thematiques"
  77 + );
  78 +
  79 + /*
  80 + // https://book.cakephp.org/3/fr/controllers/components/pagination.html
  81 + $groups = $this->paginate();
  82 + // ce qui revient au même que :
  83 + //$groupesThematiques = $this->paginate($this->GroupesThematiques);
  84 +
  85 + $group_type1 = 'thematique';
  86 + $group_type2 = 'thématique';
75 87  
76 88 // Si on est sur l'instance de l'IRAP (InventIrap)
77 89 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
78 90 $lab_website_url = ($this->confLabinvent->labNameShort != 'IRAP') ? null : "https://www.irap.omp.eu/homepage/organisation/groupes-thematiques";
79 91  
80   - $this->set(compact('groupesThematiques', 'lab_website_url'));
  92 + $this->set(compact('group_type1', 'group_type2', 'lab_website_url', 'groups'));
81 93  
82   - /* Utile seulement pour JSON
  94 + /S Utile seulement pour JSON
83 95 $this->set('_serialize', [
84 96 'groupesThematiques'
85 97 ]);
  98 + S/
86 99 */
87   -
88 100 }
  101 +
89 102  
90 103 /**
91 104 * View method
... ...
src/Controller/ProjetsController.php
... ... @@ -43,14 +43,29 @@ class ProjetsController extends AppController {
43 43 */
44 44 public function index()
45 45 {
  46 + // https://book.cakephp.org/3/fr/controllers/components/pagination.html
46 47 $this->paginate = [
47 48 //'contain' => ['GroupesThematiques', 'Users']
48 49 //'contain' => ['GroupesThematiques', 'Pis', 'Pms']
49 50 'contain' => ['GroupesThematiques', 'ChefSciences', 'ChefProjets']
50 51 ];
51   - $projets = $this->paginate($this->Projets);
52   -
53   - $this->set(compact('projets'));
  52 + $projets = $this->paginate();
  53 + // ce qui équivaut à :
  54 + //s$projets = $this->paginate($this->Projets);
  55 +
  56 + // Si on est sur l'instance de l'IRAP (InventIrap)
  57 + // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
  58 + $lab_website_urls = ($this->confLabinvent->labNameShort != 'IRAP') ?
  59 + []
  60 + :
  61 + [
  62 + 'Projets Instrumentaux' => 'https://www.irap.omp.eu/sedoo-project-tag/projets_instrumentaux',
  63 + 'Projets Scientifiques' => 'https://www.irap.omp.eu/sedoo-project-tag/projets-scientifiques',
  64 + 'Projets R&T' => 'https://www.irap.omp.eu/sedoo-project-tag/rt',
  65 + 'Projets financés (ANR, Europe...)' => 'https://www.irap.omp.eu/observation-instrumentation/projets/projets-finances',
  66 + ];
  67 +
  68 + $this->set(compact('projets', 'lab_website_urls'));
54 69 }
55 70  
56 71 /**
... ...
src/Template/Common/index.ctp 0 → 100755
... ... @@ -0,0 +1,105 @@
  1 +<?php
  2 +// Variables passées par le controleur
  3 +/*
  4 +$group_type1 = 'thematique';
  5 +$group_type2 = 'thématique';
  6 +$group_type1 = 'metier';
  7 +$group_type2 = 'métier';
  8 +*/
  9 +$group_type1 = $group_type1;
  10 +$group_type2 = $group_type2;
  11 +$lab_website_url = $lab_website_url;
  12 +$groups = $groups;
  13 +?>
  14 +
  15 +<!--
  16 +<div class="groupesThematiques index">
  17 + -->
  18 +<div class="groups index">
  19 +
  20 + <?php
  21 + // Nom du groupe au pluriel (chaque mot)
  22 + //echo '<h2><i class="icon-list"></i> Liste des '.$configuration->nom_groupe_thematique.'s</h2>';
  23 + $group_type_name = $configuration->{'nom_groupe_'.$group_type1};
  24 + $words = explode(' ',$group_type_name);
  25 + $group_type_name_plural = '';
  26 + foreach($words as $word) $group_type_name_plural .= $word.'s ';
  27 + echo "<h2><i class='icon-list'></i> Liste des $group_type_name_plural</h2>";
  28 +
  29 + // Si une url est donnée vers la page des Groupes thématiques sur le site web du labo, on l'affiche
  30 + if ($lab_website_url)
  31 + echo "=> <a href=$lab_website_url>Groupes {$group_type2}s sur le site web du laboratoire</a><br/><br/>";
  32 +
  33 + echo $this->element('button_add');
  34 + ?>
  35 +
  36 + <table style="border-collapse: separate; border-spacing: 0; width: 270px;">
  37 +
  38 + <thead>
  39 + <tr>
  40 + <th class="actions"><?= __('') ?></th>
  41 + <!-- Pas de tri sur les colonnes, inutile
  42 + <th><= $this->Paginator->sort('nom', 'Nom') ?></th>
  43 + <th><= $this->Paginator->sort('description', 'Description') ?></th>
  44 + -->
  45 + <th>Nom</th>
  46 + <th>Description</th>
  47 + </tr>
  48 + </thead>
  49 +
  50 + <tbody>
  51 + <?php
  52 + foreach ($groups as $group) :
  53 + //if ($group->nom != 'N/A') {
  54 + if ($group->id) {
  55 + ?>
  56 + <tr>
  57 +
  58 + <td class="actions" style="padding: 6px 0; text-align: left;">
  59 + <?php
  60 + if (in_array($role, ['Administration Plus', 'Super Administrateur']))
  61 + echo $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $group->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]);
  62 + if (in_array($role, ['Super Administrateur']))
  63 + echo $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $group->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer ce groupe ?', $group->id)]);
  64 + //echo $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $group->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $group->id)]);
  65 + ?>
  66 + </td>
  67 +
  68 + <td class="smallText"><?= $this->Html->link($group->nom, ['action' => 'view', $group->id]) ?></td>
  69 +
  70 + <?php
  71 + // On n'affiche que la 1ère ligne de la description
  72 + //$group->description = null;
  73 + $description_first_line = explode("\n", $group->description)[0];
  74 + //debug($description_short);
  75 + //$description_short = $description_short[0];
  76 + ?>
  77 + <td class="smallText"><?=h($description_first_line)?></td>
  78 +
  79 + </tr>
  80 + <?php
  81 + } // if
  82 + endforeach;
  83 + ?>
  84 + </tbody>
  85 +
  86 + </table>
  87 +
  88 + <?php
  89 + // Inutile
  90 + //echo $this->element('pagination');
  91 + ?>
  92 +
  93 +</div>
  94 +
  95 +<!--
  96 +<div class="actions">
  97 + <php echo $this->element('menu') ?>
  98 + <php
  99 +
  100 +echo $this->element('menu_index', [
  101 + 'pluralHumanName' => $configuration->nom_groupe_thematique . 's',
  102 + 'singularHumanName' => $configuration->nom_groupe_thematique
  103 +])?>
  104 + </div>
  105 +-->
0 106 \ No newline at end of file
... ...
src/Template/Common/view.ctp
... ... @@ -190,6 +190,7 @@ $child_entities_list = $child_entities_list;
190 190 <?php
191 191 if ($entity->has('description') && $entity->description) {
192 192 echo "<b><u>Description :</b></u>";
  193 + echo "<br/><br/>";
193 194 echo $this->Text->autoParagraph(h($entity->description));
194 195 echo "<br/><br/>";
195 196 }
... ...
src/Template/GroupesMetiers/index.ctp
1   -<?php
2   -// Variables passées par le controleur
3   -$groupesMetiers = $groupesMetiers;
4   -$lab_website_url = $lab_website_url;
5   -?>
6   -
7   -<div class="groupesMetiers index">
8   -
9   - <?php echo '<h2><i class="icon-list"></i> Liste des '.$configuration->nom_groupe_metier.'</h2>';
10   -
11   - // Si une url est donnée vers la page des Groupes métiers sur le site web du labo, on l'affiche
12   - if ($lab_website_url) {
13   - ?>
14   - => <a href=<?=$lab_website_url?>>
15   - Groupes métiers sur le site web du laboratoire
16   - </a>
17   - <br/><br/>
18   - <?php
19   - }
20   -
21   - echo $this->element('button_add');
22   - ?>
23   -
24   - <table style="border-collapse: separate; border-spacing: 0; width: 270px;">
25   - <thead>
26   - <tr>
27   - <th class="actions"><?= __('') ?></th>
28   - <th><?= $this->Paginator->sort('nom', 'Nom') ?></th>
29   - <th><?= $this->Paginator->sort('description', 'Description') ?></th>
30   -
31   - </tr>
32   - </thead>
33   - <tbody>
34   - <?php
35   -
36   -foreach ($groupesMetiers as $groupesMetier) :
37   - if ($groupesMetier->nom != 'N/A') {
38   - ?>
39   - <tr>
40   -
41   - <td class="actions" style="padding: 6px 0; text-align: left;">
42   - <?php if (in_array($role, ['Administration Plus', 'Super Administrateur'])) { ?>
43   - <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $groupesMetier->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?>
44   - <?php } ?>
45   -
46   - <?php if (in_array($role, ['Super Administrateur'])) { ?>
47   - <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $groupesMetier->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $groupesMetier->id)]) ?>
48   - <?php } ?>
49   - </td>
50   - <td class="smallText"><?= $this->Html->link($groupesMetier->nom, ['action' => 'view', $groupesMetier->id]) ?></td>
51   - <td class="smallText"><?= h($groupesMetier->description) ?></td>
52   -
53   -
54   -
55   - </tr>
56   - <?php
57   - }
58   - endforeach
59   - ;
60   - ?>
61   - </tbody>
62   - </table>
63   -
64   - <?php echo $this->element('pagination'); ?>
65   -
66   -</div>
67   -
68   -<!--
69   -<div class="actions">
70   - <php echo $this->element('menu') ?>
71   - <php
72   -
73   -echo $this->element('menu_index', [
74   - 'pluralHumanName' => $configuration->nom_groupe_metier . 's',
75   - 'singularHumanName' => $configuration->nom_groupe_metier
76   -])?>
77   - </div>
78   --->
79 1 \ No newline at end of file
  2 +<?php
  3 +$this->extend('/Common/index');
80 4 \ No newline at end of file
... ...
src/Template/GroupesThematiques/index.ctp
1   -
2   -<div class="groupesThematiques index">
3   -
4   - <?php
5   - echo '<h2><i class="icon-list"></i> Liste des '.$configuration->nom_groupe_thematique.'s</h2>';
6   -
7   - // Si une url est donnée vers la page des Groupes thématiques sur le site web du labo, on l'affiche
8   - if ($lab_website_url) {
9   - ?>
10   - => <a href=<?=$lab_website_url?>>
11   - Groupes thématiques sur le site web du laboratoire
12   - </a>
13   - <br/><br/>
14   - <?php
15   - }
16   -
17   - echo $this->element('button_add');
18   - ?>
19   -
20   - <table style="border-collapse: separate; border-spacing: 0; width: 270px;">
21   - <thead>
22   - <tr>
23   - <th class="actions"><?= __('') ?></th>
24   - <th><?= $this->Paginator->sort('nom', 'Nom') ?></th>
25   - <th><?= $this->Paginator->sort('description', 'Description') ?></th>
26   -
27   - </tr>
28   - </thead>
29   - <tbody>
30   - <?php
31   -
32   -foreach ($groupesThematiques as $groupesThematique) :
33   - if ($groupesThematique->nom != 'N/A') {
34   - ?>
35   - <tr>
36   - <td class="actions" style="padding: 6px 0; text-align: left;">
37   - <?php if (in_array($role, ['Administration Plus', 'Super Administrateur'])) { ?>
38   - <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $groupesThematique->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?>
39   - <?php } ?>
40   -
41   - <?php if (in_array($role, ['Super Administrateur'])) { ?>
42   - <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $groupesThematique->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $groupesThematique->id)]) ?>
43   - <?php } ?>
44   - </td>
45   -
46   - <td class="smallText"><?= $this->Html->link($groupesThematique->nom, ['action' => 'view', $groupesThematique->id]) ?></td>
47   - <td class="smallText"><?= h($groupesThematique->description) ?></td>
48   - </tr>
49   - <?php
50   - }
51   - endforeach
52   - ;
53   - ?>
54   - </tbody>
55   - </table>
56   -
57   - <?php echo $this->element('pagination'); ?>
58   -
59   -</div>
60   -
61   -<!--
62   -<div class="actions">
63   - <php echo $this->element('menu') ?>
64   - <php
65   -
66   -echo $this->element('menu_index', [
67   - 'pluralHumanName' => $configuration->nom_groupe_thematique . 's',
68   - 'singularHumanName' => $configuration->nom_groupe_thematique
69   -])?>
70   - </div>
71   --->
72 1 \ No newline at end of file
  2 +<?php
  3 +$this->extend('/Common/index');
73 4 \ No newline at end of file
... ...
src/Template/Projets/index.ctp
... ... @@ -7,6 +7,7 @@
7 7 // Variables définies par le controleur
8 8 $projets = $projets;
9 9 //debug($projets);
  10 +$lab_website_urls = $lab_website_urls;
10 11 ?>
11 12  
12 13 <b><u><?= $this->Html->link(__('Nouveau Projet'), ['action' => 'add']) ?></li></u></b>
... ... @@ -30,6 +31,16 @@ $projets = $projets;
30 31 <div class="projets index large-9 medium-8 columns content">
31 32 <h3><?= __('Projets') ?></h3>
32 33  
  34 + <?php
  35 + //$lab_website_urls = [];
  36 + // Si une url (ou liste d'urls) est donnée vers la/les page(s) des Projets sur le site web du labo, on l'affiche
  37 + if ($lab_website_urls) {
  38 + foreach ($lab_website_urls as $type_projet=>$lab_website_url)
  39 + echo "=> <a href=$lab_website_url>$type_projet sur le site web du laboratoire</a><br/>";
  40 + echo "<br/>";
  41 + }
  42 + ?>
  43 +
33 44 <!--
34 45 <table cellpadding="0" cellspacing="0">
35 46 -->
... ...