Commit 0693869412df4c2f419e22db467b9d56fa61537e
1 parent
43c3d804
Exists in
master
and in
1 other branch
Vue liste projets (index) générique + amélioration liste générique
Et aussi : - Amélioration vue des Stats de connexion : le tri des colonnes est maintenant ok - Bugfix download doc attaché (sur vue index) - Améliorations des listes génériques : - tri par défaut amélioré - bugfix label du champ 'nom' - généralisation de l'affichage des booleens v5.2.30-3.7.9
Showing
12 changed files
with
218 additions
and
173 deletions
Show diff stats
CHANGELOG
... | ... | @@ -525,25 +525,22 @@ TODO : |
525 | 525 | |
526 | 526 | |
527 | 527 | |
528 | - *) Stats de connexion | |
529 | - - le tri des autres colonnes ne marche plus | |
530 | 528 | |
531 | 529 | |
530 | +- emprunts/index generique | |
532 | 531 | - documents/index generique |
533 | -- emprunts/index generic | |
534 | -- projets/index generic | |
532 | + | |
535 | 533 | - ProjetsController minimaliste, doit juste étendre AppController avec un minimum de changement |
536 | 534 | |
537 | 535 | - add_edit generic |
538 | 536 | |
539 | 537 | - fusionner groupe thematique et metier (et projet ?) |
540 | 538 | |
541 | - | |
539 | +- 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 | |
542 | 541 | |
543 | 542 | ======= NEXT ======= |
544 | 543 | |
545 | -user : ne doit pas voir boutons edit/delete sur autres listes | |
546 | - | |
547 | 544 | view générique à utiliser pour plusieurs entités |
548 | 545 | |
549 | 546 | print etiquette pour les 2 serveurs + tester fin garantie orange |
... | ... | @@ -551,6 +548,16 @@ print etiquette pour les 2 serveurs + tester fin garantie orange |
551 | 548 | ======= CHANGES ======= |
552 | 549 | |
553 | 550 | ------- |
551 | +12/11/2021 v5.2.30-3.7.9 | |
552 | + - (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 | |
554 | + - (b) Bugfix download doc attaché (sur vue index) | |
555 | + - (e) Améliorations des listes génériques : | |
556 | + - tri par défaut amélioré | |
557 | + - bugfix label du champ 'nom' | |
558 | + - généralisation de l'affichage des booleens | |
559 | + | |
560 | +------- | |
554 | 561 | 12/11/2021 v5.2.29-3.7.9 |
555 | 562 | - (b) Bugfix label (configurable) des groupes métier et thématique : maintenant ok dans toutes les vues |
556 | 563 | - (i) détermination automatique des noms de colonnes des FK dans les listes (index) génériques | ... | ... |
README.md
... | ... | @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : |
52 | 52 | |
53 | 53 | -------------------------------------------------------------------------------------------- |
54 | 54 | |
55 | -Date: 11/11/2021 | |
56 | -Version: v5.2.29-3.7.9 | |
55 | +Date: 12/11/2021 | |
56 | +Version: v5.2.30-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) | ... | ... |
src/Controller/AppController.php
... | ... | @@ -2163,8 +2163,10 @@ class AppController extends Controller |
2163 | 2163 | $fk_controller_name = $infos['controller_name']; |
2164 | 2164 | //$fk_controller_instance = new $fk_controller_name; |
2165 | 2165 | $fk_controller_instance = $this->getControllerInstanceForName($fk_controller_name); |
2166 | - $nice_name = ucwords($fk_controller_instance->getNiceNameSingularLowerCase()); | |
2167 | - $fields_names[$fname]['nice_name'] = $nice_name; | |
2166 | + if (!isset($fields_names[$fname]['nice_name'])) $fields_names[$fname]['nice_name'] = ucwords($fk_controller_instance->getNiceNameSingularLowerCase()); | |
2167 | + $fields_names[$fname]['name_field_label'] = $fk_controller_instance->getNameFieldLabel(); | |
2168 | + | |
2169 | + // getRealControllerNameForAlias | |
2168 | 2170 | } |
2169 | 2171 | } |
2170 | 2172 | $controller_name = $this->getName(); |
... | ... | @@ -2189,7 +2191,8 @@ class AppController extends Controller |
2189 | 2191 | //'limit' => 20, |
2190 | 2192 | 'limit' => $limit, |
2191 | 2193 | ]; |
2192 | - if ($sortBy) $this->paginate['order'] = [$sortBy => 'asc']; | |
2194 | + //if ($sortBy) $this->paginate['order'] = [$sortBy => 'asc']; | |
2195 | + if ($sortBy) $this->paginate['order'] = is_array($sortBy) ? $sortBy : [$sortBy => 'asc']; | |
2193 | 2196 | if ($sortWhitelist) $this->paginate['sortWhitelist'] = array_values($sortWhitelist); |
2194 | 2197 | |
2195 | 2198 | //$categories = $this->paginate($this->Categories); |
... | ... | @@ -2213,7 +2216,8 @@ class AppController extends Controller |
2213 | 2216 | // Nb total entités total |
2214 | 2217 | $this->set('nb_entities', $this->$controller_name->find()->count()); |
2215 | 2218 | |
2216 | - $CAN_ADD = $this->isAuthorizedActionForCurrentUser('add'); | |
2219 | + $CAN_ADD = true; | |
2220 | + //$CAN_ADD = $this->isAuthorizedActionForCurrentUser('add'); | |
2217 | 2221 | |
2218 | 2222 | $this->set(compact( |
2219 | 2223 | 'CAN_ADD', | ... | ... |
src/Controller/EmpruntsController.php
... | ... | @@ -220,20 +220,53 @@ class EmpruntsController extends AppController |
220 | 220 | public function index() |
221 | 221 | { |
222 | 222 | /* |
223 | + $contains = [ | |
224 | + 'Materiels', | |
225 | + 'Sites' | |
226 | + ]; | |
227 | + | |
228 | + $sortWhitelist = [ | |
229 | + 'nom' => 'nom', | |
230 | + 'email' => 'email', | |
231 | + 'role' => 'role', | |
232 | + 'groupes_thematique_id' => 'GroupesThematiques.nom', | |
233 | + 'groupes_metier_id' => 'GroupesMetiers.nom', | |
234 | + 'sur_categorie_id' => 'SurCategories.nom', | |
235 | + ]; | |
236 | + | |
223 | 237 | $this->index_generic( |
224 | 238 | 'prêts', |
225 | 239 | [ |
240 | + 'id'=>['nice_name'=>'intitulé'], | |
226 | 241 | //'nom'=>['nice_name'=>'Nom'], |
227 | 242 | 'materiel_id'=>[ |
228 | - 'nice_name'=>'Materiel', | |
243 | + //'nice_name'=>'Materiel', | |
229 | 244 | 'contained_entity_name'=>'materiel', |
230 | - 'controller_name'=>'Materiels' | |
245 | + 'controller_name'=>'Materiels', | |
246 | + ], | |
247 | + 'emprunt_interne'=>[ | |
248 | + 'nice_name'=>'type', | |
249 | + 'bool_values'=>['interne','externe'], | |
250 | + ], | |
251 | + 'date_emprunt'=>['nice_name'=>'date emprunt'], | |
252 | + 'date_retour_emprunt'=>['nice_name'=>'date retour'], | |
253 | + 'nom_emprunteur'=>['nice_name'=>'emprunteur'], | |
254 | + 'site_id'=>[ | |
255 | + 'contained_entity_name'=>'site', | |
256 | + 'controller_name'=>'Sites', | |
231 | 257 | ], |
232 | 258 | ], |
233 | - ['Materiels', 'Sites'] | |
259 | + $contains, | |
260 | + false, true | |
261 | + /S | |
262 | + $orderby, | |
263 | + $conditions, | |
264 | + $sortWhitelist, | |
265 | + $limit | |
266 | + S/ | |
234 | 267 | ); |
235 | 268 | */ |
236 | - | |
269 | + | |
237 | 270 | $this->paginate = [ |
238 | 271 | 'contain' => [ |
239 | 272 | 'Materiels', |
... | ... | @@ -247,9 +280,11 @@ class EmpruntsController extends AppController |
247 | 280 | ->count()); |
248 | 281 | |
249 | 282 | $this->set(compact('emprunts')); |
283 | + /* (EP) utile seulement pour json | |
250 | 284 | $this->set('_serialize', [ |
251 | 285 | 'emprunts' |
252 | 286 | ]); |
287 | + */ | |
253 | 288 | } |
254 | 289 | |
255 | 290 | /* | ... | ... |
src/Controller/ProjetsController.php
... | ... | @@ -43,30 +43,67 @@ class ProjetsController extends AppController { |
43 | 43 | */ |
44 | 44 | public function index() |
45 | 45 | { |
46 | - /* | |
46 | + $lab_website_urls = ($this->confLabinvent->labNameShort != 'IRAP') ? | |
47 | + [] | |
48 | + : | |
49 | + [ | |
50 | + 'Projets Instrumentaux' => 'https://www.irap.omp.eu/sedoo-project-tag/projets_instrumentaux', | |
51 | + 'Projets Scientifiques' => 'https://www.irap.omp.eu/sedoo-project-tag/projets-scientifiques', | |
52 | + 'Projets R&T' => 'https://www.irap.omp.eu/sedoo-project-tag/rt', | |
53 | + 'Projets financés (ANR, Europe...)' => 'https://www.irap.omp.eu/observation-instrumentation/projets/projets-finances', | |
54 | + ]; | |
55 | + | |
56 | + $this->set(compact('lab_website_urls')); | |
57 | + | |
58 | + $sortWhitelist = [ | |
59 | + 'nom' => 'nom', | |
60 | + 'groupes_thematique_id' => 'GroupesThematiques.nom', | |
61 | + 'chef_science_id' => 'ChefSciences.nom', | |
62 | + 'chef_projet_id' => 'ChefProjets.nom', | |
63 | + 'date_start' => 'date_start', | |
64 | + 'date_stop' => 'date_stop', | |
65 | + ]; | |
66 | + | |
67 | + $contains = ['GroupesThematiques', 'ChefSciences', 'ChefProjets']; | |
68 | + | |
47 | 69 | $this->index_generic( |
48 | 70 | 'projets', |
49 | 71 | [ |
50 | - //'nom'=>['nice_name'=>'Nom'], | |
72 | + 'nom'=>[], | |
51 | 73 | //'sur_categorie_id'=>['nice_name'=>'Domaine', 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories'], |
52 | 74 | 'groupes_thematique_id'=>[ |
53 | - 'nice_name'=>'Groupe thématique', | |
75 | + //'nice_name'=>'Groupe thématique', | |
54 | 76 | 'contained_entity_name'=>'groupes_thematique', |
55 | 77 | 'controller_name'=>'GroupesThematiques', |
56 | - 'sort_name' => 'GroupesThematiques.nom' | |
78 | + //'sort_name' => 'GroupesThematiques.nom' | |
57 | 79 | ], |
58 | - 'user_id'=>[ | |
80 | + //'user_id'=>[ | |
81 | + 'chef_science_id'=>[ | |
59 | 82 | 'nice_name'=>'Responsable Scientifique', |
60 | 83 | 'contained_entity_name'=>'chef_science', |
61 | - 'controller_name'=>'ChefSciences', | |
62 | - 'sort_name' => 'ChefSciences.nom' | |
84 | + //'controller_name'=>'ChefSciences', | |
85 | + 'controller_name'=>'Users', | |
86 | + //'sort_name' => 'ChefSciences.nom' | |
87 | + ], | |
88 | + 'chef_projet_id'=>[ | |
89 | + 'nice_name'=>'Chef Projet', | |
90 | + 'contained_entity_name'=>'chef_projet', | |
91 | + //'controller_name'=>'ChefSciences', | |
92 | + 'controller_name'=>'Users', | |
93 | + //'sort_name' => 'ChefProjets.nom' | |
63 | 94 | ], |
95 | + 'date_start'=>['nice_name'=>'Date début'], | |
96 | + 'date_stop'=>['nice_name'=>'Date fin'], | |
97 | + | |
64 | 98 | ], |
65 | - ['GroupesThematiques', 'ChefSciences', 'ChefProjets'] | |
99 | + $contains, | |
100 | + true, true, | |
101 | + 'nom', | |
102 | + [], | |
103 | + $sortWhitelist | |
66 | 104 | ); |
67 | - return; | |
68 | - */ | |
69 | - | |
105 | + | |
106 | + /* | |
70 | 107 | // https://book.cakephp.org/3/fr/controllers/components/pagination.html |
71 | 108 | $this->paginate = [ |
72 | 109 | //'contain' => ['GroupesThematiques', 'Pis', 'Pms'] |
... | ... | @@ -81,11 +118,11 @@ class ProjetsController extends AppController { |
81 | 118 | 'date_stop', |
82 | 119 | ], |
83 | 120 | 'limit' => 20, |
84 | - /* | |
121 | + /S | |
85 | 122 | 'order' => [ |
86 | 123 | 'Users.nom' => 'asc' |
87 | 124 | ] |
88 | - */ | |
125 | + S/ | |
89 | 126 | ]; |
90 | 127 | |
91 | 128 | $projets = $this->paginate(); |
... | ... | @@ -94,20 +131,7 @@ class ProjetsController extends AppController { |
94 | 131 | |
95 | 132 | // Si on est sur l'instance de l'IRAP (InventIrap) |
96 | 133 | // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP |
97 | - /* | |
98 | - $lab_website_urls = ($this->confLabinvent->labNameShort != 'IRAP') ? | |
99 | - [] | |
100 | - : | |
101 | - */ | |
102 | - $lab_website_urls = | |
103 | - [ | |
104 | - 'Projets Instrumentaux' => 'https://www.irap.omp.eu/sedoo-project-tag/projets_instrumentaux', | |
105 | - 'Projets Scientifiques' => 'https://www.irap.omp.eu/sedoo-project-tag/projets-scientifiques', | |
106 | - 'Projets R&T' => 'https://www.irap.omp.eu/sedoo-project-tag/rt', | |
107 | - 'Projets financés (ANR, Europe...)' => 'https://www.irap.omp.eu/observation-instrumentation/projets/projets-finances', | |
108 | - ]; | |
109 | - | |
110 | - $this->set(compact('projets', 'lab_website_urls')); | |
134 | + */ | |
111 | 135 | } |
112 | 136 | |
113 | 137 | /** | ... | ... |
src/Controller/StatsController.php
... | ... | @@ -35,6 +35,17 @@ class StatsController extends AppController |
35 | 35 | $connex_dur_tot_avg = round($connex_dur_tot_tot / $connex_nb_tot); |
36 | 36 | $this->set(compact('connex_nb_year_avg', 'connex_dur_tot_avg')); |
37 | 37 | |
38 | + $sortWhitelist = [ | |
39 | + 'year' => 'year', | |
40 | + 'user_id' => 'Users.nom', | |
41 | + 'last_login_time' => 'last_login_time', | |
42 | + 'last_connex_dur' => 'last_connex_dur', | |
43 | + 'last_logout_time' => 'last_logout_time', | |
44 | + 'connex_dur_tot' => 'connex_dur_tot', | |
45 | + 'connex_nb' => 'connex_nb', | |
46 | + //'connexDurAvg' => 'connexDurAvg', | |
47 | + ]; | |
48 | + | |
38 | 49 | $this->index_generic( |
39 | 50 | 'statistiques de connexion', |
40 | 51 | [ |
... | ... | @@ -54,7 +65,9 @@ class StatsController extends AppController |
54 | 65 | ], |
55 | 66 | ['Users'], |
56 | 67 | false, false, |
57 | - 'last_login_time' | |
68 | + ['last_login_time' => 'desc'], | |
69 | + [], | |
70 | + $sortWhitelist | |
58 | 71 | ); |
59 | 72 | |
60 | 73 | /* | ... | ... |
src/Controller/UsersController.php
... | ... | @@ -573,15 +573,15 @@ class UsersController extends AppController { |
573 | 573 | 'role' => [], |
574 | 574 | 'groupes_thematique_id'=>[ |
575 | 575 | //'nice_name'=>'Groupe Thématique', |
576 | - 'contained_entity_name'=>'groupes_thematique', 'controller_name'=>'GroupesThematiques' | |
576 | + 'contained_entity_name'=>'groupes_thematique', 'controller_name'=>'GroupesThematiques', | |
577 | 577 | ], |
578 | 578 | 'groupes_metier_id'=>[ |
579 | 579 | //'nice_name'=>'Groupe Métier', |
580 | - 'contained_entity_name'=>'groupes_metier', 'controller_name'=>'GroupesMetiers' | |
580 | + 'contained_entity_name'=>'groupes_metier', 'controller_name'=>'GroupesMetiers', | |
581 | 581 | ], |
582 | 582 | 'sur_categorie_id'=>[ |
583 | 583 | //'nice_name'=>'Domaine', |
584 | - 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories' | |
584 | + 'contained_entity_name'=>'sur_category', 'controller_name'=>'SurCategories', | |
585 | 585 | ], |
586 | 586 | ], |
587 | 587 | $contains, | ... | ... |
src/Template/Common/index_gen.ctp
... | ... | @@ -74,10 +74,13 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; |
74 | 74 | // Joli nom pour le titre de la colonne (nice name) |
75 | 75 | $nice_name = isset($infos['nice_name']) ? $infos['nice_name'] : $fname; |
76 | 76 | if ( in_array($fname, array_keys($sortWhitelist)) ) $fname = $sortWhitelist[$fname]; |
77 | - echo "<th>".$this->Paginator->sort($fname, ucfirst($nice_name))."</th>"; | |
77 | + /* | |
78 | + $sort_name = isset($infos['sort_name']) ? $infos['sort_name'] : $fname; | |
79 | + echo "<th>".$this->Paginator->sort($sort_name, ucfirst($nice_name))."</th>"; | |
80 | + */ | |
81 | + echo "<th>".$this->Paginator->sort($fname, ucfirst($nice_name))."</th>"; | |
78 | 82 | } |
79 | 83 | ?> |
80 | - | |
81 | 84 | </tr> |
82 | 85 | </thead> |
83 | 86 | |
... | ... | @@ -132,21 +135,35 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; |
132 | 135 | //var_dump("Y"); |
133 | 136 | echo $this->MyHelper->$f($fval); |
134 | 137 | } |
135 | - // - Si c'est le champ "nom", on l'affiche comme un lien | |
136 | - elseif ($fname == 'nom') | |
138 | + // - Si c'est le champ "nom" ou "id", on l'affiche comme un lien | |
139 | + elseif ($fname == 'nom' || $fname == 'id') | |
137 | 140 | echo $this->Html->link($fval, ['action' => 'view', $e->id]); |
138 | 141 | // - Si le champ est boolean => on affiche oui/non |
139 | - elseif ( (substr($fname,0,3)=='is_') && ($fval===false || $fval===true) ) | |
140 | - echo $fval ? "Oui" : "Non"; | |
141 | - // - Si le champ n'est pas une FK (terminant par '_id') => on l'affiche directement | |
142 | - elseif ( strpos($fname,'_id') !== strlen($fname)-3 ) | |
143 | - echo $fval; | |
144 | - // Si le champ est une FK => on récupère la valeur du 'contained' | |
145 | - else { | |
142 | + //elseif ( (substr($fname,0,3)=='is_') && ($fval===false || $fval===true) ) | |
143 | + elseif ( | |
144 | + ( substr($fname,0,3)=='is_' || isset($infos['bool_values']) ) | |
145 | + && | |
146 | + ( $fval==false || $fval==true ) | |
147 | + ) { | |
148 | + $bool_values = isset($infos['bool_values']) ? $infos['bool_values'] : ['Oui','Non']; | |
149 | + //echo $fval ? "Oui" : "Non"; | |
150 | + echo $fval ? $bool_values[0] : $bool_values[1]; | |
151 | + } | |
152 | + // - Si le champ est une FK => on récupère la valeur du 'contained' | |
153 | + //elseif ( strpos($fname,'_id') !== strlen($fname)-3 ) | |
154 | + elseif ( substr($fname,-3) == '_id' ) { | |
155 | + | |
156 | + //var_dump($fname); | |
146 | 157 | //$fval = $e->has('sur_category') ? $e->sur_category->nom : $fval; |
158 | + // ex: materiel | |
147 | 159 | $contained_entity_name = $fields_names[$fname]['contained_entity_name']; |
160 | + // ex: Materiels | |
148 | 161 | $controller_name = $fields_names[$fname]['controller_name']; |
149 | - $linkval = $e->has($contained_entity_name) ? $e->$contained_entity_name->nom : $fval; | |
162 | + //$linkval = $e->has($contained_entity_name) ? $e->$contained_entity_name->nom : $fval; | |
163 | + $name_field_label = $infos['name_field_label']; // 'nom' ou 'designation' ou ... | |
164 | + | |
165 | + //$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; | |
150 | 167 | //echo $this->Html->link($fval, ['controller' => $controller_name, 'action' => 'view', $e->sur_category->id]); |
151 | 168 | echo $this->Html->link($linkval, ['controller' => $controller_name, 'action' => 'view', $fval]); |
152 | 169 | /* |
... | ... | @@ -170,7 +187,11 @@ if (empty($fields_names['nom'])) $fields_names['nom'] = ['nice_name'=>'Nom']; |
170 | 187 | ]) |
171 | 188 | ); |
172 | 189 | */ |
173 | - } | |
190 | + } // FK | |
191 | + // - Sinon, champ quelconque => on l'affiche directement | |
192 | + else | |
193 | + echo $fval; | |
194 | + | |
174 | 195 | echo "</td>"; |
175 | 196 | } // foreach entity fields |
176 | 197 | ?> | ... | ... |
src/Template/Documents/index.ctp
1 | 1 | |
2 | +<?php | |
3 | +// Documents attachés photo | |
4 | +$photo_formats = ['png','jpg','jpeg']; | |
5 | +?> | |
6 | + | |
7 | + | |
2 | 8 | <div class="documents index"> |
3 | 9 | <?php echo '<h2><i class="icon-list"></i> Liste des documents</h2>'; ?> |
4 | 10 | <table style="border-collapse: separate; border-spacing: 0; width: 270px;"> |
... | ... | @@ -27,20 +33,41 @@ foreach ($documents as $document) : |
27 | 33 | <tr> |
28 | 34 | <td class="actions" style="padding: 6px 0; text-align: left;"> |
29 | 35 | <?php |
30 | - if ($document->photo) { | |
31 | - echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/img/photos/' . $document->id . '.' . $document->type_doc, [ | |
36 | + | |
37 | + if (in_array($document->type_doc, $photo_formats)) { | |
38 | + // TODO: $echoActionButton() | |
39 | + //echo $this->Html->link(__('<i class="icon-download-alt"></i>'), '/webroot/img/photos/' . $document->materiel_id .'_' . $document->nom.'_'. $document->id . '.' . $document->type_doc, [ | |
40 | + echo $this->Html->link(__('<i class="icon-download-alt"></i>'), '/img/photos/' . $document->materiel_id .'_' . $document->nom.'_'. $document->id . '.' . $document->type_doc, [ | |
32 | 41 | 'title' => 'Télécharger', |
33 | - 'style' => 'margin: 0 2px', | |
42 | + 'style' => 'margin:0', | |
34 | 43 | 'escape' => false |
35 | - ]); | |
36 | - } else { | |
37 | - echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/files/' . $document->id . '.' . $document->type_doc, [ | |
44 | + ]); | |
45 | + // - autre doc (pdf...) from files/ | |
46 | + } | |
47 | + else { | |
48 | + //echo $this->Html->link(__('<i class="icon-download-alt"></i>'), '/webroot/files/' . $document->materiel_id .'_' . $document->nom.'_'. $document->id . '.' . $document->type_doc, [ | |
49 | + echo $this->Html->link(__('<i class="icon-download-alt"></i>'), '/files/' . $document->materiel_id .'_' . $document->nom.'_'. $document->id . '.' . $document->type_doc, [ | |
38 | 50 | 'title' => 'Télécharger', |
39 | - 'style' => 'margin: 0 2px', | |
51 | + 'style' => 'margin:0', | |
40 | 52 | 'escape' => false |
41 | - ]); | |
42 | - } | |
43 | - ?> | |
53 | + ]); | |
54 | + } | |
55 | + /* | |
56 | + if ($document->photo) { | |
57 | + echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/img/photos/' . $document->id . '.' . $document->type_doc, [ | |
58 | + 'title' => 'Télécharger', | |
59 | + 'style' => 'margin: 0 2px', | |
60 | + 'escape' => false | |
61 | + ]); | |
62 | + } else { | |
63 | + echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/files/' . $document->id . '.' . $document->type_doc, [ | |
64 | + 'title' => 'Télécharger', | |
65 | + 'style' => 'margin: 0 2px', | |
66 | + 'escape' => false | |
67 | + ]); | |
68 | + } | |
69 | + */ | |
70 | + ?> | |
44 | 71 | <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $document->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false]) ?> |
45 | 72 | |
46 | 73 | <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $document->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $document->nom)]) ?> | ... | ... |
src/Template/Materiels/view.ctp
... | ... | @@ -1145,12 +1145,16 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
1145 | 1145 | ?> |
1146 | 1146 | |
1147 | 1147 | <table> |
1148 | + | |
1149 | + <!-- EN-TETES --> | |
1148 | 1150 | <tr> |
1149 | 1151 | <th class="actions"><?=__('')?></th> |
1150 | 1152 | <th><?=__('Nom')?></th> |
1151 | 1153 | <th><?=__('Type')?></th> |
1152 | 1154 | <th><?=__('Miniature')?></th> |
1153 | 1155 | </tr> |
1156 | + | |
1157 | + <!-- DATA --> | |
1154 | 1158 | <?php |
1155 | 1159 | foreach ($entity->documents as $document) : |
1156 | 1160 | ?> | ... | ... |
src/Template/Projets/index.ctp
1 | 1 | <?php |
2 | -/** | |
3 | - * @var \App\View\AppView $this | |
4 | - * @var \App\Model\Entity\Projet[]|\Cake\Collection\CollectionInterface $projets | |
5 | - */ | |
6 | 2 | |
7 | -// Variables définies par le controleur | |
8 | -$projets = $projets; | |
9 | -//debug($projets); | |
10 | -$lab_website_urls = $lab_website_urls; | |
11 | -?> | |
12 | - | |
13 | -<b><u><?= $this->Html->link(__('Nouveau Projet'), ['action' => 'add']) ?></li></u></b> | |
14 | -<br /> | |
15 | -<br /> | |
16 | -<!-- | |
17 | -<nav class="large-3 medium-4 columns" id="actions-sidebar"> | |
18 | - <ul class="side-nav"> | |
19 | - <li class="heading"><S= __('Actions :') S></li> | |
20 | - <li><S= $this->Html->link(__('New Projet'), ['action' => 'add']) ?></li> | |
21 | - <li><S= $this->Html->link(__('List Groupes Thematiques'), ['controller' => 'GroupesThematiques', 'action' => 'index']) S></li> | |
22 | - <li><S= $this->Html->link(__('New Groupes Thematique'), ['controller' => 'GroupesThematiques', 'action' => 'add']) S></li> | |
23 | - <li><S= $this->Html->link(__('List Users'), ['controller' => 'Users', 'action' => 'index']) ?></li> | |
24 | - <li><S= $this->Html->link(__('New User'), ['controller' => 'Users', 'action' => 'add']) ?></li> | |
25 | - <li><S= $this->Html->link(__('List Materiels'), ['controller' => 'Materiels', 'action' => 'index']) ?></li> | |
26 | - <li><S= $this->Html->link(__('New Materiel'), ['controller' => 'Materiels', 'action' => 'add']) ?></li> | |
27 | - </ul> | |
28 | -</nav> | |
29 | ---> | |
30 | - | |
31 | -<div class="projets index large-9 medium-8 columns content"> | |
32 | - <h3><?= __('Projets') ?></h3> | |
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/>"; | |
3 | +// Create the list_header block. | |
4 | +$this->start('list_header'); | |
5 | +//$lab_website_urls = []; | |
6 | +// 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 | |
7 | +if ($lab_website_urls) { | |
8 | + foreach ($lab_website_urls as $type_projet=>$lab_website_url) | |
9 | + echo "=> <a href=$lab_website_url>$type_projet sur le site web du laboratoire</a><br/>"; | |
40 | 10 | echo "<br/>"; |
41 | - } | |
42 | - ?> | |
43 | - | |
44 | - <!-- | |
45 | - <table cellpadding="0" cellspacing="0"> | |
46 | - --> | |
47 | - <table style="border-collapse: separate; border-spacing: 0; width: 270px;"> | |
11 | +} | |
12 | +// end of block list_header | |
13 | +$this->end(); | |
48 | 14 | |
49 | - <thead> | |
50 | - <tr> | |
51 | - <!-- | |
52 | - <th scope="col"><S= $this->Paginator->sort('id') ?></th> | |
53 | - --> | |
54 | - <th scope="col" class="actions"><?= __('') ?></th> | |
55 | - <th scope="col"><?= $this->Paginator->sort('nom') ?></th> | |
56 | - <th scope="col"><?= $this->Paginator->sort('GroupesThematiques.nom', 'Groupe thématique') ?></th> | |
57 | - <th scope="col"><?= $this->Paginator->sort('ChefSciences.nom', 'Responsable scientifique') ?></th> | |
58 | - <th scope="col"><?= $this->Paginator->sort('ChefProjets.nom', 'Chef de projet') ?></th> | |
59 | - <th scope="col"><?= $this->Paginator->sort('date_start', 'Date début') ?></th> | |
60 | - <th scope="col"><?= $this->Paginator->sort('date_stop', 'Date fin') ?></th> | |
61 | - </tr> | |
62 | - </thead> | |
63 | - | |
64 | - <tbody> | |
65 | - <?php foreach ($projets as $projet): ?> | |
66 | - <tr> | |
67 | - <td class="actions" style="padding: 6px 0; text-align: left;"> | |
68 | - <?php | |
69 | - //if (in_array($role, ['Administration Plus', 'Super Administrateur'])) | |
70 | - echo $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $projet->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]); | |
71 | - //if (in_array($role, ['Super Administrateur'])) | |
72 | - echo $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $projet->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $projet->id)]); | |
73 | - ?> | |
74 | - </td> | |
75 | - <td class="smallText"><?= $this->Html->link($projet->nom, ['action' => 'view', $projet->id]) ?></td> | |
76 | - <!-- | |
77 | - <td><S= $this->Number->format($projet->id) ?></td> | |
78 | - <td><S= $this->Number->format($projet->chef_science_id) ?></td> | |
79 | - --> | |
80 | - <td><?= $projet->has('groupes_thematique') ? | |
81 | - $this->Html->link($projet->groupes_thematique->nom, ['controller' => 'GroupesThematiques', 'action' => 'view', $projet->groupes_thematique_id]) | |
82 | - : '' ?> | |
83 | - </td> | |
84 | - <td><?= $projet->has('chef_science_id') ? $this->Html->link($projet->chef_science->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_science_id]) : '' ?></td> | |
85 | - <td><?= $projet->has('chef_projet_id') ? $this->Html->link($projet->chef_projet->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_projet_id]) : '' ?></td> | |
86 | - <!-- | |
87 | - <td><= $projet->has('chef_science_id') ? $this->Html->link($projet->Pi->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_science_id]) : '' ?></td> | |
88 | - <td><= $projet->has('chef_projet_id') ? $this->Html->link($projet->Pm->nom, ['controller' => 'Users', 'action' => 'view', $projet->chef_projet_id]) : '' ?></td> | |
89 | - --> | |
90 | - <td><?= h($projet->date_start) ?></td> | |
91 | - <td><?= h($projet->date_stop) ?></td> | |
92 | - </tr> | |
93 | - <?php endforeach; ?> | |
94 | - </tbody> | |
95 | - </table> | |
96 | - <div class="paginator"> | |
97 | - <ul class="pagination"> | |
98 | - <?= $this->Paginator->first('<< ' . __('first')) ?> | |
99 | - <?= $this->Paginator->prev('< ' . __('previous')) ?> | |
100 | - <?= $this->Paginator->numbers() ?> | |
101 | - <?= $this->Paginator->next(__('next') . ' >') ?> | |
102 | - <?= $this->Paginator->last(__('last') . ' >>') ?> | |
103 | - </ul> | |
104 | - <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p> | |
105 | - </div> | |
106 | -</div> | |
15 | +$this->extend('/Common/index_gen'); | |
107 | 16 | \ No newline at end of file | ... | ... |