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
@@ -120,6 +120,17 @@ Outre ces changements, voici d'autres changements importants : @@ -120,6 +120,17 @@ Outre ces changements, voici d'autres changements importants :
120 ======= CHANGES ======= 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 08/10/2020 v4.105.9-3.7.9 (EP) 134 08/10/2020 v4.105.9-3.7.9 (EP)
124 - (i) Ajout d'un lien vers la page web des groupes métier/thématique du lobo 135 - (i) Ajout d'un lien vers la page web des groupes métier/thématique du lobo
125 - (i) Ajout de la mention de l'utilisateur (proprio) du matériel dans les notifications 136 - (i) Ajout de la mention de l'utilisateur (proprio) du matériel dans les notifications
@@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes :
43 -------------------------------------------------------------------------------------------- 43 --------------------------------------------------------------------------------------------
44 44
45 Date: 08/10/2020 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 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) 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,6 +2176,29 @@ class AppController extends Controller
2176 2176
2177 } // beforeFilter() 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 //public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) { 2203 //public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) {
2181 //public function view_generic($id, $associated_entity_types, $containavirer=[]) { 2204 //public function view_generic($id, $associated_entity_types, $containavirer=[]) {
src/Controller/GroupesMetiersController.php
@@ -76,20 +76,31 @@ class GroupesMetiersController extends AppController @@ -76,20 +76,31 @@ class GroupesMetiersController extends AppController
76 * 76 *
77 * @return \Cake\Network\Response|null 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 // Si on est sur l'instance de l'IRAP (InventIrap) 93 // Si on est sur l'instance de l'IRAP (InventIrap)
84 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP 94 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
85 $lab_website_url = ($this->confLabinvent->labNameShort != 'IRAP') ? null : "https://www.irap.omp.eu/homepage/organisation/groupes-metiers"; 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 $this->set('_serialize', [ 100 $this->set('_serialize', [
91 'groupesMetiers' 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,23 +69,36 @@ class GroupesThematiquesController extends AppController
69 * 69 *
70 * @return \Cake\Network\Response|null 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 // Si on est sur l'instance de l'IRAP (InventIrap) 88 // Si on est sur l'instance de l'IRAP (InventIrap)
77 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP 89 // on affiche l'url vers la page des Groupes métiers sur le site web de l'IRAP
78 $lab_website_url = ($this->confLabinvent->labNameShort != 'IRAP') ? null : "https://www.irap.omp.eu/homepage/organisation/groupes-thematiques"; 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 $this->set('_serialize', [ 95 $this->set('_serialize', [
84 'groupesThematiques' 96 'groupesThematiques'
85 ]); 97 ]);
  98 + S/
86 */ 99 */
87 -  
88 } 100 }
  101 +
89 102
90 /** 103 /**
91 * View method 104 * View method
src/Controller/ProjetsController.php
@@ -43,14 +43,29 @@ class ProjetsController extends AppController { @@ -43,14 +43,29 @@ class ProjetsController extends AppController {
43 */ 43 */
44 public function index() 44 public function index()
45 { 45 {
  46 + // https://book.cakephp.org/3/fr/controllers/components/pagination.html
46 $this->paginate = [ 47 $this->paginate = [
47 //'contain' => ['GroupesThematiques', 'Users'] 48 //'contain' => ['GroupesThematiques', 'Users']
48 //'contain' => ['GroupesThematiques', 'Pis', 'Pms'] 49 //'contain' => ['GroupesThematiques', 'Pis', 'Pms']
49 'contain' => ['GroupesThematiques', 'ChefSciences', 'ChefProjets'] 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 @@ @@ -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 \ No newline at end of file 106 \ No newline at end of file
src/Template/Common/view.ctp
@@ -190,6 +190,7 @@ $child_entities_list = $child_entities_list; @@ -190,6 +190,7 @@ $child_entities_list = $child_entities_list;
190 <?php 190 <?php
191 if ($entity->has('description') && $entity->description) { 191 if ($entity->has('description') && $entity->description) {
192 echo "<b><u>Description :</b></u>"; 192 echo "<b><u>Description :</b></u>";
  193 + echo "<br/><br/>";
193 echo $this->Text->autoParagraph(h($entity->description)); 194 echo $this->Text->autoParagraph(h($entity->description));
194 echo "<br/><br/>"; 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 \ No newline at end of file 1 \ No newline at end of file
  2 +<?php
  3 +$this->extend('/Common/index');
80 \ No newline at end of file 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 \ No newline at end of file 1 \ No newline at end of file
  2 +<?php
  3 +$this->extend('/Common/index');
73 \ No newline at end of file 4 \ No newline at end of file
src/Template/Projets/index.ctp
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 // Variables définies par le controleur 7 // Variables définies par le controleur
8 $projets = $projets; 8 $projets = $projets;
9 //debug($projets); 9 //debug($projets);
  10 +$lab_website_urls = $lab_website_urls;
10 ?> 11 ?>
11 12
12 <b><u><?= $this->Html->link(__('Nouveau Projet'), ['action' => 'add']) ?></li></u></b> 13 <b><u><?= $this->Html->link(__('Nouveau Projet'), ['action' => 'add']) ?></li></u></b>
@@ -30,6 +31,16 @@ $projets = $projets; @@ -30,6 +31,16 @@ $projets = $projets;
30 <div class="projets index large-9 medium-8 columns content"> 31 <div class="projets index large-9 medium-8 columns content">
31 <h3><?= __('Projets') ?></h3> 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 <table cellpadding="0" cellspacing="0"> 45 <table cellpadding="0" cellspacing="0">
35 --> 46 -->