Developpement

Version 348 (Etienne Pallier, 06/15/2017 06:20 pm)

1 150 Etienne Pallier
h1. Labinvent 2 (cakephp3) - Développement
2 1 Etienne Pallier
3 148 Etienne Pallier
Cette page décrit le processus de développement du logiciel, ainsi que les outils utilisés.
4 148 Etienne Pallier
5 148 Etienne Pallier
[ [[Labinvent_nouvelle_version|Retour au sommmaire]] ]
6 148 Etienne Pallier
7 1 Etienne Pallier
8 1 Etienne Pallier
{{toc}}
9 1 Etienne Pallier
10 1 Etienne Pallier
---
11 1 Etienne Pallier
12 4 Etienne Pallier
h2. LIENS UTILES
13 94 Etienne Pallier
14 254 Etienne Pallier
* *DEMANDES (TODO LIST) : https://projects.irap.omp.eu/projects/inventirap/issues?query_id=222*
15 250 Etienne Pallier
16 251 Etienne Pallier
* *ROADMAP (VERSIONS) : https://projects.irap.omp.eu/projects/inventirap/roadmap?utf8=%E2%9C%93&tracker_ids%5B%5D=1&tracker_ids%5B%5D=2&tracker_ids%5B%5D=4&tracker_ids%5B%5D=5&tracker_ids%5B%5D=6&tracker_ids%5B%5D=7&tracker_ids%5B%5D=8&tracker_ids%5B%5D=9&with_subprojects=0&with_subprojects=1#version_2.5.x*
17 250 Etienne Pallier
18 252 Etienne Pallier
* Version numbering : http://semver.org
19 252 Etienne Pallier
20 97 Etienne Pallier
* HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
21 94 Etienne Pallier
22 96 Etienne Pallier
* [[Installation|Page wiki pour l'installation]]
23 1 Etienne Pallier
24 162 Etienne Pallier
* Migrations plugin: http://book.cakephp.org/3.0/fr/migrations.html
25 162 Etienne Pallier
26 93 Etienne Pallier
* Version majeure en cours (2.1): https://projects.irap.omp.eu/versions/101
27 93 Etienne Pallier
28 92 Etienne Pallier
* Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master
29 1 Etienne Pallier
30 92 Etienne Pallier
* Browse files (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent/tree/master
31 1 Etienne Pallier
32 92 Etienne Pallier
* Inventirap 1.3 (prod): https://inventirap.irap.omp.eu
33 1 Etienne Pallier
34 92 Etienne Pallier
* Inventirap 1.3 (test): https://inventirap-test.irap.omp.eu/
35 92 Etienne Pallier
36 309 Etienne Pallier
* *CakePhp*:
37 92 Etienne Pallier
38 1 Etienne Pallier
 * ROADMAP: https://github.com/cakephp/cakephp/wiki
39 310 Etienne Pallier
 * *CONVENTIONS*: https://book.cakephp.org/3.0/fr/intro/conventions.html
40 93 Etienne Pallier
 * Forum cakephp: http://discourse.cakephp.org
41 93 Etienne Pallier
 * Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html
42 93 Etienne Pallier
 * Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial
43 93 Etienne Pallier
 * Cakephp CRUD: https://github.com/FriendsOfCake/crud
44 1 Etienne Pallier
45 1 Etienne Pallier
---
46 1 Etienne Pallier
47 1 Etienne Pallier
h2. TODOLIST
48 1 Etienne Pallier
49 228 Etienne Pallier
50 256 Etienne Pallier
*_NB: Cette liste est conservée ici à titre indicatif. Elle est exportée à partir de la liste des demandes : https://projects.irap.omp.eu/projects/inventirap/issues?query_id=222_*
51 1 Etienne Pallier
52 257 Etienne Pallier
* *FEATURE - GENERAL*
53 256 Etienne Pallier
54 255 Etienne Pallier
GENERAL - Test de l'application sur IE (Internet Explorer) et Chrome
55 255 Etienne Pallier
GENERAL - Faire une mini doc destinée aux utilisateurs
56 255 Etienne Pallier
GENERAL - LOG de toutes les actions effectuées sur les materiels, suivis, emprunts...
57 255 Etienne Pallier
GENERAL - Parametrage application
58 255 Etienne Pallier
GENERAL - Evolutions et bugfixes suite à retour du LAAS de vendredi 6/3/15
59 255 Etienne Pallier
GENERAL - Stats d'utilisation
60 255 Etienne Pallier
GENERAL - db-update: S'assurer qu'on peut exécuter N fois une requete sans problème
61 255 Etienne Pallier
GENERAL - page accueil User: y décrire la procédure à suivre
62 255 Etienne Pallier
GENERAL - bug sur désactivation emails: la validation génére alors une erreur "action impossible" (et d'autres opérations sans doute aussi)
63 258 Etienne Pallier
GENERAL - implémenter le workflow d'envoi d'emails
64 255 Etienne Pallier
GENERAL - Implémenter le workflow d'admission d'un matériel
65 255 Etienne Pallier
GENERAL - Apropos : update, ajoute Alex, Thibault, Alexis...
66 255 Etienne Pallier
GENERAL - Erreurs orthographe
67 255 Etienne Pallier
GENERAL - Utilisateur privilégié : add champ description (pour écrire par exemple qu'il est responsable "adjoint"...)
68 255 Etienne Pallier
GENERAL - Corrections/Evolutions demandées par l'IAS
69 255 Etienne Pallier
GENERAL - install AVEC LDAP - Tester et trouver une solution pour qu'on puisse facilement ajouter une personne du LDAP en tant que superadmin (ou au moins expliquer sur le wiki quelle manip faire pour s'en sortir)
70 255 Etienne Pallier
GENERAL - EMAIL 2 - on doit pouvoir configurer cette fonctionnalité (et l'activer ou la désactiver)
71 255 Etienne Pallier
GENERAL - EMAIL 3 - (Demande electroniciens) Ca serait bien que le proprio de la fiche reçoive un email quand l???étiquette est imprimée, ou encore quand la fiche est validée (dans le but qu???il vérifie et complète cette fiche)
72 255 Etienne Pallier
GENERAL - EMAIL 4 - Relance, Rappel d???intervention par email (cf https://projects.irap.omp.eu/projects/inventirap/wiki/Developpement#Rappel-dintervention-par-mail)
73 255 Etienne Pallier
GENERAL - Passage à Php7
74 255 Etienne Pallier
GENERAL - Eviter le bug du passage au LDAP qui supprime l'accès au site !!! (expliquer la procédure à suivre sur le wiki)
75 255 Etienne Pallier
GENERAL - Groupes - Rendre configurable le label "groupe métier" et "groupe thématique" (les usages peuvent être différents selon les labos, ex: "groupe projet", "groupe technique", ...)
76 255 Etienne Pallier
GENERAL - TESTS - Ajouter des tests pour tester différentes autorisations (« tel profil a le droit de faire telle action et voit telle(s) choses »)
77 255 Etienne Pallier
GENERAL - Listes - Surligner ligne quand "Mouse over" (Javascript)
78 1 Etienne Pallier
79 1 Etienne Pallier
80 257 Etienne Pallier
* *FEATURE - MATERIELS*
81 256 Etienne Pallier
82 255 Etienne Pallier
MATERIEL - Date de sortie
83 255 Etienne Pallier
MATERIEL - nouvelles catégories informatique : tablette et hybride
84 255 Etienne Pallier
MATERIEL - Modifier un matériel VALIDATED
85 255 Etienne Pallier
MATERIEL - vue 'find' à paginer ?
86 255 Etienne Pallier
MATERIEL - changement de proprio en gros
87 255 Etienne Pallier
MATERIEL - Find/ Erreur recherche lors de l'utilisation des dates
88 255 Etienne Pallier
MATERIEL - materiel/find : ameliorer la recherche dans le champ général "Recherche"
89 255 Etienne Pallier
MATERIEL - ajout champ pour materiel de projet 
90 255 Etienne Pallier
MATERIEL - doctype: ajouter "devis"
91 255 Etienne Pallier
MATERIEL - date commande ne doit pas être obligatoire
92 255 Etienne Pallier
MATERIEL - bug sur modif date livraison => devrait updater date fin garantie
93 255 Etienne Pallier
MATERIEL - bug validation : on ne devrait pas pouvoir valider alors que fournisseur est vide
94 255 Etienne Pallier
MATERIEL - Materiel/Valider: la liste des champs obligatoires avant validation doit s'adapter à ce qui RESTE encore vraiment nécessaire (Nom propriétaire, Fournisseur, Numéro de commande, Organisme, prix et date de reception)
95 255 Etienne Pallier
MATERIEL - Matos/Création: date de réception ne doit pas être inférieure à date de commande !!!
96 255 Etienne Pallier
MATERIEL - Matos/Edition et Validation bug: mails envoyés en DOUBLE !!!
97 255 Etienne Pallier
MATERIEL - Responsable et Admin/Accueil: "Voir mes matériels" => à DESCENDRE tout en bas + "Voir les matériels A VALIDER" => à REMONTER tout EN HAUT
98 255 Etienne Pallier
MATERIEL - Ajouter un champ "Durée de garantie" sur la fiche matériel, et mettre le nom du pc et date fin garantie en rouge quand il n'est plus sous garantie (sauf si la durée de garantie n'est pas précisée)
99 255 Etienne Pallier
MATERIEL - Doc admission et doc sortie (improved)
100 255 Etienne Pallier
MATERIEL - ajouter impression de la fiche
101 255 Etienne Pallier
MATERIEL - Recherche : bouton "Rechercher" amélioré
102 255 Etienne Pallier
MATERIEL - Pour la partie administrative, la validation doit permettre l'édition de la fiche officielle d'inventaire transmise à la tutelle. Permettre l'édition de cette fiche
103 255 Etienne Pallier
MATERIEL - Gestionnaire de référence (obligatoire)
104 255 Etienne Pallier
MATERIEL - Check Date achat <= Date Livraison !!!
105 255 Etienne Pallier
MATERIEL - Ajouter un statut « désinventorié » ou «amorti ? » (à réfléchir)
106 255 Etienne Pallier
MATERIEL - Ajouter colonne statut « hors service » dans la vue "liste des matériels" 
107 255 Etienne Pallier
MATERIEL - N° série : à remettre dans la section informations (pour que tout le monde le voie)
108 255 Etienne Pallier
MATERIEL - Empêcher duplication d'une fiche matériel si même numéro de série
109 255 Etienne Pallier
MATERIEL - Le champ "Local de stockage" a-t-il disparu ??? => à remettre
110 255 Etienne Pallier
MATERIEL - Site : passer ce champ à optionnel (ou cacher)
111 255 Etienne Pallier
MATERIEL - find - Redirection apres action (changeStatus & delete)
112 1 Etienne Pallier
113 1 Etienne Pallier
114 257 Etienne Pallier
* *FEATURE - ETIQUETTES*
115 256 Etienne Pallier
116 255 Etienne Pallier
ETIQ - Installation des dernières etiqueteuses
117 255 Etienne Pallier
ETIQ - Installation des dernières etiqueteuses (déjà achetées, et dans le bureau de Etienne)
118 255 Etienne Pallier
ETIQ - Matos/Etiquette: on ne doit pas pouvoir imprimer l'étiquette d'un matériel qui est CREATED (seulement s'il est VALIDATED)
119 255 Etienne Pallier
ETIQ - installer etiqueteuses sur les postes clients
120 255 Etienne Pallier
ETIQ - installer etiqueteuse sur Mac
121 255 Etienne Pallier
ETIQ - installer etiqueteuse sur Win7 et Win10 et expliquer la procédure sur wiki-install (donner aussi url vers logiciel dymo DLS)
122 1 Etienne Pallier
123 1 Etienne Pallier
124 257 Etienne Pallier
* *FEATURE/ AUTHENTIFICATION ET AUTORISATIONS (ACL)*
125 256 Etienne Pallier
126 255 Etienne Pallier
ACL - liste deroulante pour changer rapidement de profil (superadmin only)
127 255 Etienne Pallier
ACL - rendre les autorisations configurables via une table de config dans la BD et un formulaire web permettant de le modifier
128 255 Etienne Pallier
ACL - Vérifier qu'on ne peut vraiment plus se connecter par ldap SANS mot de passe !!!
129 259 Etienne Pallier
ACL - bug sur ajout utilisateur privilégié en mode LDAP
130 255 Etienne Pallier
ACL - Matos/Validation: Responsable ne doit pas pouvoir valider un matériel administratif (>800E)
131 255 Etienne Pallier
ACL - matos/création: mail à l'administration devrait être fait seulement si la case "inventaire>800???" est coché
132 255 Etienne Pallier
ACL - TEST: admin doit pouvoir voir les matériels archivés, et les désarchiver au besoin
133 255 Etienne Pallier
ACL - Accueil/Responsable: voir les matériels à valider : uniquement si < 800E
134 255 Etienne Pallier
ACL - Optimisation Emails: l'initiateur d'une action ne doit pas recevoir d'email à la suite de sa propre action !!!
135 255 Etienne Pallier
ACL - Matos/Création: on ne devrait pas pouvoir créer un matériel "inventoriable" sans donner son prix
136 255 Etienne Pallier
ACL - Ca serait bien que le proprio puisse modifier sa fiche, une fois créée, mais aussi même après qu'elle ait été validée. Attention, la modification post-validation ne peut porter que sur les renseignements techniques complémentaires
137 255 Etienne Pallier
ACL - (IRAP) Valider le doc ACLs (tester que c???est bien ce qui est mis en place réellement sur le site inventirap du labo IRAP) 
138 225 Etienne Pallier
139 1 Etienne Pallier
140 257 Etienne Pallier
* *FEATURE - SUIVIS*
141 256 Etienne Pallier
142 255 Etienne Pallier
SUIVI - Ajouter plusieurs documents : photo, docs
143 255 Etienne Pallier
SUIVI - modifs + champs dans table suivi
144 255 Etienne Pallier
SUIVI - Suivis par fournisseur: ajouter la colonne "fournisseur" dans Suivi pour pouvoir trier la vue par fournisseur
145 255 Etienne Pallier
SUIVI - relance : trouver un moyen de relancer automatiquement les suivis périodiques (ou bien avec une date programmée)
146 190 Etienne Pallier
147 1 Etienne Pallier
148 257 Etienne Pallier
* *FEATURE - EMPRUNTS*
149 256 Etienne Pallier
150 255 Etienne Pallier
EMPRUNT - rappel - Si emprunt, mail rappel a l'emprunteur avant echeance
151 255 Etienne Pallier
EMPRUNT - dates: afficher les dates d'emprunt et de retour (date emprunt doit être obligatoire)
152 185 Etienne Pallier
153 189 Etienne Pallier
154 188 Etienne Pallier
---
155 187 Etienne Pallier
156 185 Etienne Pallier
h2. TODOLIST (OLD)
157 185 Etienne Pallier
158 185 Etienne Pallier
*_NB: Cette liste est OBSOLÈTE (ici à titre indicatif, pour se souvenir des retours de réunion)_*
159 185 Etienne Pallier
160 185 Etienne Pallier
*Demandes des utilisateurs (transmises par D. Rambaud le 19/12/16) :*
161 204 Etienne Pallier
162 204 Etienne Pallier
* Ca serait bien que le proprio de la fiche reçoive un email quand l'étiquette est imprimée, ou encore quand la fiche est validée => dans le but qu'il vérifie et complète cette fiche
163 204 Etienne Pallier
* Ca serait bien aussi que le proprio puisse modifier sa fiche, une fois créée, mais aussi même après qu'elle ait été validée. Attention, la modification post-validation ne peut porter que sur les renseignements techniques complémentaires.
164 204 Etienne Pallier
165 204 Etienne Pallier
166 204 Etienne Pallier
*Suite à réunion du 27/10/16 avec le LATMOS, constat des modifs nécessaires:*
167 204 Etienne Pallier
168 185 Etienne Pallier
* L'étiqueteuse semble ne plus fonctionner alors qu'elle fonctionnait avant...
169 185 Etienne Pallier
* Ajouter un champ "Titre du mail" dans la liste des emails envoyés, pour qu'on puisse configurer le titre du mail envoyé (ex: [LABINVENT])
170 185 Etienne Pallier
* Check Date achat <= Date Livraison !!!
171 185 Etienne Pallier
* Ajouter un statut : ajouter un statut « désinventorié «  ou «amorti ? » (à réfléchir)
172 185 Etienne Pallier
* Ajouter colonne statut « hors service » dans la vue "liste des matériels"
173 192 Etienne Pallier
* N° série : à remettre dans la section informations (pour que tout le monde le voie)
174 1 Etienne Pallier
* Empêcher duplication d'une fiche matériel si même numéro de série
175 121 Alexandre Cases
* Importation depuis Excel
176 120 Alexandre Cases
* Le champ "Local de stockage" a-t-il disparu ??? => à remettre
177 120 Alexandre Cases
* Site : champ optionnel
178 120 Alexandre Cases
* Champs optionnels: de manière générale, il faudrait pouvoir configurer quelques champs comme optionnels (certains champs doivent bien sûr absolument rester obligatoires)
179 120 Alexandre Cases
* (temporairement, on peut se contenter de CACHER certains champs, comme par exemple le champ "Site")
180 120 Alexandre Cases
* Suivis par fournisseur: ajouter la colonne "fournisseur" dans Suivi pour pouvoir trier la vue par fournisseur
181 1 Etienne Pallier
* Suivis relance : trouver un moyen de relancer automatiquement les suivis périodiques (ou bien avec une date programmée)
182 120 Alexandre Cases
* Emprunt dates: afficher les dates d'emprunt et de retour (date emprunt doit être obligatoire)
183 120 Alexandre Cases
* Matériel gestionnaire: obliger la personne qui crée une fiche matériel à choisir un gestionnaire (via une liste) (et avertir automatiquement ce gestionnaire par mail)
184 192 Etienne Pallier
* supprimer profil AdminPlus, inutile
185 120 Alexandre Cases
186 120 Alexandre Cases
187 120 Alexandre Cases
188 120 Alexandre Cases
*Suite à l'installation à l'IRAP du 21/01/2016*:
189 120 Alexandre Cases
190 120 Alexandre Cases
- Si elle existe, supprimer table "fichiers"
191 120 Alexandre Cases
- Sauvegarder les utilisateurs
192 120 Alexandre Cases
- Transformer table "utilisateurs" en "users"
193 120 Alexandre Cases
- Ajout table "configuration"
194 120 Alexandre Cases
- Ajout clé étrangère emprunts (site_id)/suivis (type_suivi_id)
195 120 Alexandre Cases
- Transformation des données correspondantes
196 120 Alexandre Cases
- Suppression ancien champ emprunt (e_lieu_stockage), suivis (type_intervention)
197 1 Etienne Pallier
198 1 Etienne Pallier
199 101 Etienne Pallier
*Suite à l'installation à l'IAS du 09/03/2015*
200 9 Etienne Pallier
201 9 Etienne Pallier
- Ajout table "organismes", "type_suivis", "sites"
202 180 Etienne Pallier
- Ajout clé correspondante dans table "matériels"
203 9 Etienne Pallier
- Transformation des données correspondantes
204 174 Etienne Pallier
- Suppression anciens champs
205 174 Etienne Pallier
- Ajout table "documents"
206 174 Etienne Pallier
- Sauvegarder les utilisateurs
207 174 Etienne Pallier
- Transformer table "utilisateurs" en "users"
208 174 Etienne Pallier
- Ajout table "configuration"
209 174 Etienne Pallier
- Ajout clé étrangère emprunts (site_id)/suivis (type_suivi_id)
210 209 Thibaud Ajas
- Transformation des données correspondantes
211 210 Thibaud Ajas
- Suppression ancien champ emprunt (e_lieu_stockage), suivis (type_intervention)
212 1 Etienne Pallier
---
213 210 Thibaud Ajas
214 210 Thibaud Ajas
h2. Schéma de la base de données (v2.0.0)
215 208 Thibaud Ajas
216 208 Thibaud Ajas
217 208 Thibaud Ajas
{{thumbnail(BDD_IRAP.png, size=2000, title=Pyros data model)}}
218 208 Thibaud Ajas
219 1 Etienne Pallier
220 208 Thibaud Ajas
221 210 Thibaud Ajas
222 208 Thibaud Ajas
223 208 Thibaud Ajas
224 174 Etienne Pallier
---
225 174 Etienne Pallier
226 174 Etienne Pallier
h2. Utilisation du serveur web de dev de CakePHP (à la place de apache)
227 176 Etienne Pallier
228 182 Etienne Pallier
/!\ Votre serveur MySQL doit être lancé !!!
229 182 Etienne Pallier
230 176 Etienne Pallier
* Se placer à la racine du projet.
231 176 Etienne Pallier
232 179 Etienne Pallier
* Lancer la commande suivante :
233 176 Etienne Pallier
234 182 Etienne Pallier
 <pre> bin/cake server </pre>
235 182 Etienne Pallier
236 176 Etienne Pallier
* Rendez-vous sur http://localhost:8765/
237 176 Etienne Pallier
238 176 Etienne Pallier
---
239 178 Etienne Pallier
240 174 Etienne Pallier
h2. Cycle de vie du Matériel
241 174 Etienne Pallier
242 174 Etienne Pallier
243 9 Etienne Pallier
---
244 9 Etienne Pallier
245 181 Etienne Pallier
h3. Diagramme d'états-transitions
246 181 Etienne Pallier
247 184 Etienne Pallier
{{thumbnail(equipment_status_state_diagram.png, size=2000, title=Cycle de vie du matériel)}}
248 183 Etienne Pallier
249 183 Etienne Pallier
250 181 Etienne Pallier
---
251 181 Etienne Pallier
252 181 Etienne Pallier
h3. Diagramme de séquences
253 12 Etienne Pallier
254 12 Etienne Pallier
{{thumbnail(equipment_interactions_sequence_diagram.png, size=1500, title=Cycle de vie du matériel)}}
255 76 Etienne Pallier
256 15 Etienne Pallier
257 1 Etienne Pallier
258 12 Etienne Pallier
---
259 17 Etienne Pallier
260 17 Etienne Pallier
h2. ACL - Gestion des droits selon le profil
261 66 Etienne Pallier
262 278 Etienne Pallier
Document Google doc (à jour) : https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit?usp=sharing 
263 277 Etienne Pallier
264 279 Etienne Pallier
Ancien document (n'est plus à jour et est incomplet) : {{thumbnail(ACLs Droits selon les Roles.pdf, size=1500, title=Cycle de vie du matériel)}}
265 84 Etienne Pallier
266 86 Etienne Pallier
267 84 Etienne Pallier
268 86 Etienne Pallier
---
269 154 Alexandre Cases
270 154 Alexandre Cases
h2. ROADMAP - Plan de développement
271 107 Alexandre Cases
272 274 Etienne Pallier
*Stage de Thibault :* il se déroule du 10 avril au 30 juin 2017, soit sur 12 semaines (S1 à S12)
273 154 Alexandre Cases
_*(Ne pas oublier de rédiger le rapport de stage au fur et à mesure)*_
274 154 Alexandre Cases
275 138 Etienne Pallier
276 154 Alexandre Cases
Voir le détail de la roadmap: https://projects.irap.omp.eu/projects/inventirap/roadmap
277 1 Etienne Pallier
278 275 Etienne Pallier
* S01-SO2 : "version 2.5.x - Amélioraiton installation, pagination":https://projects.irap.omp.eu/versions/160
279 275 Etienne Pallier
* S03-SO5 : "version 2.6.x - Emails, Etiquettes, bugfix...":https://projects.irap.omp.eu/versions/161
280 275 Etienne Pallier
* S06-SO7 : "version 2.7.x - Synchronization avec LATMOS, ACLs ok partout":https://projects.irap.omp.eu/versions/162
281 275 Etienne Pallier
* S08-S10 : "version 2.8.x - ACLs configurables via BDD, ...":https://projects.irap.omp.eu/versions/163
282 275 Etienne Pallier
* S11-S12 : "version 2.9.x - upgrade Cakephp3, passage à Php7":https://projects.irap.omp.eu/versions/164
283 271 Etienne Pallier
284 271 Etienne Pallier
285 276 Etienne Pallier
*Stage de Alexandre Cases (avril à juin 2016) :*
286 271 Etienne Pallier
287 271 Etienne Pallier
288 160 Alexandre Cases
|                    |   |_.Prévu |_.Réalisé |
289 90 Etienne Pallier
|/2=.S01 (11/4-15/4) |.1|/5=<."version 2.00 - Cakephp3 + Php5 (version de base from bake)":https://projects.irap.omp.eu/versions/105|/6=<.version 2.00|
290 161 Etienne Pallier
                     |.2|
291 90 Etienne Pallier
|/2=.S02 (18/4-22/4) |.1|
292 161 Etienne Pallier
                     |.2|
293 90 Etienne Pallier
|/2=.S03 (25/4-29/4) |.1|
294 154 Alexandre Cases
                     |.2|/4=<."version 2.01 - Implémentation complète du CRUD":https://projects.irap.omp.eu/versions/101|
295 154 Alexandre Cases
|/2=.S04 (02/5-06/5) |.1|/4=<.version 2.01|
296 154 Alexandre Cases
                     |.2|
297 154 Alexandre Cases
|/2=.S05 (09/5-13/5) |.1|
298 99 Etienne Pallier
                     |.2|/3=<."version 2.02 - Implémentation de toutes les autres actions":https://projects.irap.omp.eu/versions/106|
299 1 Etienne Pallier
|/2=.S06 (16/5-20/5) |.1|/2=<.version 2.02|
300 1 Etienne Pallier
                     |.2|
301 151 Etienne Pallier
|/2=.S07 (23/5-27/5) |.1|/2=<."version 2.03 - Implémentation du LDAP (vrai et fake)":https://projects.irap.omp.eu/versions/108|/2=<.version 2.03|
302 102 Etienne Pallier
                     |.2|
303 100 Etienne Pallier
|/2=.S08 (30/5-03/6) |.1|/2=<."version 2.04 - Implémentation des ACL (droits)":https://projects.irap.omp.eu/versions/107|_/10=<.version 2.04 (en cours)|
304 98 Etienne Pallier
                     |.2|
305 100 Etienne Pallier
|/2=.S09 (06/6-10/6) |.1|/2=<."version 2.05 - Documents attaches aux materiels (+ photos)":https://projects.irap.omp.eu/versions/99|
306 98 Etienne Pallier
                     |.2|
307 100 Etienne Pallier
|_/2=.S10 (13/6-17/6) |.1|/2=<."version 2.06 - Evolutions prévues dans 1.3 et 1.4":https://projects.irap.omp.eu/versions/110|
308 98 Etienne Pallier
                     |.2|
309 98 Etienne Pallier
|/2=.S11 (20/6-24/6) |.1|/1=<."version 2.07 - Corrections/Evolutions demandées par l'IAS":https://projects.irap.omp.eu/versions/124|
310 98 Etienne Pallier
                     |.2|/2=<."version 2.08 - Cakephp3 + Php7 (compatible Php5)":https://projects.irap.omp.eu/versions/98|
311 98 Etienne Pallier
|/2=.S12 (27/6-30/6) |.1|
312 98 Etienne Pallier
                     |.2|/1=<."version 2.10 - Autres ajouts (+ fin rédaction rapport de stage)":https://projects.irap.omp.eu/versions/100|
313 98 Etienne Pallier
314 98 Etienne Pallier
---
315 98 Etienne Pallier
316 281 Etienne Pallier
h2. COMMIT : Procédure à suivre à chaque commit
317 98 Etienne Pallier
318 268 Etienne Pallier
NB: _cette procédure est détaillée davantage dans la section HOWTO de cette page (partie "CYCLE DE DEVELOPPEMENT A SUIVRE")_
319 267 Etienne Pallier
320 98 Etienne Pallier
Voici les différentes étapes à respecter au moment de chaque commit:
321 1 Etienne Pallier
322 283 Etienne Pallier
*1) S'assurer que tous les tests passent toujours !*
323 1 Etienne Pallier
324 286 Etienne Pallier
Cela permet de se prémunir contre toute régression (ce qui fonctionnait avant doit continuer de fonctionner)
325 285 Etienne Pallier
326 301 Etienne Pallier
*2) Optionnel : Incrementer la version et la date du projet*
327 282 Etienne Pallier
328 280 Etienne Pallier
A la fin du fichier src/Template/Layout/default.ctp
329 1 Etienne Pallier
330 265 Etienne Pallier
*3) Mettre à jour le fichier README-LABINVENT (ceci est un exemple, un template)*
331 265 Etienne Pallier
332 151 Etienne Pallier
Date: 11/05/2016
333 1 Etienne Pallier
Version: 2.1.9
334 151 Etienne Pallier
Mise à jour doc install
335 151 Etienne Pallier
(Attention, changement structure BDD)
336 260 Etienne Pallier
Demande(s) réalisée(s) : https://projects.irap.omp.eu/issues/3542
337 151 Etienne Pallier
Version majeure en cours (2.1): https://projects.irap.omp.eu/versions/101
338 151 Etienne Pallier
339 100 Etienne Pallier
Remarques:
340 100 Etienne Pallier
=> Version: 2.1.9 = 9ème commit sur la version 2.1
341 100 Etienne Pallier
=> préciser "(bugfix)" si c'est le cas
342 1 Etienne Pallier
=> ajouter "(Attention, changement structure BDD)" s'il y a eu une modif de la BDD
343 100 Etienne Pallier
=> "Demande (terminée)" ou "Demande (en cours)", ou pas de demande du tout (exceptionnellement)
344 151 Etienne Pallier
=> ces infos permettront de savoir quelle version (et date) exacte du projet on a actuellement sur son disque
345 1 Etienne Pallier
346 1 Etienne Pallier
347 303 Etienne Pallier
*4) S'il y a eu un changement de structure de la BD*
348 98 Etienne Pallier
349 1 Etienne Pallier
* Copier la requête sql de modif dans un script db-update-AAAA-MM-JJ.sh du dossier database/update/
350 291 Etienne Pallier
* Mettre à jour le script sql complet de création de la BD database/labinvent_2.1_12-05-16.sql (et les autres scripts sql associés si besoin, insert_users...)
351 291 Etienne Pallier
* Mettre à jour le schéma (image png) de la BD (avec Mysql Workbench) dans le projet et sur le wiki (page "Documentation technique")
352 1 Etienne Pallier
* Avertir dans le README (Attention, changement de structure de la BDD, il faut exécuter le script de mise à jour database/update/xxx ...)
353 151 Etienne Pallier
354 1 Etienne Pallier
355 303 Etienne Pallier
*5) Si c'est la fin d'une version majeure (2.0, 2.1, 2.2, ...)*
356 1 Etienne Pallier
357 304 Etienne Pallier
358 304 Etienne Pallier
* On doit normalement avoir écrit quelques nouveaux tests pour cette version, n'est-ce pas ??? (sinon, c'est po bien) !!!
359 98 Etienne Pallier
* Ajouter cette version en tête de la section "MAIN CHANGES (MILESTONES)" dans le fichier README
360 1 Etienne Pallier
* Mettre à jour la doc install/INSTALLATION à partir du wiki (si nécessaire)
361 261 Etienne Pallier
* (On peut aussi tester une installation du logiciel from scratch)
362 98 Etienne Pallier
363 151 Etienne Pallier
364 284 Etienne Pallier
*6) PULL*
365 100 Etienne Pallier
366 100 Etienne Pallier
(au cas où quelqu'un d'autre aurait fait un push)
367 98 Etienne Pallier
368 104 Etienne Pallier
369 284 Etienne Pallier
*7) COMMIT*
370 104 Etienne Pallier
371 7 Etienne Pallier
Dans le message de commit, faire un simple copier/coller des infos du fichier README (sauf date):
372 1 Etienne Pallier
373 1 Etienne Pallier
Version: 2.1.9
374 1 Etienne Pallier
Mise à jour doc install (bugfix)
375 302 Etienne Pallier
(Attention, changement structure BDD)
376 1 Etienne Pallier
Demande (terminée): https://projects.irap.omp.eu/issues/3542
377 1 Etienne Pallier
Version majeure en cours (2.1): https://projects.irap.omp.eu/versions/101
378 1 Etienne Pallier
379 304 Etienne Pallier
*5) Si c'est la fin d'une version majeure (2.0, 2.1, 2.2, ...)*
380 1 Etienne Pallier
381 304 Etienne Pallier
* On doit normalement avoir écrit quelques nouveaux tests pour cette version, n'est-ce pas ??? (sinon, c'est po bien) !!!
382 304 Etienne Pallier
* Ajouter cette version en tête de la section "MAIN CHANGES (MILESTONES)" dans le fichier README
383 304 Etienne Pallier
* Mettre à jour la doc install/INSTALLATION à partir du wiki (si nécessaire)
384 304 Etienne Pallier
* (On peut aussi tester une installation du logiciel from scratch)
385 304 Etienne Pallier
* Voir aussi étape 9
386 304 Etienne Pallier
387 304 Etienne Pallier
388 302 Etienne Pallier
*8) Optionnel : PUSH*
389 1 Etienne Pallier
390 1 Etienne Pallier
(seulement si le commit est important/urgent, ou suite à un ensemble de commits sur un même thème)
391 304 Etienne Pallier
392 304 Etienne Pallier
393 304 Etienne Pallier
*9) Si c'est la fin d'une version majeure (2.0, 2.1, 2.2, ...), TAGUER la version*
394 304 Etienne Pallier
395 304 Etienne Pallier
Exemple:
396 304 Etienne Pallier
<pre>
397 304 Etienne Pallier
git tag 2.8 1b2e1d63ff
398 304 Etienne Pallier
</pre>
399 304 Etienne Pallier
400 304 Etienne Pallier
The 1b2e1d63ff stands for the first 10 characters of the commit id you want to reference with your tag. 
401 304 Etienne Pallier
You can get the commit id by looking at the log :
402 304 Etienne Pallier
403 304 Etienne Pallier
<pre>
404 304 Etienne Pallier
git log
405 304 Etienne Pallier
</pre>
406 304 Etienne Pallier
407 304 Etienne Pallier
408 304 Etienne Pallier
409 1 Etienne Pallier
410 1 Etienne Pallier
411 1 Etienne Pallier
---
412 203 Thibaud Ajas
413 288 Etienne Pallier
h2. Procédure à suivre pour MERGER le code entre 2 labos
414 288 Etienne Pallier
415 290 Etienne Pallier
*0) Etat initial :*
416 288 Etienne Pallier
- dev-LATMOS : état ok (tests passés & push fait)
417 288 Etienne Pallier
- dev-IRAP : état ok (tests passés & push fait)
418 288 Etienne Pallier
419 290 Etienne Pallier
*A faire à l'IRAP :*
420 288 Etienne Pallier
421 290 Etienne Pallier
*1) Merger dev-IRAP => dev*
422 289 Etienne Pallier
git checkout dev-IRAP
423 289 Etienne Pallier
(dev-IRAP) Incrémenter date + version + commit/push
424 288 Etienne Pallier
git checkout dev
425 313 Etienne Pallier
*git merge --no-ff dev-IRAP*
426 289 Etienne Pallier
Tests ok
427 305 Etienne Pallier
git push [origin dev]
428 288 Etienne Pallier
429 290 Etienne Pallier
*2) Merger dev-LATMOS => dev*
430 289 Etienne Pallier
git checkout dev-LATMOS
431 289 Etienne Pallier
(dev-LATMOS) Tests ok
432 289 Etienne Pallier
git checkout dev
433 313 Etienne Pallier
*git merge --no-ff dev-LATMOS*
434 307 Etienne Pallier
Si besoin, résoudre les conflits + add/commit/push
435 289 Etienne Pallier
Si besoin, exécuter le(s) script(s) db-update.sh
436 308 Etienne Pallier
si besoin, adapter le(s) script(s) db-update.sh
437 1 Etienne Pallier
Tests ok
438 311 Etienne Pallier
Faire un seul script db-update fusionnant toutes les modifs IRAP
439 308 Etienne Pallier
Update le script de création général de la BD (en fonction du contenu de db-update.sh) + add/commit/push
440 307 Etienne Pallier
Incrémenter date + version + add/commit/push
441 288 Etienne Pallier
442 312 Etienne Pallier
*3) Merger dev => dev-IRAP et dev-LATMOS*
443 312 Etienne Pallier
git checkout dev-IRAP
444 313 Etienne Pallier
*git merge --no-ff dev*
445 312 Etienne Pallier
Tests ok
446 312 Etienne Pallier
git push
447 1 Etienne Pallier
448 312 Etienne Pallier
git checkout dev-LATMOS
449 313 Etienne Pallier
*git merge --no-ff dev*
450 312 Etienne Pallier
Tests ok
451 306 Etienne Pallier
git push
452 289 Etienne Pallier
453 312 Etienne Pallier
Si besoin : Prévenir LATMOS que db-update à faire (venant de dev-IRAP) ?
454 288 Etienne Pallier
455 1 Etienne Pallier
h2. Installation from scratch (Sous UBuntu)
456 1 Etienne Pallier
457 1 Etienne Pallier
h3. Création projet avec Composer
458 1 Etienne Pallier
459 1 Etienne Pallier
* Télécharger composer.phar : 
460 1 Etienne Pallier
"curl -s https://getcomposer.org/installer | php"
461 1 Etienne Pallier
462 1 Etienne Pallier
* Avec le Composer créer un nouveau projet : 
463 1 Etienne Pallier
"php composer.phar create-project --prefer-dist cakephp/app labinvent_2.0"
464 1 Etienne Pallier
465 1 Etienne Pallier
> Voir structure projet : http://book.cakephp.org/3.0/fr/intro/cakephp-folder-structure.html
466 22 Alexandre Cases
467 22 Alexandre Cases
* On rempli la base de données avec le fichier sql
468 1 Etienne Pallier
469 1 Etienne Pallier
* On indique la BD utiliser à CakePHP dans le fichier config/app.php, propriété "Datasources".
470 1 Etienne Pallier
471 22 Alexandre Cases
* On se place à la racine du projet
472 22 Alexandre Cases
473 22 Alexandre Cases
* On génère le code Scaffold : 
474 1 Etienne Pallier
"bin/cake bake all nom_table" --> ça génére les modeles, les vues, et les controlleurs.
475 153 Etienne Pallier
476 1 Etienne Pallier
> Commande (en une fois) :
477 21 Alexandre Cases
> > bin/cake bake all categories && bin/cake bake all emprunts && bin/cake bake all groupes_metiers && bin/cake bake all groupes_thematiques && bin/cake bake all organismes && bin/cake bake all sites && bin/cake bake all sous_categories && bin/cake bake all suivis && bin/cake bake all sur_categories && bin/cake bake all type_suivis && bin/cake bake all documents && bin/cake bake all users && bin/cake bake all materiels
478 1 Etienne Pallier
479 1 Etienne Pallier
h3. Modification de la base de données 
480 1 Etienne Pallier
> Une version du sql corrigée au fur et à mesure est disponible dans le git :
481 1 Etienne Pallier
482 131 Alexandre Cases
> > Dans database/, le fichier labinvent_2.1_09-05-16 correspond à la création de la base.
483 1 Etienne Pallier
> > Dans database/, le fichier labinvent_2.0_insert-irap_19-04-16 correspond aux insertions propre à l'IRAP, fichier insertion uniquement pour les dévellopeurs.
484 1 Etienne Pallier
485 1 Etienne Pallier
* Création table "config"
486 21 Alexandre Cases
487 1 Etienne Pallier
> > Mise à jour dans le fichier de création de base
488 21 Alexandre Cases
> > Mise à jour à part : db-update-2016-05-09.sql
489 21 Alexandre Cases
490 21 Alexandre Cases
h3. Autres remarques lors du développement
491 21 Alexandre Cases
492 21 Alexandre Cases
* Suivre les conventions de CakePHP est le top pour ne pas avoir à refaire de la config (bidouiller), il faudrait vérifier réguliérement que c'est le cas (outil "cakephp-codesniffer")...
493 21 Alexandre Cases
> Voir : http://book.cakephp.org/3.0/fr/contributing/cakephp-coding-conventions.html
494 21 Alexandre Cases
495 21 Alexandre Cases
* La solution pour insérer un utilisateur directement dans la base et pouvoir se connecter avec dans l'application est de l'insérer avec un mot de passe haché de la méme façon.
496 20 Alexandre Cases
Le mot de passe "login" = "$2y$10$LZzpws3oDidBcqO/Fy1RTedLLk3ENTmplny5J7bZ6R1PqFoGOw3Ma".
497 24 Alexandre Cases
Le mot de passe vide "" = "$2y$10$nBQMNstgN.sgad1ZANznY.pbJI.ZG/.Q5qX4gC8SXCFQnDIZC8rcW".
498 25 Alexandre Cases
499 91 Alexandre Cases
* Vérifier que la migration vers la prochaine version de cakephp3 (3.3 ?) sera facile... (décrire la procédure à suivre)
500 130 Alexandre Cases
--> Une migration vers une version mineur 3.2 => 3.3, se réalise avec la mise à jour de CakePHP à l'aide de Composer
501 91 Alexandre Cases
--> Puis il faut regarder les changements dans la page migration correspondant à la version voulu et adapter les changements au code.
502 91 Alexandre Cases
> Voir : http://book.cakephp.org/3.0/fr/appendices/3-2-migration-guide.html
503 31 Alexandre Cases
504 106 Alexandre Cases
* Outil (plugin) "DebugKit" de CakePHP3 : 
505 106 Alexandre Cases
--> DebugKit est un plugin qui fournit une toolbar pour aider à debugger les applications CakePHP plus facilement.
506 106 Alexandre Cases
--> Par défaut il est installé avec le squelette de l'application, pour l'activer, il faut se placer à la racine.
507 1 Etienne Pallier
--> Puis il faut éxécuter la ligne suivante : bin/cake plugin load DebugKit .
508 129 Alexandre Cases
--> La commande va aller modifier le fichier config bootstrap.php.
509 122 Alexandre Cases
--> Le fichier bootstrap.php actuel de l'application sur le git, est configuré pour charger le plugin lorsque l'application est en mode debug de CakePHP, je ne pense pas que exécuter la commande précédente soit utile vu la configuration de ce fichier dans notre application.
510 129 Alexandre Cases
--> Le plugin nécessite l'extension php5-sqlite par défaut (il supporte l'équivalent avec de la config).
511 128 Alexandre Cases
> Voir : http://book.cakephp.org/3.0/fr/debug-kit.html
512 128 Alexandre Cases
513 157 Alexandre Cases
514 157 Alexandre Cases
* Mode debug personnaliser : 
515 157 Alexandre Cases
> Faire $this->myDebug($var) dans un controlleur pour afficher le contenu de la variable si mode debug personnalisé actif, à condition que le mode debug soit activé.
516 125 Alexandre Cases
517 125 Alexandre Cases
> Voir : http://book.cakephp.org/3.0/fr/development/testing.html
518 156 Etienne Pallier
519 156 Etienne Pallier
* Pour charger une librairie (ex : phpqrcode, ...)
520 156 Etienne Pallier
> Voir : http://book.cakephp.org/3.0/fr/core-libraries/app.html#charger-les-fichiers-de-vendor
521 156 Etienne Pallier
522 156 Etienne Pallier
* Pour créer les fichiers pdf d'entrée et de sortie, on utilise fpdf 1.8.1, on pourrait utiliser le plugin développer pour CakePHP3.
523 156 Etienne Pallier
> Voir : https://github.com/FriendsOfCake/CakePdf
524 156 Etienne Pallier
525 156 Etienne Pallier
* Pour le JavaScript, le JS Helper a été retiré 
526 156 Etienne Pallier
> Voir : http://book.cakephp.org/3.0/fr/appendices/3-0-migration-guide.html#jshelper
527 156 Etienne Pallier
528 156 Etienne Pallier
* Pour pouvoir éxécuter les tests depuis eclipse : 
529 156 Etienne Pallier
> Voir : http://blog.loftdigital.com/running-phpunit-tests-in-eclipse-pdt
530 156 Etienne Pallier
531 156 Etienne Pallier
* Avant de déployer l'application sur le serveur de production, optimiser les performances
532 156 Etienne Pallier
> Voir : http://book.cakephp.org/3.0/fr/deployment.html#ameliorer-les-performances-de-votre-application
533 156 Etienne Pallier
534 156 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}Installation sur Mac (retour des pb)%
535 156 Etienne Pallier
536 156 Etienne Pallier
1) install.sh
537 156 Etienne Pallier
=> 
538 156 Etienne Pallier
chmod: Unable to change file mode on ./webroot/img//gqbee0pkerrl8h2rbekaa3t8j1.png: Operation not permitted
539 156 Etienne Pallier
chmod: Unable to change file mode on ./tmp//cache/models/myapp_cake_model_default_configurations: Operation not permitted
540 156 Etienne Pallier
chmod: Unable to change file mode on ./tmp//cache/models/myapp_cake_model_default_documents: Operation not permitted
541 156 Etienne Pallier
chmod: Unable to change file mode on ./tmp//cache/persistent/myapp_cake_core_translations_cake_fr__f_r: Operation not permitted
542 156 Etienne Pallier
chmod: Unable to change file mode on ./tmp//cache/persistent/myapp_cake_core_translations_debug_kit_fr__f_r: Operation not permitted
543 156 Etienne Pallier
chmod: Unable to change file mode on ./tmp//cache/persistent/myapp_cake_core_translations_default_fr__f_r: Operation not permitted
544 156 Etienne Pallier
545 156 Etienne Pallier
546 156 Etienne Pallier
=> sudo chmod -R 777 ../webroot/img
547 163 Alexandre Cases
=> sudo chmod -R 777 ../tmp/
548 156 Etienne Pallier
(=> sudo chmod -R 777 ../vendor)
549 163 Alexandre Cases
550 156 Etienne Pallier
551 165 Etienne Pallier
2) connexion au site
552 1 Etienne Pallier
=> mauvais affichage pourri
553 164 Alexandre Cases
=> il faut configurer la BD dans app.php
554 164 Alexandre Cases
            'username' => 'labinvent2user',
555 164 Alexandre Cases
            'password' => 'labinvent2user',
556 164 Alexandre Cases
            'database' => 'labinvent2',
557 164 Alexandre Cases
558 164 Alexandre Cases
3) login
559 164 Alexandre Cases
=> epallier/login
560 164 Alexandre Cases
561 164 Alexandre Cases
562 164 Alexandre Cases
---
563 172 Alexandre Cases
564 172 Alexandre Cases
h2. Pour mettre à jour CakePHP
565 156 Etienne Pallier
566 156 Etienne Pallier
* Utiliser le composer : "php composer.phar update" à la racine de l'application
567 156 Etienne Pallier
> Voir : http://book.cakephp.org/3.0/fr/installation.html#rester-a-jour-avec-les-derniers-changements-de-cakephp
568 222 Thibaud Ajas
569 1 Etienne Pallier
* Puis il faut modifier le fichier : ./vendor/cakephp/cakephp/src/View/Helper/PaginatorHelper.php
570 222 Thibaud Ajas
  Ce fichier contient le template de l'helper "paginator" et il faut modifier le tableau "$_defaultConfig" et remplacer les balise "li" par des balises "span".
571 222 Thibaud Ajas
  Enfin dans le même tableau, il faut remplacer la ligne suivante : 
572 222 Thibaud Ajas
> 'current' => '<span class="active"><a href="">{{text}}</a></span>',
573 222 Thibaud Ajas
574 222 Thibaud Ajas
           Par : 
575 222 Thibaud Ajas
576 222 Thibaud Ajas
> 'current' => '<span class="current">{{text}}</span>',
577 222 Thibaud Ajas
578 222 Thibaud Ajas
* Puis il faut vider le cache de l'application (et du navigateur) pour que debug_kit fonctionne.
579 222 Thibaud Ajas
580 222 Thibaud Ajas
581 222 Thibaud Ajas
---
582 222 Thibaud Ajas
583 222 Thibaud Ajas
h2. Pour utiliser php5.6 ET php7.1 sur le même OS (Fonctionne avec Ubuntu 14.04.5 - le 02/05/2017)
584 222 Thibaud Ajas
585 222 Thibaud Ajas
*Installation de php 5.6 et de php 7.1 :*
586 222 Thibaud Ajas
587 222 Thibaud Ajas
<pre>
588 222 Thibaud Ajas
sudo add-apt-repository ppa:ondrej/php
589 222 Thibaud Ajas
sudo apt-get update
590 222 Thibaud Ajas
sudo apt-get install php7.1 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.1-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.1
591 222 Thibaud Ajas
</pre>
592 222 Thibaud Ajas
593 221 Thibaud Ajas
*Comment changer de version :*
594 221 Thibaud Ajas
595 221 Thibaud Ajas
_*Depuis php5.6 vers php7.1 :*_
596 167 Alexandre Cases
597 167 Alexandre Cases
<pre>
598 170 Alexandre Cases
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
599 171 Alexandre Cases
sudo update-alternatives --set php /usr/bin/php7.0
600 169 Alexandre Cases
</pre>
601 169 Alexandre Cases
602 169 Alexandre Cases
_*Depuis php7.1 vers php5.6 :*_
603 169 Alexandre Cases
604 169 Alexandre Cases
<pre>
605 169 Alexandre Cases
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
606 1 Etienne Pallier
sudo update-alternatives --set php /usr/bin/php5.6
607 173 Alexandre Cases
</pre>
608 173 Alexandre Cases
609 173 Alexandre Cases
---
610 173 Alexandre Cases
611 1 Etienne Pallier
h2. Rappel d'intervention par mail
612 170 Alexandre Cases
613 170 Alexandre Cases
* Il faut définir un attribut *"rappel" de type "int"* dans la table suivis.
614 170 Alexandre Cases
Cet attribut peut avoir *4 valeurs* : 
615 167 Alexandre Cases
<pre>
616 167 Alexandre Cases
0 ==> Pas d'envoi de rappel programmé
617 167 Alexandre Cases
1 ==> Rappel programmé 1 mois avant
618 201 Thibaud Ajas
2 ==> Rappel programmé 15 jours avant
619 1 Etienne Pallier
3 ==> Rappel programmé 2 jours avant
620 211 Thibaud Ajas
</pre>
621 1 Etienne Pallier
622 211 Thibaud Ajas
* Dans *l'AppController*, il faut définir une fonction "rappelIntervention()" qui :
623 211 Thibaud Ajas
- Parcourt tous les suivis et garde ceux qui ont une date inferieur à 1 mois de la date du jour et qui ont un attribut "rappel" à "0".
624 211 Thibaud Ajas
- Met cette attribut à 1
625 211 Thibaud Ajas
- 
626 211 Thibaud Ajas
627 211 Thibaud Ajas
...........................
628 211 Thibaud Ajas
629 211 Thibaud Ajas
* Dans *l'UsersController*, il faut executer la fonction précédente une fois que l'utilisateur est connecté (dans fonction login()).
630 211 Thibaud Ajas
631 211 Thibaud Ajas
---
632 211 Thibaud Ajas
633 263 Etienne Pallier
---
634 263 Etienne Pallier
635 328 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}AMELIORATIONS A VENIR (TODO)%
636 1 Etienne Pallier
637 336 Etienne Pallier
h3. *1) POUR LE CODE SOURCE*
638 1 Etienne Pallier
639 341 Etienne Pallier
Bien maîtriser les 4 étapes qui s'enchainent lors de l'appel d'une action :
640 1 Etienne Pallier
641 1 Etienne Pallier
642 343 Etienne Pallier
*a) Avant l'appel d'une action d'un controleur*
643 1 Etienne Pallier
644 331 Etienne Pallier
Ex: src/MaterielsController/isAuthorized()
645 331 Etienne Pallier
646 328 Etienne Pallier
Définir qui a droit à quoi dans src/<Model>Controller/isAuthorized(),
647 329 Etienne Pallier
action par action, et à l'intérieur d'une action, role par role
648 328 Etienne Pallier
649 330 Etienne Pallier
Respecter cette structure de code :
650 330 Etienne Pallier
<pre>
651 330 Etienne Pallier
switch ($action) {
652 329 Etienne Pallier
653 330 Etienne Pallier
   case 'action1':
654 330 Etienne Pallier
      switch ($role) :
655 330 Etienne Pallier
         case USER:
656 330 Etienne Pallier
         case RESP:
657 330 Etienne Pallier
         case ADMIN:
658 330 Etienne Pallier
         ...
659 330 Etienne Pallier
660 330 Etienne Pallier
   case 'action2':
661 330 Etienne Pallier
      switch ($role) :
662 330 Etienne Pallier
663 1 Etienne Pallier
   ...
664 1 Etienne Pallier
</pre>
665 1 Etienne Pallier
666 330 Etienne Pallier
667 343 Etienne Pallier
*b) Dans le traitement de l'action, avant la vue*
668 336 Etienne Pallier
669 331 Etienne Pallier
Ex: src/MaterielsController/add()
670 331 Etienne Pallier
671 1 Etienne Pallier
Définir TOUTES les données dont la vue aura besoin, dans src/<Model>Controller/<action()>
672 1 Etienne Pallier
La vue ne doit faire AUCUN traitement, elle doit se contenter d'afficher les données qu'on lui passe.
673 331 Etienne Pallier
674 333 Etienne Pallier
En particulier, selon le role (profil) actif, positionner ces tableaux (listes de champs pour dire à quels champs ce role à accès et dans quelles conditions (lecture seule, obligatoire, ...) :
675 1 Etienne Pallier
676 333 Etienne Pallier
 * $hiddenFields = [ fields list ]
677 333 Etienne Pallier
 * $readonlyFields = [ fields list ]
678 327 Etienne Pallier
 * $mandatoryFields = [ fields list ]
679 1 Etienne Pallier
 * $defaultValueForFields = [ field1 => value1, field2 => value2, ..., fieldN => valueN ]
680 1 Etienne Pallier
681 333 Etienne Pallier
Passer ensuite ces listes à la vue avec set()
682 1 Etienne Pallier
683 343 Etienne Pallier
*c) Dans la vue correspondant à l'action*
684 1 Etienne Pallier
685 331 Etienne Pallier
Ex: dans src/Template/Materiels/add.ctp
686 331 Etienne Pallier
687 328 Etienne Pallier
Dans src/Template/<Model>/<action.ctp>
688 1 Etienne Pallier
689 1 Etienne Pallier
Afficher les données passées par le controleur pour cette action
690 1 Etienne Pallier
691 1 Etienne Pallier
(faire le moins de traitements possibles, seulement de l'affichage)
692 1 Etienne Pallier
693 337 Etienne Pallier
En particulier, la vue affichera les champs (fields) un par un, en utilisant une fonction displayField() qui tiendra compte automatiquement des listes définies à l'étape précédente :
694 337 Etienne Pallier
$hiddenFields, $readonlyFields, $mandatoryFields, et $defaultValueForField
695 335 Etienne Pallier
696 340 Etienne Pallier
697 343 Etienne Pallier
*d) (TODO) 4ème étape à envisager : ce qui se passe APRES que l'action a été exécutée*
698 340 Etienne Pallier
699 341 Etienne Pallier
* La sauvegarde dans la BD (voir aussi beforeSave())
700 340 Etienne Pallier
* Quelle redirection vers quelle vue ?
701 340 Etienne Pallier
702 336 Etienne Pallier
h3. *2) POUR LES TESTS*
703 336 Etienne Pallier
704 338 Etienne Pallier
Les tests sont dans tests/TestCase/
705 338 Etienne Pallier
706 338 Etienne Pallier
Ils sont organisés par type :
707 338 Etienne Pallier
708 338 Etienne Pallier
* Controller/
709 338 Etienne Pallier
* Model/
710 338 Etienne Pallier
* View/
711 338 Etienne Pallier
712 339 Etienne Pallier
La plupart des tests sont dans Controller, mais il faudra aussi faire quelques tests de Model et de View...
713 338 Etienne Pallier
714 338 Etienne Pallier
Concernant les tests liés aux controleurs (dans Controller/), ils sont organisés par controleur :
715 338 Etienne Pallier
716 338 Etienne Pallier
* EmpruntsControllerTest.php
717 338 Etienne Pallier
* MaterielsControllerTest.php
718 338 Etienne Pallier
* PagesControllerTest.php
719 338 Etienne Pallier
* SuivisControllerTest.php
720 338 Etienne Pallier
* UsersControllerTest.php
721 338 Etienne Pallier
722 1 Etienne Pallier
Prenons l'exemple des tests du controleur de Materiels (MaterielsControllerTest.php)
723 339 Etienne Pallier
724 346 Etienne Pallier
Il faudrait organiser chaque test de controleur en 3 ou 4 parties correspondant aux 4 étapes présentées au point "1) POUR LE CODE SOURCE" ci-dessus :
725 1 Etienne Pallier
726 345 Etienne Pallier
*a) Avant l'appel d'une action d'un controleur :* 
727 1 Etienne Pallier
728 346 Etienne Pallier
Tester qui a le droit de faire quoi
729 1 Etienne Pallier
730 345 Etienne Pallier
*b+c) Dans la vue correspondant à l'action :*
731 344 Etienne Pallier
732 346 Etienne Pallier
Tester que la vue a bien été générée comme il faut pour cette action, et que les listes $readonlyFields, $mandatoryFields, ... sont bien remplies comme il faut
733 1 Etienne Pallier
734 1 Etienne Pallier
*d) Après la réalisation de l'action :*
735 1 Etienne Pallier
736 346 Etienne Pallier
Tester que l'action attendue a bien été réalisée et qu'on est bien sur la vue de redirection prévue
737 346 Etienne Pallier
738 346 Etienne Pallier
Exemples :
739 346 Etienne Pallier
740 346 Etienne Pallier
741 346 Etienne Pallier
testUnauthenticatedUserCanLogin() : tester qu'un user non logué peut appeler l'action "login", et se trouve bien ensuite sur la page accueil
742 346 Etienne Pallier
743 346 Etienne Pallier
testUnauthenticatedUserCanViewAboutPage() : tester qu'un user non logué peut voir la page "about"
744 346 Etienne Pallier
745 346 Etienne Pallier
testUnauthenticatedUserCannotDoAnythingElse() : tester qu'un user non logué ne peut voir que les pages "accueil" et "about", et rien d'autre
746 346 Etienne Pallier
747 346 Etienne Pallier
testAuthenticatedUserCanLogout() : tester qu'un user logué peut se déloguer et atteint bien la page de login
748 346 Etienne Pallier
749 346 Etienne Pallier
750 347 Etienne Pallier
*Tests spécifiques pour le controleur Materiels (les tests doivent être organisés PAR ACTION) :*
751 346 Etienne Pallier
752 348 Etienne Pallier
testOnMaterielsActionViewCanBeDoneByAll() : tester que tout le monde peut voir un matériel
753 348 Etienne Pallier
754 346 Etienne Pallier
testOnMaterielsActionAddCanBeDoneByAll() : tester que tout le monde peut créer un matériel, sans toutefois voir les mêmes champs (et pas dans les mêmes conditions), et vérifier que l'ajout d'un matériel a bien été fait et qu'on arrive sur la vue détaillée du matériel (oui, tout ça doit être testé, les 4 étapes citées plus haut, et cela pour tous les profils)
755 1 Etienne Pallier
756 348 Etienne Pallier
testOnMaterielsActionEditCanBeDoneByXXXWithConditions() : tester que selon les profils, on ne peut pas éditer les mêmes matériels (USER doit être owner, RESP doit appartenir au même groupe thématique ou métier, ...)
757 1 Etienne Pallier
758 348 Etienne Pallier
759 348 Etienne Pallier
760 348 Etienne Pallier
761 327 Etienne Pallier
762 314 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}HOWTO (nouvelle version avec CakePhp3)%
763 314 Etienne Pallier
764 319 Etienne Pallier
* *Champ facultatif/obligatoire : Comment rendre facultatif ou obligatoire un champ, et définir les vérifications à faire sur ce champ ?*
765 1 Etienne Pallier
=> src/Model/Table/<Model>Table.php
766 1 Etienne Pallier
ex : src/Model/Table/MaterielsTable.php pour définir les règles sur les champs de la table "materiels"
767 317 Etienne Pallier
768 325 Etienne Pallier
* *Où définir les éléments passés à une vue (c'est à dire à une action) ?*
769 323 Etienne Pallier
=> src/Controller/<Model>Controller/nom_de_la_vue_ou_action()
770 323 Etienne Pallier
ex : src/Controller/MaterielsController/edit() pour définir (avec set()) les éléments passés à la vue "edit" des materiels
771 321 Etienne Pallier
772 318 Etienne Pallier
* *ACL* : 
773 320 Etienne Pallier
774 325 Etienne Pallier
 * *ACL1 : Comment définir qui a droit de faire quelles actions (c'est à dire qui a le droit d'accéder à quelles vues) ?*
775 1 Etienne Pallier
=> Régles générales par défaut pour tous les controleurs : src/Controller/AppController.php/isAuthorized()
776 326 Etienne Pallier
(héritage de Cake\Controller\Component/AuthComponent/isAuthorized())
777 326 Etienne Pallier
(cf https://book.cakephp.org/3.0/fr/controllers/components/authentication.html et https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html)
778 1 Etienne Pallier
_Voir aussi beforeFilter()_
779 317 Etienne Pallier
=> Régles pour un controleur donné : src/Controller/<Model>Controller.php/isAuthorized()
780 317 Etienne Pallier
781 318 Etienne Pallier
 * *ACL2 : Une fois qu'on est dans une vue, comment définir qui a droit de voir quels éléments de la vue ?*
782 317 Etienne Pallier
=> src/Template/<Model>/nom_de_la_vue.ctp
783 317 Etienne Pallier
ex : src/Template/Materiels/edit.ctp pour les règles concernant la vue "edit" des materiels
784 314 Etienne Pallier
785 315 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}HOWTO (ancienne version LabInvent 1.3 avec CakePhp2)%
786 263 Etienne Pallier
787 263 Etienne Pallier
*_Attention, ce howto est sans doute obsolète car il concerne l'ancienne version LabInvent 1.3 avec CakePhp2, mais il contient sûrement des conseils encore bien utiles_*
788 263 Etienne Pallier
789 264 Etienne Pallier
Ce document est un HOWTO, c'est à dire un guide pour savoir "comment faire quoi".
790 264 Etienne Pallier
Il donne des solutions à différents types de besoins ou problèmes, et explique aussi "où trouver quoi".
791 263 Etienne Pallier
792 263 Etienne Pallier
793 264 Etienne Pallier
* *VERSION DE CAKEPHP*
794 263 Etienne Pallier
795 263 Etienne Pallier
Version de cakephp ?
796 263 Etienne Pallier
Configure::version(); // 2.1.3
797 263 Etienne Pallier
Et aussi : fichier cakephp/lib/Cake/VERSION.txt
798 263 Etienne Pallier
799 263 Etienne Pallier
800 264 Etienne Pallier
* *CYCLE DE DEVELOPPEMENT A SUIVRE (11 commandements)*
801 263 Etienne Pallier
802 263 Etienne Pallier
Je veux apporter un changement (correction ou evolution) au projet, comment dois-je faire ?
803 263 Etienne Pallier
804 263 Etienne Pallier
1) Incrementer la version du projet, a la fin du fichier cakephp/app/View/Layouts/default.ctp, et mettre à jour la date
805 263 Etienne Pallier
806 263 Etienne Pallier
2) Selectionner le changement a apporter (une demande) dans le Redmine du projet (https://projects.irap.omp.eu/projects/inventirap) :
807 263 Etienne Pallier
- soit depuis la liste des demandes : onglet Demandes
808 263 Etienne Pallier
- soit depuis la roadmap : onglet Roadmap, cocher la case "Anomalie", cliquer sur Appliquer, puis "version 1.3" (la version en cours depuis fin 2012)
809 263 Etienne Pallier
Commencer de préférence par les "anomalies" parmi celles qui ont la plus haute priorité (et faire les "évolutions" dans un 2ème temps).
810 263 Etienne Pallier
Choisir une demande et cliquer dessus pour aller sur sa fiche detaillee et voir le travail a faire.
811 263 Etienne Pallier
Cliquer sur "mettre a jour", selectionner le statut "En cours", modifier eventuellement d'autres champs..., puis cliquer sur "Soumettre".
812 263 Etienne Pallier
Noter l'URL de cette fiche (par exemple : https://projects.irap.omp.eu/issues/1050)
813 263 Etienne Pallier
NB : Si la demande n'existe pas encore, la creer :
814 263 Etienne Pallier
- cliquer sur l'onglet "Nouvelle demande"
815 263 Etienne Pallier
- Selectionner "Anomalie" ou "Evolution"
816 263 Etienne Pallier
- Positionner le statut a "En cours" si on veut travailler aussitot dessus (sinon, laisser a "Nouveau")
817 263 Etienne Pallier
- Completer le reste de la fiche de demande (mettre "Assigne a" a "<<moi>>", choisir la version cible "version 1.3" ou "version 1.4", ...)
818 263 Etienne Pallier
- cliquer sur le bouton "Creer"
819 263 Etienne Pallier
820 263 Etienne Pallier
3) Verifier que cette nouvelle demande apparait bien dans la roadmap (cliquer sur onglet "Roadmap", ..., puis version 1.3)
821 263 Etienne Pallier
822 263 Etienne Pallier
ÉTAPE OPTIONNELLE MAIS FORTEMENT CONSEILLÉE :
823 263 Etienne Pallier
4) Ecrire un test qui vérifie que cette fonctionnalité ne marche pas encore (bug) ou bien n'est pas encore implémentée
824 263 Etienne Pallier
On utilise ici l'approche TDD (Test Driven Development)
825 263 Etienne Pallier
Ce test ne devrait pas passer (il est au rouge) ; il passera plus tard, quand on aura écrit le code nécessaire.
826 263 Etienne Pallier
Bien sur, c'est dans la mesure du possible, car on ne peut pas TOUT tester.
827 263 Etienne Pallier
Dans tous les cas, il faut ecrire un test qui s'approche le plus possible de la réalité à tester.
828 263 Etienne Pallier
Voir pour cela la section "TESTS" (à la fin de ce document)
829 263 Etienne Pallier
830 263 Etienne Pallier
5) Faire les changements necessaires dans le code Php
831 263 Etienne Pallier
Si ce changement implique aussi un changement dans la base de donnees,
832 263 Etienne Pallier
copier le script SQL correspondant à ce changement dans un fichier database/update/db-update-YYYY-MM-DD.sql
833 263 Etienne Pallier
portant la date du jour (voir des exemples dans database/update/old/).
834 263 Etienne Pallier
Plus tard, il faudra penser à intégrer ce changement dans le script general de creation de la BDD database/BDD_IRAP.sql
835 263 Etienne Pallier
(et/ou éventuellement les fichiers Insert_TablesFunct.sql, Insert_Users.sql, et Upd_TableConstraints.sql)
836 263 Etienne Pallier
et donc deplacer le script de modification database/update/db-update-YYYY-MM-DD.sql dans database/update/old/db-update-YYYY-MM-DD.sql
837 263 Etienne Pallier
838 263 Etienne Pallier
6) Tester manuellement ce changement jusqu'a ce qu'il soit totalement OK
839 263 Etienne Pallier
a) faire quelques tests manuels
840 263 Etienne Pallier
b) Le test écrit à l'étape (4) doit maintenant passer (il est au vert).
841 263 Etienne Pallier
Il doit être inclus dans l'ensemble des tests accessibles par le lien "AllTests".
842 263 Etienne Pallier
c) Test de non régression : afin de s'assurer que cette modification du code n'entraîne aucune régression sur le reste du code, 
843 263 Etienne Pallier
tous les autres tests écrits avant doivent aussi passer (vert) : pour cela, exécuter l'url /test.php?case=AllTests
844 263 Etienne Pallier
845 263 Etienne Pallier
7) Compléter le fichier /README.txt, section HISTORIQUE DES VERSIONS (fichier situé à la racine du projet)
846 263 Etienne Pallier
Y mettre le même commentaire que ce que tu mettras lors du commit
847 263 Etienne Pallier
848 263 Etienne Pallier
8) Mettre a jour TON code (en mode console, "svn update" depuis la racine du projet, ou bien depuis Eclipse, clic droit sur le projet, "Team/Update") 
849 1 Etienne Pallier
C'est important, au cas ou quelqu'un d'autre aurait fait des modifs (avant ou en meme temps que toi), et pour etre bien sur d'avoir la derniere version
850 1 Etienne Pallier
851 263 Etienne Pallier
9) Faire un "commit" du code, en collant dans le commentaire l'URL de la demande realisee (exemple : https://projects.irap.omp.eu/issues/1050)
852 263 Etienne Pallier
853 263 Etienne Pallier
10) Fermer la demande sur redmine
854 263 Etienne Pallier
Sur la fiche detaillee, cliquer sur "Mettre a jour", changer le statut a "ferme", changer "% realise" a 100%, (copier l'URL de la fiche), cliquer sur Soumettre
855 263 Etienne Pallier
856 263 Etienne Pallier
11) Si c'est un changement important, le répercuter sur le site officiel 
857 263 Etienne Pallier
Le changement est important si c'est une anomalie ou bien si c'est une évolution attendue.
858 263 Etienne Pallier
Demander alors au service informatique de le répercuter sur l'installation officielle (faire un "svn update", mail à loic.jahan@irap.omp.eu).  
859 263 Etienne Pallier
Si ce changement implique aussi la base de données, donner la directive que le fichier database/update/db-update-YYYY-MM-DD.sql doit être exécuté sur leur BDD.
860 263 Etienne Pallier
Si ce changement impliquer une modification du fichier de configuration labinvent.php, donner la procédure à suivre dans le mail.
861 263 Etienne Pallier
862 263 Etienne Pallier
863 263 Etienne Pallier
864 1 Etienne Pallier
865 264 Etienne Pallier
* *CORRIGER UNE ERREUR, RESOUDER UN PROBLEME, COMMENT DEBOGUER (DEBUG)*
866 264 Etienne Pallier
867 263 Etienne Pallier
Cakephp vous affiche une erreur, mais vous ne savez pas d'ou vient le probleme.
868 263 Etienne Pallier
Don't panic.
869 263 Etienne Pallier
En general, un bon moyen de le savoir est de lire le fichier de log des erreurs
870 263 Etienne Pallier
dans cakephp/app/tmp/logs/error.log
871 263 Etienne Pallier
872 263 Etienne Pallier
Dans le dossier logs, vous trouverez d'autres logs utiles :
873 263 Etienne Pallier
- labinvent.log
874 263 Etienne Pallier
- debug.log (pas sur que ce fichier soit encore utilisé...)
875 263 Etienne Pallier
876 263 Etienne Pallier
Remarque :
877 263 Etienne Pallier
$this->log('Something broke');
878 263 Etienne Pallier
==> écrit dans cakephp/app/tmp/logs/ :
879 263 Etienne Pallier
- error.log
880 263 Etienne Pallier
- inventirap.log
881 263 Etienne Pallier
882 263 Etienne Pallier
883 263 Etienne Pallier
884 264 Etienne Pallier
* *OU EST QUOI (WHERE IS WHAT) ?*
885 263 Etienne Pallier
886 263 Etienne Pallier
- OU mettre a jour la VERSION du soft (AVANT CHAQUE COMMIT) ?
887 263 Etienne Pallier
En attendant mieux, on fait cela a la fin du fichier cakephp/app/View/Layouts/default.ctp
888 263 Etienne Pallier
889 263 Etienne Pallier
- OU EST LA PAGE GENERALE (qui contient tous les elements) ? : cakephp/app/View/Layouts/default.ctp
890 263 Etienne Pallier
891 263 Etienne Pallier
- OU EST LA PAGE D'ACCUEIL ? : app/View/Pages/home.ctp
892 263 Etienne Pallier
893 263 Etienne Pallier
- OU SONT LES MENUS ? : app/View/Elements/
894 263 Etienne Pallier
	- menu general + Recherche generale : menu.ctp
895 263 Etienne Pallier
	- sous le menu general, et sous le champ "Recherche", titre du modele a ajouter : menu_index.ctp
896 263 Etienne Pallier
897 263 Etienne Pallier
- OU EST LA FEUILLE DE STYLE CSS ? : cakephp/app/webroot/css/inventirap.css
898 263 Etienne Pallier
899 263 Etienne Pallier
- OU EST DEFINIE LA PAGINATION ?
900 263 Etienne Pallier
Dans le Controleur
901 263 Etienne Pallier
Ex : la pagination des materiels est definie dans app/Controller/MaterielsController.php 
902 263 Etienne Pallier
	public $paginate = array(
903 263 Etienne Pallier
		'limit' => 50,
904 263 Etienne Pallier
		'order' => array('Materiel.id' => 'desc'));
905 263 Etienne Pallier
906 263 Etienne Pallier
- OU SONT LES INFOS CONCERNANT UNE ENTITE quelconque (Materiel, Emprunt, Suivi, Utilisateur) ?
907 263 Etienne Pallier
par exemple, ou trouver les infos sur l'entite "Materiel" ? : Aller dans cakephp/app/
908 263 Etienne Pallier
- le Modele : Model/Materiel.php
909 263 Etienne Pallier
- le Controleur : Controller/MaterielsController.php
910 1 Etienne Pallier
- les Vues (templates) : View/Materiels
911 1 Etienne Pallier
	- Vue de consultation : scaffold.view.ctp
912 263 Etienne Pallier
	- Vue d'ajout (add) et edition (edit) : scaffold.form.ctp
913 263 Etienne Pallier
	- vue de liste : index.ctp
914 263 Etienne Pallier
915 263 Etienne Pallier
- OU SONT DEFINIS LES ROLES (ACL) ?
916 263 Etienne Pallier
Dans app/Model/Utilisateur.php :
917 263 Etienne Pallier
	private $acceptedRoles = array ('Utilisateur', 'Responsable', 'Administration', 'Super Administrateur');
918 263 Etienne Pallier
	public function getAuthenticationLevelFromRole($role) {
919 263 Etienne Pallier
		if ($role == 'Utilisateur')
920 263 Etienne Pallier
			return 1;
921 263 Etienne Pallier
		elseif ($role == 'Responsable')
922 263 Etienne Pallier
			return 2;
923 263 Etienne Pallier
		elseif ($role == 'Administration')
924 263 Etienne Pallier
			return 3;
925 263 Etienne Pallier
		elseif ($role == 'Super Administrateur')
926 263 Etienne Pallier
			return 4;
927 263 Etienne Pallier
		return 0;
928 263 Etienne Pallier
	}
929 263 Etienne Pallier
930 263 Etienne Pallier
931 263 Etienne Pallier
932 264 Etienne Pallier
* *WORKFLOW des materiels*
933 264 Etienne Pallier
934 263 Etienne Pallier
Le statut d'un materiel change selon le workflow suivant :
935 263 Etienne Pallier
1) Un utilisateur lambda le cree (n'importe qui du labo) --> CREATED
936 263 Etienne Pallier
2) L'Administration le valide (apres avoir eventuellement complete la fiche) --> VALIDATED
937 263 Etienne Pallier
3) Un utilisateur lambda demande a l'archiver --> TOBEARCHIVED
938 263 Etienne Pallier
4) L'Administration le sort de l'inventaire --> ARCHIVED
939 263 Etienne Pallier
940 263 Etienne Pallier
Notes : 
941 263 Etienne Pallier
- Dans l'ideal, le materiel est premierement cree par l'utilisateur concerne,
942 263 Etienne Pallier
puis mis a jour par l'administration au moment de la commande (puis validé)
943 263 Etienne Pallier
- L'administration peut toujours retrograder le statut d'un materiel (ce qui revient a annuler un changement de statut) 
944 263 Etienne Pallier
945 263 Etienne Pallier
946 263 Etienne Pallier
947 264 Etienne Pallier
* *STRUCTURE GENERALE D'UNE PAGE WEB (TEMPLATE) = default.ctp*
948 264 Etienne Pallier
949 263 Etienne Pallier
app/View/Layouts/default.ctp contient la structure suivante :
950 263 Etienne Pallier
951 1 Etienne Pallier
	<div id="container">
952 1 Etienne Pallier
		<div id="header">
953 263 Etienne Pallier
			LE HEADER AVEC SON LOGO
954 263 Etienne Pallier
			<div class="user">
955 263 Etienne Pallier
				BIENVENUE $userName (ou invité)
956 263 Etienne Pallier
			</div>
957 263 Etienne Pallier
		</div>
958 263 Etienne Pallier
		<div id="content">
959 263 Etienne Pallier
			<?php echo $this->Session->flash(); ?>
960 1 Etienne Pallier
			<?php echo $this->fetch('content'); ?>
961 1 Etienne Pallier
		</div>
962 263 Etienne Pallier
		<div id="footer">
963 263 Etienne Pallier
			LE FOOTER
964 263 Etienne Pallier
		</div>
965 263 Etienne Pallier
	</div>
966 263 Etienne Pallier
967 263 Etienne Pallier
La DIV "content" insère 2 contenus :
968 263 Etienne Pallier
	- le message flash éventuel (qui dit si une opération demandée s'est bien passée ou pas...)
969 1 Etienne Pallier
	- la section "content", qui n'est autre que le coeur de la page
970 1 Etienne Pallier
	
971 263 Etienne Pallier
La page d'ACCUEIL n'est qu'un "content" parmi d'autres.
972 263 Etienne Pallier
Elle se trouve dans app/View/Pages/home.ctp
973 263 Etienne Pallier
(elle est affichée par le controleur de pages nommé PagesController)
974 263 Etienne Pallier
975 263 Etienne Pallier
976 263 Etienne Pallier
977 264 Etienne Pallier
* *COMMENT VOIR LES REQUETES SQL FAITES PAR CAKEPHP ?*
978 264 Etienne Pallier
979 263 Etienne Pallier
Dans le layout general (cakephp/app/View/Layouts/default.php), ajouter cette ligne :
980 263 Etienne Pallier
	<?php echo $this->element('SQL_DUMP'); ?>
981 263 Etienne Pallier
Vous devez aussi vous assurer que vous etes bien en mode DEBUG=2 (et non pas 0 ou 1)
982 263 Etienne Pallier
dans le fichier de configuration Config/labinvent.php (ou bien dans le fichier Config/core.php)
983 263 Etienne Pallier
984 263 Etienne Pallier
985 263 Etienne Pallier
986 264 Etienne Pallier
* *OU EST FAIT LE CHARGEMENT DU FICHIER CONFIG database.php ?*
987 264 Etienne Pallier
988 263 Etienne Pallier
lib/Cake/Model/ConnectionManager.php (fonction _init())
989 263 Etienne Pallier
Ce fichier fait partie de la librairie standard de CakePhp. Il ne faut donc pas y toucher.
990 263 Etienne Pallier
A l'origine, j'avais (EP) changé ici le nom du fichier config "database.php" en "config.php",
991 263 Etienne Pallier
ce qui marchait très très bien...
992 263 Etienne Pallier
MAIS il ne vaut mieux pas modifier le comportement par défaut de cakephp,
993 263 Etienne Pallier
car si un jour on change de version de cakephp, ça ne marchera plus.
994 263 Etienne Pallier
995 263 Etienne Pallier
996 263 Etienne Pallier
997 264 Etienne Pallier
* *CREATION ET GESTION DU NOUVEAU FICHIER DE CONFIG labinvent.php*
998 264 Etienne Pallier
999 263 Etienne Pallier
(cf http://book.cakephp.org/2.0/fr/development/configuration.html#loading-configuration-files)
1000 263 Etienne Pallier
1001 263 Etienne Pallier
1) J'ai créé le nouveau fichier de config dans app/Config/ (par exemple labinvent.php)
1002 263 Etienne Pallier
Ce fichier doit au minimum contenir un tableau nommé $config :
1003 263 Etienne Pallier
	$config = array(
1004 263 Etienne Pallier
			'labName' => 'IRAP',
1005 263 Etienne Pallier
			...
1006 263 Etienne Pallier
	);
1007 263 Etienne Pallier
 
1008 263 Etienne Pallier
2) Charger ce nouveau fichier de config au démarrage
1009 263 Etienne Pallier
Pour cela, ajouter cette ligne dans app/Config/bootstrap.php :
1010 263 Etienne Pallier
	Configure::load('labinvent');
1011 263 Etienne Pallier
1012 263 Etienne Pallier
3) Lire (ou même modifier) les paramètres de ce fichier de config, depuis N'IMPORTE OU (controleur, modèle, vue) :
1013 263 Etienne Pallier
		debug(Configure::version()); // pour afficher la version de Cakephp
1014 1 Etienne Pallier
		debug(Configure::read()); // tout lire
1015 1 Etienne Pallier
		debug(Configure::read('localisation')); // le tableau $localisation
1016 263 Etienne Pallier
		$labName = strtoupper(Configure::read('localisation.labNameShort'));
1017 263 Etienne Pallier
		debug(Configure::read('localisation.labName'));
1018 263 Etienne Pallier
		if (Configure::read('USE_LDAP')) ...
1019 263 Etienne Pallier
		if (Configure::read('debug') > 0 ) ...
1020 263 Etienne Pallier
On peut même modifier la valeur d'un paramètre dynamiquement comme ceci :
1021 263 Etienne Pallier
		Configure::write('debug',2)
1022 263 Etienne Pallier
C'est d'ailleurs ce qui est fait dans app/Config/core.php
1023 263 Etienne Pallier
1024 263 Etienne Pallier
1025 263 Etienne Pallier
4) Penser à modifier le script d'installation install/installation.sh pour qu'il prenne en compte ce nouveau fichier
1026 1 Etienne Pallier
1027 263 Etienne Pallier
1028 263 Etienne Pallier
1029 263 Etienne Pallier
1030 264 Etienne Pallier
* *LOCALISATION (adapatation du logiciel à l'entité locale)*
1031 263 Etienne Pallier
1032 263 Etienne Pallier
Vues (Pages) impactées :
1033 263 Etienne Pallier
- app/View/Layouts/default.ctp (template)
1034 263 Etienne Pallier
- app/View/Pages/home.ctp (Accueil)
1035 263 Etienne Pallier
- app/View/Pages/about.ctp (A propos)
1036 263 Etienne Pallier
1037 263 Etienne Pallier
Controleurs impactés :
1038 263 Etienne Pallier
- MaterielsController.php (fonction getLabNumber())
1039 1 Etienne Pallier
1040 1 Etienne Pallier
Documents impactés :
1041 263 Etienne Pallier
- Etiquette
1042 263 Etienne Pallier
- app/View/Documents/admission.ctp (Document d'admission)
1043 263 Etienne Pallier
- app/View/Documents/admission_cnrs.ctp (Document d'admission CNRS)
1044 263 Etienne Pallier
- app/View/Documents/admission_ups.ctp (Document d'admission UPS)
1045 1 Etienne Pallier
1046 263 Etienne Pallier
1047 263 Etienne Pallier
1048 264 Etienne Pallier
* *AJOUTER UNE NOUVELLE PAGE WEB*
1049 264 Etienne Pallier
1050 263 Etienne Pallier
Par exemple, voici ce que j'ai fait pour ajouter la page "about", qui est accessible via l'url https://inventirap.irap.omp.eu/pages/about
1051 263 Etienne Pallier
1) Aller dans app/View/Pages/
1052 263 Etienne Pallier
1) Faire un copier/coller d'une page existante, par exemple infos.ctp, et l'appeler about.ctp
1053 263 Etienne Pallier
2) Remplir cette page avec le contenu souhaité
1054 263 Etienne Pallier
3) Tester que cette page est bien accessible via l'url http://.../pages/about
1055 263 Etienne Pallier
4) Ajouter un lien vers cette page, soit dans le menu outils (app/View/Pages/tools.ctp), soit dans le menu général (app/View/Elements/menu.ctp)
1056 263 Etienne Pallier
5) Si cette page ne doit pas être accessible a tout le monde, définir le profil minimum exigé dans app/Controller/PagesController.php, en ajoutant une ligne dans le tableau $minProfileAllowedForPage
1057 263 Etienne Pallier
1058 263 Etienne Pallier
1059 263 Etienne Pallier
1060 264 Etienne Pallier
* *LOGIN workflow*
1061 263 Etienne Pallier
1062 263 Etienne Pallier
Controller/UtilisateursController/login() : 
1063 263 Etienne Pallier
; cherche l'utilisateur dans la table utilisateurs pour voir si c'est un user SPECIAL ou bien un user quelconque
1064 263 Etienne Pallier
; appelle Controller/Component/LdapAuthComponent/connection() et getUserName($ldapAuthentication)
1065 263 Etienne Pallier
1066 263 Etienne Pallier
Controller/Component/LdapAuthComponent : contient les 2 méthodes 
1067 263 Etienne Pallier
	- connection() : appelle Model/LdapConnection/ldapAuthentication($login, $password)
1068 263 Etienne Pallier
	- getUserName() : appelle Model/LdapConnection/getUserAttributes($ldapAuthentication)
1069 263 Etienne Pallier
1070 263 Etienne Pallier
Page d'accueil = View/Pages/home.ctp
1071 263 Etienne Pallier
(Controleur des pages simples = Controller/PagesController.php)
1072 263 Etienne Pallier
1073 263 Etienne Pallier
1074 263 Etienne Pallier
1075 264 Etienne Pallier
* *LOG*
1076 264 Etienne Pallier
1077 263 Etienne Pallier
$this->log('Something broke');
1078 263 Etienne Pallier
==> écrit dans cakephp/app/tmp/logs/ :
1079 263 Etienne Pallier
- error.log
1080 263 Etienne Pallier
- inventirap.log
1081 263 Etienne Pallier
1082 263 Etienne Pallier
1083 263 Etienne Pallier
1084 264 Etienne Pallier
* *GOOGLE ANALYTICS INTEGRATION*
1085 263 Etienne Pallier
1086 263 Etienne Pallier
adapté de http://blog.janjonas.net/2010-01-31/cakephp-google-analytics-integration
1087 1 Etienne Pallier
1088 263 Etienne Pallier
1) Copier ce code dans app/View/Elements/google-analytics.ctp :
1089 263 Etienne Pallier
<?php
1090 263 Etienne Pallier
$gaCode = Configure::read('google-analytics.tracker-code');
1091 263 Etienne Pallier
if ($gaCode) {
1092 263 Etienne Pallier
$googleAnalytics = <<<EOD
1093 263 Etienne Pallier
<script type="text/javascript">
1094 263 Etienne Pallier
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
1095 263 Etienne Pallier
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
1096 263 Etienne Pallier
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
1097 263 Etienne Pallier
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
1098 263 Etienne Pallier
1099 263 Etienne Pallier
  ga('create', 'UA-45668893-3', 'omp.eu');
1100 263 Etienne Pallier
  ga('send', 'pageview');
1101 263 Etienne Pallier
1102 263 Etienne Pallier
</script>
1103 263 Etienne Pallier
EOD;
1104 263 Etienne Pallier
echo $googleAnalytics;
1105 263 Etienne Pallier
}
1106 263 Etienne Pallier
?>
1107 263 Etienne Pallier
1108 263 Etienne Pallier
/* ANCIEN CODE JAVASCRIPT :
1109 263 Etienne Pallier
<script type="text/javascript">
1110 263 Etienne Pallier
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
1111 263 Etienne Pallier
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
1112 263 Etienne Pallier
</script>
1113 263 Etienne Pallier
<script type="text/javascript">
1114 263 Etienne Pallier
try {
1115 1 Etienne Pallier
var pageTracker = _gat._getTracker("$gaCode");
1116 1 Etienne Pallier
pageTracker._trackPageview();
1117 263 Etienne Pallier
} catch(err) {}</script>
1118 263 Etienne Pallier
*/
1119 263 Etienne Pallier
1120 263 Etienne Pallier
1121 263 Etienne Pallier
1122 263 Etienne Pallier
2) Inclure le view element dans app/View/Layouts/default.ctp (juste avant </body>):
1123 263 Etienne Pallier
<?php echo $this->element('google-analytics'); ?>
1124 1 Etienne Pallier
1125 1 Etienne Pallier
3) Définir le tracker code dans la configuration (/app/Config/core.php):
1126 263 Etienne Pallier
Configure::write('google-analytics.tracker-code', false); // disables Google Analytics
1127 263 Etienne Pallier
Configure::write('google-analytics.tracker-code', 'YOUR-TRACKING-CODE'); // enables Google Analytics
1128 263 Etienne Pallier
1129 263 Etienne Pallier
1130 264 Etienne Pallier
* *GENERALITES*
1131 263 Etienne Pallier
1132 263 Etienne Pallier
- URL : http://localhost/inventirapsvn/cakephp/
1133 263 Etienne Pallier
1134 263 Etienne Pallier
- BD admin : http://localhost/phpmyadmin
1135 263 Etienne Pallier
1136 263 Etienne Pallier
- LOG : cakephp/app/tmp/logs/inventirap.log
1137 263 Etienne Pallier
1138 263 Etienne Pallier
- (UPDATE : cd Inventirap/ ; chmod -R 777 ./cakephp/app/tmp/)
1139 263 Etienne Pallier
1140 263 Etienne Pallier
- (SORTIE INVENTAIRE a faire : pc portable DELL (ex Nicolas Andre) - sept 2012 CNES 4017 (carte mere hs))
1141 263 Etienne Pallier
1142 263 Etienne Pallier
- Eclipse config :
1143 263 Etienne Pallier
Setup syntax highlighting for .ctp files:
1144 263 Etienne Pallier
Window > Preferences > General > Appearance > content Types > Text > PHP Content type > Add.. , then put in *.ctp.
1145 263 Etienne Pallier
1146 263 Etienne Pallier
- Cakephp config : cakephp/app/Config/
1147 263 Etienne Pallier
Mode debug ON (pour voir les erreurs et pour vider le cache en cas de changement sur la BD) 
1148 263 Etienne Pallier
core.php : 	Configure::write('debug', 1);
1149 263 Etienne Pallier
1150 263 Etienne Pallier
- Fichier de demarrage :
1151 263 Etienne Pallier
cakephp/index.php (qui pointe sur cakephp/app/webroot/index.php)
1152 263 Etienne Pallier
(Attention, il y a aussi un fichier cakephp/app/index.php qui pointe sur webroot/index.php)
1153 263 Etienne Pallier
(ROOT doit pointer sur le dossier cakephp/)
1154 263 Etienne Pallier
Le fichier execute ensuite est cakephp/lib/Cake/bootstrap.php qui lance ./Core/App.php
1155 263 Etienne Pallier
and so on...
1156 263 Etienne Pallier
1157 263 Etienne Pallier
1158 263 Etienne Pallier
1159 263 Etienne Pallier
1160 264 Etienne Pallier
* *RECHERCHE de materiels*
1161 264 Etienne Pallier
1162 263 Etienne Pallier
3 methodes :
1163 263 Etienne Pallier
- recherche generale (sous le menu general) : cakephp/app/View/Elements/menu.ctp
1164 1 Etienne Pallier
- VUE de recherche : cakephp/app/View/Materiels/find.ctp
1165 1 Etienne Pallier
- ACTION de recherche : cakephp/app/Controller/MaterielsController (methode find())
1166 263 Etienne Pallier
1167 263 Etienne Pallier
1168 263 Etienne Pallier
1169 264 Etienne Pallier
* *ACL (Controle d'acces aux ressources)*
1170 264 Etienne Pallier
1171 263 Etienne Pallier
NB: Cette section n'est sans doute plus très à jour ; sur ce sujet, il est préférable de lire le document docs/userguide/ACL.doc (ou .pdf)
1172 263 Etienne Pallier
1173 263 Etienne Pallier
Synthese sur les droits selon le profil
1174 263 Etienne Pallier
1175 1 Etienne Pallier
Profils (roles), dans le sens du pouvoir croissant :
1176 1 Etienne Pallier
Qq = Utilisateur Quelconque (lambda)
1177 263 Etienne Pallier
Rp = Responsable
1178 263 Etienne Pallier
Ad = Administration
1179 263 Etienne Pallier
Sa = Superadmin
1180 263 Etienne Pallier
1181 263 Etienne Pallier
Actions :
1182 263 Etienne Pallier
C = Create
1183 263 Etienne Pallier
R = Read (voir, consulter)
1184 263 Etienne Pallier
U = Update (mettre a jour)
1185 263 Etienne Pallier
D = Delete (supprimer)
1186 263 Etienne Pallier
V = Valider un materiel CREATED --> passe alors en statut VALIDATED
1187 263 Etienne Pallier
A = Demander l'Archivage d'un materiel VALIDATED --> passe alors en statut TOBEARCHIVED 
1188 263 Etienne Pallier
S = Sortir de l'inventaire (Valider une demande d'archivage d'un materiel TOBEARCHIVED) --> passe alors en statut ARCHIVED 
1189 263 Etienne Pallier
E = Exporter
1190 263 Etienne Pallier
1191 263 Etienne Pallier
Par defaut, le superadmin a acces a TOUT 
1192 263 Etienne Pallier
1193 263 Etienne Pallier
Materiels :
1194 263 Etienne Pallier
- Qq a les droits C, R (sauf champs admin), U (si createur et sauf champs admin), A, D (si CREATED et owner)
1195 263 Etienne Pallier
- Rp a les droits C, R (sauf champs admin), U (sauf champs admin), D (si CREATED), V, A, E
1196 263 Etienne Pallier
- Ad a les droits C, R, U (ssi NOT ARCHIVED), D (si CREATED), V, (A mais inutile car fait directement S sans passer par A), S, E
1197 263 Etienne Pallier
1198 263 Etienne Pallier
Suivis et Emprunts :
1199 263 Etienne Pallier
- Dans tous les cas, on ne doit pas pouvoir emprunter ou suivre un materiel non valide (CREATED)
1200 263 Etienne Pallier
- Qq a les droits C, R, U (si createur), D (si createur)
1201 263 Etienne Pallier
- Rp a les droits C, R, U, D
1202 263 Etienne Pallier
- Ad a les memes droits que Rp
1203 263 Etienne Pallier
1204 263 Etienne Pallier
VUES specifiques :
1205 263 Etienne Pallier
- Acces aux Outils : reserve a Rp et Ad (vue contenant des liens vers differentes ressources telles que utilisateurs, materiels, categories...)
1206 263 Etienne Pallier
- L'administration a une vue resumee sur la page d'accueil (liens directs vers actions a faire)
1207 263 Etienne Pallier
- L'administration a une vue enrichie de la liste des materiels :
1208 263 Etienne Pallier
	- filtres (y-compris sur ARCHIVED)
1209 263 Etienne Pallier
	- export en CSV (pour tableur Excel)
1210 263 Etienne Pallier
	- upgrade du statut (validation et sortie)
1211 263 Etienne Pallier
1212 263 Etienne Pallier
Autres regles (de gestion) importantes :
1213 264 Etienne Pallier
- un materiel non valide (CREATED) peut etre supprime uniquement par le createur de la fiche, le responsable (Roger), et l'administration
1214 264 Etienne Pallier
Idem pour la mise a jour de cette fiche
1215 263 Etienne Pallier
- un materiel valide (VALIDATED) n'est pas supprimable
1216 263 Etienne Pallier
- les champs ADMINISTRATIFS d'un materiel ne sont visibles et modifiables que par l'administration
1217 263 Etienne Pallier
- par defaut, la liste des materiels affiche tous les materiels SAUF ceux qui sont sortis de l'inventaire (ARCHIVED) qui sont donc masques.
1218 263 Etienne Pallier
Il est de toutes facons toujours possible (pour l'administration seulement) de les voir, grace au nouveau filtre "Archives" present sur la liste des materiels
1219 263 Etienne Pallier
- la recherche doit s'effectuer dans TOUS les materiels (y-compris ARCHIVED)
1220 263 Etienne Pallier
1221 263 Etienne Pallier
1222 263 Etienne Pallier
1223 263 Etienne Pallier
1224 264 Etienne Pallier
* *COMMENT CONTOURNER LE LDAP officiel*
1225 264 Etienne Pallier
1226 263 Etienne Pallier
(ATTENTION: CONTENU OBSOLETE A METTRE A JOUR (EP))
1227 263 Etienne Pallier
1228 263 Etienne Pallier
(cf Controller/UtilisateursController.php :	methode login())
1229 263 Etienne Pallier
1230 263 Etienne Pallier
1) Si on veut tester le LDAP, on peut utiliser le LDAP de la Virtual Machine Upsilon (CentOS 6)
1231 263 Etienne Pallier
Dans ce cas, il faut ajouter dans la BD les utilisateurs specifiques suivants :
1232 263 Etienne Pallier
# Ajout d'utilisateurs de TEST (LDAP upsilon)
1233 263 Etienne Pallier
INSERT INTO utilisateurs (nom, login, email, role, groupes_metier_id) VALUES
1234 263 Etienne Pallier
 	('Hillembrand Cedric', 'Cedric', 'Cedric.Hillembrand@irap.omp.eu', 'Super Administrateur', 1),
1235 263 Etienne Pallier
 	('Turner Daniel', 'Daniel', 'Daniel.Turner@irap.omp.eu', 'Administration', 1),
1236 263 Etienne Pallier
 	('Sky Gin', 'Gin', 'Gin.Sky@irap.omp.eu', 'Responsable', 1),
1237 263 Etienne Pallier
 	('Robert Henri', 'Henri', 'Henri.Robert', 'Utilisateur', 1);
1238 263 Etienne Pallier
1239 263 Etienne Pallier
2) Sinon, le plus simple est d'utiliser un FAUX (fake) LDAP interne a l'application
1240 263 Etienne Pallier
Dans ce cas, il faut decommenter la variable $fakeLDAP dans le fichier config.php et ajouter dans la BD les utilisateurs specifiques suivants :
1241 263 Etienne Pallier
# Ajout d'utilisateurs de TEST (hors LDAP)
1242 263 Etienne Pallier
INSERT INTO utilisateurs (nom, login, email, role, groupes_metier_id) VALUES
1243 263 Etienne Pallier
 	('Hubert SuperAdmin', 'superadmin', 'hubert.superadmin@irap.omp.eu', 'Super Administrateur', 1),
1244 263 Etienne Pallier
 	('Pierre Responsable', 'responsable', 'pierre.resp@irap.omp.eu', 'Responsable', 2),
1245 263 Etienne Pallier
 	('Jean Administration', 'admin', 'Jean.Administration@irap.omp.eu', 'Administration', 5),
1246 263 Etienne Pallier
 	('Jacques Utilisateur', 'user', 'Jacques.Utilisateur@irap.omp.eu', 'Utilisateur', 7);
1247 263 Etienne Pallier
1248 263 Etienne Pallier
Informations sur le LDAP :
1249 263 Etienne Pallier
1250 263 Etienne Pallier
Classe LdapAuthComponent (extends AuthComponent), definie dans : app/Controller/Component/LdapAuthComponent.php 
1251 263 Etienne Pallier
1252 263 Etienne Pallier
Definition des roles (ACL) : app/Model/Utilisateur.php :
1253 263 Etienne Pallier
	private $acceptedRoles = array ('Utilisateur', 'Responsable', 'Administration', 'Super Administrateur');
1254 263 Etienne Pallier
	public function getAuthenticationLevelFromRole($role) {
1255 263 Etienne Pallier
		if ($role == 'Utilisateur')
1256 263 Etienne Pallier
			return 1;
1257 263 Etienne Pallier
		elseif ($role == 'Responsable')
1258 263 Etienne Pallier
			return 2;
1259 263 Etienne Pallier
		elseif ($role == 'Administration')
1260 263 Etienne Pallier
			return 3;
1261 263 Etienne Pallier
		elseif ($role == 'Super Administrateur')
1262 263 Etienne Pallier
			return 4;
1263 263 Etienne Pallier
		return 0;
1264 263 Etienne Pallier
	}
1265 263 Etienne Pallier
1266 263 Etienne Pallier
Lecture du fichier de config : app/Model/LdapConnection.php :
1267 263 Etienne Pallier
		private function checkConfiguration()
1268 263 Etienne Pallier
1269 263 Etienne Pallier
Workflow du LDAP :
1270 263 Etienne Pallier
1) Page d'accueil : j'entre mon login et pwd
1271 263 Etienne Pallier
2) clic sur bouton "Se Connecter" --> execute l'action Utilisateurs/login (dans app/Controller/UtilisateursController.php)
1272 263 Etienne Pallier
1273 263 Etienne Pallier
1274 263 Etienne Pallier
1275 263 Etienne Pallier
1276 263 Etienne Pallier
1277 264 Etienne Pallier
* *COMMENT AJOUTER UNE NOUVELLE TABLE DANS LA BD*
1278 263 Etienne Pallier
1279 263 Etienne Pallier
On explique ici ce qu'il faut faire quand on veut ajouter une nouvelle table dans la base de données, 
1280 263 Etienne Pallier
table qui doit être prise en compte dans l'application.
1281 263 Etienne Pallier
Cette explication est donnée avec 2 exemples.
1282 263 Etienne Pallier
1283 263 Etienne Pallier
1) Premier exemple : ajout de la table sur-categorie (EP)
1284 263 Etienne Pallier
1285 263 Etienne Pallier
Avant cet ajout, il n'y avait que la table categorie et la table sous-categorie.
1286 263 Etienne Pallier
Vous trouverez plus de détails sur ce sujet dans la section suivante nommée "COMMENT J'AI FAIT POUR AJOUTER UN 3eme niveau de categorie appele sur_categorie (ou domaine)"
1287 263 Etienne Pallier
1288 263 Etienne Pallier
a) impact sur la BD
1289 263 Etienne Pallier
- ajout d'une nouvelle table sur_categories(id,nom) :
1290 263 Etienne Pallier
CREATE TABLE IF NOT EXISTS sur_categories (
1291 263 Etienne Pallier
  id int(11) NOT NULL AUTO_INCREMENT,
1292 263 Etienne Pallier
  nom varchar(45) DEFAULT NULL,
1293 263 Etienne Pallier
  PRIMARY KEY (id),
1294 263 Etienne Pallier
  UNIQUE KEY nom_UNIQUE (nom)
1295 263 Etienne Pallier
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
1296 263 Etienne Pallier
1297 263 Etienne Pallier
- ajout dans la table categories d'une cle etrangere sur_categorie_id :
1298 263 Etienne Pallier
ALTER TABLE categories 
1299 263 Etienne Pallier
	ADD sur_categorie_id INT( 11 ) NULL DEFAULT NULL,
1300 263 Etienne Pallier
  	ADD CONSTRAINT fk_sur_categorie_id FOREIGN KEY (sur_categorie_id) REFERENCES sur_categories (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
1301 263 Etienne Pallier
1302 263 Etienne Pallier
- ajout dans la table materiels d'une cle etrangere sur_categorie_id :
1303 263 Etienne Pallier
ALTER TABLE materiels 
1304 263 Etienne Pallier
	ADD sur_categorie_id INT( 11 ) NOT NULL after designation,
1305 263 Etienne Pallier
	ADD CONSTRAINT fk_materiels_sur_categorie_id FOREIGN KEY (sur_categorie_id) REFERENCES sur_categories (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
1306 263 Etienne Pallier
1307 263 Etienne Pallier
(attention, il faut d'abord vider les lignes des tables suivis, emprunts, et materiels)
1308 263 Etienne Pallier
delete from suivis;
1309 263 Etienne Pallier
delete from emprunts;
1310 263 Etienne Pallier
delete from materiels;
1311 1 Etienne Pallier
1312 263 Etienne Pallier
Il faut aussi ajouter des sur-categories :
1313 263 Etienne Pallier
# Ajout de quelques sur-categories
1314 263 Etienne Pallier
insert into sur_categories (id,nom) values 
1315 263 Etienne Pallier
(1,'Electronique'), 
1316 263 Etienne Pallier
(2,'Informatique'), 
1317 263 Etienne Pallier
(3,'Instrumentation')
1318 263 Etienne Pallier
(4, 'Logistique'),
1319 263 Etienne Pallier
(5, 'Mecanique'),
1320 263 Etienne Pallier
(6, 'Optique')
1321 263 Etienne Pallier
;
1322 263 Etienne Pallier
1323 263 Etienne Pallier
# Relier toutes les categories a une sur-categorie (la 1)
1324 263 Etienne Pallier
update categories set sur_categorie_id=1 where id<10; 
1325 263 Etienne Pallier
update categories set sur_categorie_id=2 where id>=10 and id<20; 
1326 263 Etienne Pallier
update categories set sur_categorie_id=3 where id>=20;
1327 263 Etienne Pallier
1328 263 Etienne Pallier
1329 263 Etienne Pallier
b) impact sur les modeles (cakephp/app/Model)
1330 263 Etienne Pallier
- Ajout du nouveau modèle SurCategorie.php : copie de Categorie.php avec "hasMany categorie"
1331 263 Etienne Pallier
- Modif du modèle Categorie.php : + belongsTo="SurCategorie"
1332 263 Etienne Pallier
1333 263 Etienne Pallier
c) impact sur les controleurs (cakephp/app/Controller)
1334 263 Etienne Pallier
- Ajout du nouveau controleur SurCategoriesController.php : minimaliste (comme CategoriesController)
1335 1 Etienne Pallier
- Modif du controleur CategoriesController.php : +getBySurCategorie()
1336 263 Etienne Pallier
1337 263 Etienne Pallier
d) impact sur les vues (cakephp/app/View)
1338 263 Etienne Pallier
- SurCategorie : no view (scaffold ?)
1339 263 Etienne Pallier
- Categorie : actuellement no view (scaffold ?) 
1340 263 Etienne Pallier
--> creer une vue (comme SousCategorie) 
1341 263 Etienne Pallier
+ get_by_surcategorie.ctp
1342 263 Etienne Pallier
+ scaffold.form.ctp
1343 263 Etienne Pallier
1344 263 Etienne Pallier
e) View/Pages/tools.ctp : ajouter une entree au menu pour les Sur-Categories
1345 263 Etienne Pallier
1346 263 Etienne Pallier
f) impact sur TOUTES les vues de Materiel
1347 263 Etienne Pallier
add/edit/view/index
1348 263 Etienne Pallier
dans la vue index, remplacer la categorie par la sur-categorie
1349 263 Etienne Pallier
GROS BOULOT sur la vue ADD/EDIT (+ javascript)
1350 263 Etienne Pallier
1351 263 Etienne Pallier
1352 263 Etienne Pallier
2) Deuxième exemple : ajout de la table type_suivis (VM)
1353 263 Etienne Pallier
1354 263 Etienne Pallier
Un peu plus haut est expliqué comment créer une table, je vais ici expliquer comment créer et remplir tout ce qui est basiquement 
1355 263 Etienne Pallier
nécessaire pour l'utiliser, en prenant pour exemple la table type_suivis.
1356 263 Etienne Pallier
1357 263 Etienne Pallier
Après avoir créé la table, on lui crée :
1358 263 Etienne Pallier
- Un controller : Héritant de AppController, avec une variable $scaffold sui se chargera de presque tout et une variable $name avec son nom.
1359 263 Etienne Pallier
- Un model : Avec la même variable $name et une variable $displayField qui correspond a la designation dans la BDD (ex: "nom");
1360 263 Etienne Pallier
	Il doit contenir la fonction typeSuiviNameIsUnik($name) {} (qu'on retrouve dans sites ou organisme) ainsi que le $validate comprenant les validations necessaires. 
1361 263 Etienne Pallier
- Une vue, selon l'utilité, n'est pas forcément nécessaire grâce au scaffold.
1362 263 Etienne Pallier
Par la suite, pour lister son contenu via un lien dans "outils" par exemple, il suffit de créer le chemin dans view/pages/tools.ctp.
1363 263 Etienne Pallier
1364 263 Etienne Pallier
1365 263 Etienne Pallier
1366 264 Etienne Pallier
* *CREER UN CHAMP DATE (VM)*
1367 263 Etienne Pallier
1368 263 Etienne Pallier
Pour expliquer comment créer un champ date fonctionnel, je vais prendre l'exemple de la Date de reception.
1369 263 Etienne Pallier
Une fois vôtre colonne créé dans la table marteriel, vous devrez faire des modifications dans : 
1370 263 Etienne Pallier
1371 263 Etienne Pallier
MaterielController : //Passer la date au format français	
1372 263 Etienne Pallier
1373 263 Etienne Pallier
		if(isset($this->request->data['Materiel']['date_reception'])){
1374 263 Etienne Pallier
		$this->request->data['Materiel']['date_reception'] = date("d-m-Y", strtotime($this->request->data['Materiel']['date_reception'])); }
1375 263 Etienne Pallier
1376 263 Etienne Pallier
le Model Materiel : Créer un champ de validation adapté à la date, avec un regex. Et surtout remplir le formatage de date à l'américaine :
1377 263 Etienne Pallier
1378 263 Etienne Pallier
		if (isset($this->data['Materiel']['date_reception'])) {
1379 263 Etienne Pallier
			$originalDate = $this->data['Materiel']['date_reception'];
1380 263 Etienne Pallier
			$this->data['Materiel']['date_reception'] = date("Y-m-d", strtotime($originalDate));
1381 263 Etienne Pallier
		}
1382 263 Etienne Pallier
1383 263 Etienne Pallier
La vue Materiel : - Scaffold.view : Repasser la date en français et l'afficher.
1384 263 Etienne Pallier
				  - Scaffold.form : Créer le champ date du formulaire
1385 263 Etienne Pallier
1386 263 Etienne Pallier
Puis il faut adapter le champ date reception presque partout ou il y a le champ date acquisition.
1387 263 Etienne Pallier
1388 263 Etienne Pallier
1389 263 Etienne Pallier
1390 263 Etienne Pallier
1391 263 Etienne Pallier
1392 264 Etienne Pallier
* *COMMENT J'AI FAIT POUR AJOUTER UN 3eme niveau de categorie appele sur_categorie (ou domaine) (EP) ?*
1393 263 Etienne Pallier
1394 263 Etienne Pallier
je me rends compte d'une incoherence de stockage dans la table Materiels.
1395 263 Etienne Pallier
En effet, quand on saisit un materiel, on doit choisir une categorie ET une sous-categorie.
1396 263 Etienne Pallier
Du coup, les 2 id (categorie + sous-categorie) sont stockes dans la table Materiels...
1397 263 Etienne Pallier
Or, c'est inutile car la sous-categorie suffit a determiner la categorie...
1398 263 Etienne Pallier
Cette redondance pourrait meme amener des incoherences dans la table Materiels si par exemple on fait des modifications 
1399 263 Etienne Pallier
dans les tables categories et sous_categories sans les repercuter dans la table materiels !!
1400 263 Etienne Pallier
Je suppose que c'est un choix de facilite qui a ete fait par upsilon.
1401 263 Etienne Pallier
1402 263 Etienne Pallier
Donc, si vous etes ok, et a moins que Upsilon me dise qu'il y avait une bonne raison de faire ce choix (j'en doute),
1403 263 Etienne Pallier
je propose de modifier le code pour que seule la sous-categorie soit stockee (on ne stocke plus la categorie).
1404 263 Etienne Pallier
1405 263 Etienne Pallier
En plus, cela simplifiera l'ajout du 3eme niveau "sur-categorie" puisque lui-meme n'aura pas besoin d'etre stocke etant donne qu'il est automatiquement determine par la categorie.
1406 263 Etienne Pallier
On aura alors :
1407 263 Etienne Pallier
sous_categorie_id -> categorie_id -> sur_categorie_id
1408 263 Etienne Pallier
Avec seulement la sous_categorie, on pourra determiner la categorie, et donc la sur_categorie. 
1409 263 Etienne Pallier
1410 263 Etienne Pallier
Du coup, si je fais cette modif, on pourrait meme se permettre de demarrer officiellement INVENTIRAP rapidement.
1411 263 Etienne Pallier
En effet, l'ajout de la sur-categorie ne change rien au contenu des tables "administratives" (materiels, emprunts, suivis), 
1412 263 Etienne Pallier
et donc on pourra le faire plus tard, meme apres que l'administration ait commence a remplir la BD. 
1413 263 Etienne Pallier
Ca sera totalement transparent.
1414 263 Etienne Pallier
1415 263 Etienne Pallier
1) suppression de la redondance (categorie_id) dans la table materiels
1416 263 Etienne Pallier
1417 263 Etienne Pallier
a) impact sur la vue index de Materiel
1418 263 Etienne Pallier
add/edit/view/index
1419 263 Etienne Pallier
1420 263 Etienne Pallier
2) ajout d'une sur-categorie
1421 263 Etienne Pallier
1422 263 Etienne Pallier
a) impact sur la BD
1423 263 Etienne Pallier
- ajout d'une nouvelle table sur_categories(id,nom) :
1424 263 Etienne Pallier
CREATE TABLE IF NOT EXISTS sur_categories (
1425 263 Etienne Pallier
  id int(11) NOT NULL AUTO_INCREMENT,
1426 263 Etienne Pallier
  nom varchar(45) DEFAULT NULL,
1427 263 Etienne Pallier
  PRIMARY KEY (id),
1428 263 Etienne Pallier
  UNIQUE KEY nom_UNIQUE (nom)
1429 1 Etienne Pallier
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
1430 263 Etienne Pallier
1431 263 Etienne Pallier
- ajout dans la table categories d'une cle etrangere sur_categorie_id :
1432 263 Etienne Pallier
ALTER TABLE categories 
1433 263 Etienne Pallier
	ADD sur_categorie_id INT( 11 ) NULL DEFAULT NULL,
1434 263 Etienne Pallier
  	ADD CONSTRAINT fk_sur_categorie_id FOREIGN KEY (sur_categorie_id) REFERENCES sur_categories (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
1435 263 Etienne Pallier
1436 263 Etienne Pallier
- ajout dans la table materiels d'une cle etrangere sur_categorie_id :
1437 263 Etienne Pallier
ALTER TABLE materiels 
1438 263 Etienne Pallier
	ADD sur_categorie_id INT( 11 ) NOT NULL after designation,
1439 263 Etienne Pallier
	ADD CONSTRAINT fk_materiels_sur_categorie_id FOREIGN KEY (sur_categorie_id) REFERENCES sur_categories (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
1440 263 Etienne Pallier
1441 263 Etienne Pallier
(attention, il faut d'abord vider les lignes des tables suivis, emprunts, et materiels)
1442 263 Etienne Pallier
delete from suivis;
1443 263 Etienne Pallier
delete from emprunts;
1444 263 Etienne Pallier
delete from materiels;
1445 263 Etienne Pallier
1446 263 Etienne Pallier
Il faut aussi ajouter des sur-categories :
1447 263 Etienne Pallier
# Ajout de quelques sur-categories
1448 263 Etienne Pallier
insert into sur_categories (id,nom) values 
1449 263 Etienne Pallier
(1,'Electronique'), 
1450 263 Etienne Pallier
(2,'Informatique'), 
1451 263 Etienne Pallier
(3,'Instrumentation')
1452 263 Etienne Pallier
(4, 'Logistique'),
1453 263 Etienne Pallier
(5, 'Mecanique'),
1454 263 Etienne Pallier
(6, 'Optique')
1455 263 Etienne Pallier
;
1456 263 Etienne Pallier
1457 263 Etienne Pallier
# Relier toutes les categories a une sur-categorie (la 1)
1458 263 Etienne Pallier
update categories set sur_categorie_id=1 where id<10; 
1459 263 Etienne Pallier
update categories set sur_categorie_id=2 where id>=10 and id<20; 
1460 263 Etienne Pallier
update categories set sur_categorie_id=3 where id>=20;
1461 263 Etienne Pallier
1462 263 Etienne Pallier
1463 263 Etienne Pallier
b) impact sur les modeles (cakephp/app/Model)
1464 263 Etienne Pallier
- SurCategorie.php : copie de Categorie.php avec "hasMany categorie"
1465 263 Etienne Pallier
- Categorie.php : + belongsTo="SurCategorie"
1466 263 Etienne Pallier
1467 263 Etienne Pallier
c) impact sur les controleurs (cakephp/app/Controller)
1468 263 Etienne Pallier
- SurCategoriesController.php : minimaliste (comme CategoriesController)
1469 263 Etienne Pallier
- CategoriesController.php : +getBySurCategorie()
1470 263 Etienne Pallier
1471 263 Etienne Pallier
d) impact sur les vues (cakephp/app/View)
1472 263 Etienne Pallier
- SurCategorie : no view (scaffold ?)
1473 263 Etienne Pallier
- Categorie : actuellement no view (scaffold ?) 
1474 263 Etienne Pallier
--> creer une vue (comme SousCategorie) 
1475 263 Etienne Pallier
+ get_by_surcategorie.ctp
1476 263 Etienne Pallier
+ scaffold.form.ctp
1477 263 Etienne Pallier
1478 263 Etienne Pallier
e) View/Pages/tools.ctp : ajouter une entree au menu pour les Sur-Categories
1479 263 Etienne Pallier
1480 263 Etienne Pallier
f) impact sur TOUTES les vues de Materiel
1481 263 Etienne Pallier
add/edit/view/index
1482 263 Etienne Pallier
dans la vue index, remplacer la categorie par la sur-categorie
1483 263 Etienne Pallier
GROS BOULOT sur la vue ADD/EDIT (+ javascript)
1484 263 Etienne Pallier
1485 263 Etienne Pallier
1486 263 Etienne Pallier
1487 263 Etienne Pallier
1488 264 Etienne Pallier
* *TESTS*
1489 263 Etienne Pallier
1490 263 Etienne Pallier
A - EXECUTION
1491 263 Etienne Pallier
1492 263 Etienne Pallier
Prérequis : PHPUNIT 3 doit être déjà installé et accessible depuis la console (phpunit -version) via le fichier php.ini
1493 263 Etienne Pallier
(ATTENTION : cakephp 2.x n'est pas compatible avec PhpUnit 4)
1494 263 Etienne Pallier
1495 263 Etienne Pallier
Avec XAMPP (conseillé) : PhpUnit 3 est déjà inclus
1496 263 Etienne Pallier
Avec MAMP (+ difficile) : pour installer PhpUnit, suivre cette documentation : http://www.dolinaj.net/software-installation/mac/how-to-install-phpunit-with-mamp-on-mac/
1497 263 Etienne Pallier
1498 263 Etienne Pallier
Procédure à suivre pour pouvoir exécuter les tests unitaires et fonctionnels livrés avec le logiciel :
1499 263 Etienne Pallier
1500 263 Etienne Pallier
1) Ajouter une nouvelle configuration de base de données dans votre fichier app/Config/database.php pour la BD de test
1501 263 Etienne Pallier
 
1502 263 Etienne Pallier
 Exemple de configuration :
1503 263 Etienne Pallier
 
1504 263 Etienne Pallier
	public $test = array(
1505 263 Etienne Pallier
		'datasource' => 'Database/Mysql',
1506 263 Etienne Pallier
		'persistent' => false,
1507 263 Etienne Pallier
		'host' => 'localhost',
1508 263 Etienne Pallier
		'database' => 'test_labinvent',
1509 263 Etienne Pallier
		'login' => 'root',
1510 263 Etienne Pallier
		'password' => '',
1511 263 Etienne Pallier
	);
1512 263 Etienne Pallier
1513 263 Etienne Pallier
1514 263 Etienne Pallier
2) Créer la BD de test (vide)
1515 263 Etienne Pallier
A l'aide de phpmyadmin ou bien avec un client mysql quelconque,
1516 263 Etienne Pallier
créer une BD de test vide que vous nommerez avec le même nom que celui donné dans la configuration ci-dessus,
1517 263 Etienne Pallier
soit pour l'exemple, "test_labinvent"
1518 263 Etienne Pallier
Syntaxe SQL : "create database test_labinvent"
1519 263 Etienne Pallier
1520 263 Etienne Pallier
3) Passer en mode "debug" 
1521 263 Etienne Pallier
Dans votre fichier de configuration labinvent.php, mettez votre paramètre "debug" à 1 ou 2 (mais pas à 0) :
1522 263 Etienne Pallier
		'debug' => 2,
1523 263 Etienne Pallier
1524 263 Etienne Pallier
4) Se connecter à l'application
1525 263 Etienne Pallier
Les test ne passeront pas si vous n'êtes pas connectés 
1526 263 Etienne Pallier
 
1527 263 Etienne Pallier
5) Exécuter les tests
1528 263 Etienne Pallier
1529 263 Etienne Pallier
a) Exécution depuis l'application (conseillé) :
1530 263 Etienne Pallier
ATTENTION : vous devez être logué pour que les tests passent !!!
1531 263 Etienne Pallier
Il suffit d'aller à l'URL /test.php de votre installation du logiciel LabInvent
1532 263 Etienne Pallier
(vous pouvez aussi essayer l'URL "/app/webroot/test.php", ou encore "/cakephp/test.php")
1533 263 Etienne Pallier
Cette page de tests se trouve dans cakephp/app/webroot/
1534 263 Etienne Pallier
Vous avez alors accès à 2 types de tests :
1535 263 Etienne Pallier
- App : Tests ==> les tests écris pour tester l'application Labinvent
1536 263 Etienne Pallier
- Core : Tests ==> les tests fournis avec cakephp pour tester le framework
1537 263 Etienne Pallier
Pour exécuter tous les tests liés à l'application Labinvent (à faire systématiquement avant de commiter tout changement) :
1538 263 Etienne Pallier
cliquer sur "Tests" sous "App", puis sur "AllTests"
1539 263 Etienne Pallier
("AllController" exécute tous les tests de controleurs ; "AllModel" exécute tous les tests de modèles)
1540 263 Etienne Pallier
1541 263 Etienne Pallier
b) Execution depuis la console :
1542 263 Etienne Pallier
Aller dans le repertoire app/
1543 263 Etienne Pallier
Pour tester le controleur MaterielsController :
1544 263 Etienne Pallier
./Console/cake test app Controller/MaterielsController
1545 263 Etienne Pallier
1546 263 Etienne Pallier
1547 263 Etienne Pallier
B - ECRITURE DE NOUVEAUX TESTS
1548 263 Etienne Pallier
1549 263 Etienne Pallier
cf http://book.cakephp.org/2.0/en/development/testing.html
1550 263 Etienne Pallier
1551 263 Etienne Pallier
Aller dans app/Test/
1552 263 Etienne Pallier
1553 263 Etienne Pallier
Ce dossier contient l'arborescence suivante :
1554 263 Etienne Pallier
1555 263 Etienne Pallier
- Case/ : les tests
1556 263 Etienne Pallier
	- Controller/ : les tests de controleurs
1557 263 Etienne Pallier
	- Model/ : les tests de modèles
1558 263 Etienne Pallier
	- View/ (peu ou pas utilisé) : les tests de vues (ou de helpers)
1559 263 Etienne Pallier
	- AllControllerTest.php : exécution de tous les tests de controleurs
1560 263 Etienne Pallier
	- AllModelTest.php : exécution de tous les tests de modèles
1561 263 Etienne Pallier
	- AllTestsTest.php : éxécution de TOUS les tests
1562 263 Etienne Pallier
	
1563 263 Etienne Pallier
- Fixture/ : les différentes initialisations nécessaires dans la BD de test pour pouvoir executer les tests
1564 263 Etienne Pallier
Ces "fixtures" sont automatiquement executees AU DEBUT de chaque test.
1565 263 Etienne Pallier
Ce dossier contient un fichier pour chaque table pour laquelle on a besoin d'une "fixture".
1566 263 Etienne Pallier
1567 263 Etienne Pallier
1) Les "fixtures"
1568 263 Etienne Pallier
1569 263 Etienne Pallier
La façon la plus basique de creer une fixture pour une table donnee est de la realiser automatiquement a partir d'une copie de la table de la vraie BD.
1570 263 Etienne Pallier
Par exemple, pour que la table "categories" de la BD de test contienne la meme chose que la table de la vraie BD, il suffit de creer un fichier CategorieFixture.php contenant ceci :
1571 263 Etienne Pallier
1572 263 Etienne Pallier
class CategorieFixture extends CakeTestFixture {
1573 263 Etienne Pallier
	public $import = array('model' => 'Categorie', 'records' => true);
1574 263 Etienne Pallier
}
1575 263 Etienne Pallier
1576 263 Etienne Pallier
Au demarrage des tests, cette table sera chargee automatiquement avec les vraies donnees.
1577 263 Etienne Pallier
A la fin des tests, cette table sera vidée.
1578 263 Etienne Pallier
	
1579 263 Etienne Pallier
Dans le cas particulier de la table "materiels", on prefere l'initialiser nous-memes avec des valeurs choisies.
1580 263 Etienne Pallier
Exemple d'une fixture avec 2 materiels (dans le fichier MaterielFixture.php) :
1581 263 Etienne Pallier
1582 263 Etienne Pallier
class MaterielFixture extends CakeTestFixture {
1583 263 Etienne Pallier
1584 263 Etienne Pallier
	public $import = 'Materiel'; // import only structure, no record
1585 263 Etienne Pallier
	
1586 263 Etienne Pallier
	public $records = array(
1587 263 Etienne Pallier
			array(
1588 263 Etienne Pallier
					'designation' => 'matos1', 
1589 263 Etienne Pallier
					'sur_categorie_id' => 1, 
1590 263 Etienne Pallier
					'categorie_id' => 11, 
1591 263 Etienne Pallier
					'materiel_administratif' => 0, 
1592 263 Etienne Pallier
					'materiel_technique' => 1, 
1593 263 Etienne Pallier
					'status' => 'CREATED', 
1594 263 Etienne Pallier
					'nom_createur' => 'Pallier Etienne', 
1595 263 Etienne Pallier
					'nom_modificateur' => 'Jean Administration', 
1596 263 Etienne Pallier
					'nom_responsable' => 'Jacques Utilisateur', 
1597 263 Etienne Pallier
					'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', 
1598 263 Etienne Pallier
			),
1599 263 Etienne Pallier
			array(
1600 263 Etienne Pallier
					'designation' => 'matos2',
1601 263 Etienne Pallier
					'sur_categorie_id' => 1,
1602 1 Etienne Pallier
					'categorie_id' => 11,
1603 263 Etienne Pallier
					'materiel_administratif' => 0,
1604 263 Etienne Pallier
					'materiel_technique' => 1,
1605 263 Etienne Pallier
					'status' => 'CREATED',
1606 263 Etienne Pallier
					'nom_createur' => 'Pallier Etienne',
1607 263 Etienne Pallier
					'nom_modificateur' => 'Jean Administration',
1608 263 Etienne Pallier
					'nom_responsable' => 'Jacques Utilisateur',
1609 263 Etienne Pallier
					'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu',
1610 263 Etienne Pallier
			),
1611 263 Etienne Pallier
	);
1612 263 Etienne Pallier
} 
1613 263 Etienne Pallier
1614 263 Etienne Pallier
1615 263 Etienne Pallier
2) Les tests
1616 263 Etienne Pallier
1617 263 Etienne Pallier
Prenons l'exemple des tests ecrits pour le controleur des materiels (MaterielsController). Il devra s'appeler MaterielsControllerTest et aura la structure suivante :
1618 263 Etienne Pallier
1619 263 Etienne Pallier
class MaterielsControllerTest extends ControllerTestCase {
1620 263 Etienne Pallier
1621 263 Etienne Pallier
	// Liste des fixtures à charger avant l'execution des tests
1622 263 Etienne Pallier
	public $fixtures = array('app.materiel', 'app.sur_categorie', 'app.categorie', 'app.sous_categorie', 
1623 263 Etienne Pallier
			'app.groupes_thematique', 'app.groupes_metier', 'app.suivi', 'app.emprunt'
1624 263 Etienne Pallier
	);
1625 263 Etienne Pallier
	
1626 263 Etienne Pallier
	// Initialisations diverses a faire avant chaque test
1627 263 Etienne Pallier
	public function setUp() {
1628 263 Etienne Pallier
		parent::setUp();
1629 263 Etienne Pallier
	}
1630 263 Etienne Pallier
	
1631 263 Etienne Pallier
	// un 1er test	
1632 263 Etienne Pallier
	public function testMonPremier() {
1633 263 Etienne Pallier
		$result = $this->testAction(...);
1634 263 Etienne Pallier
		$this->assert...('resultat attendu', $result);
1635 263 Etienne Pallier
	}
1636 263 Etienne Pallier
1637 263 Etienne Pallier
	// un 2eme test
1638 263 Etienne Pallier
	public function testMonDeuxieme() {
1639 263 Etienne Pallier
		$result = $this->testAction(...);
1640 263 Etienne Pallier
		$this->assert...('resultat attendu', $result);
1641 263 Etienne Pallier
	}
1642 263 Etienne Pallier
1643 263 Etienne Pallier
	...
1644 263 Etienne Pallier
1645 263 Etienne Pallier
}	
1646 263 Etienne Pallier
	
1647 263 Etienne Pallier
Voir le vrai fichier Test/Case/Controller/MaterielsControllerTest.php
1648 263 Etienne Pallier
1649 263 Etienne Pallier
1650 263 Etienne Pallier
3) Execution
1651 263 Etienne Pallier
1652 263 Etienne Pallier
Exemple avec l'execution du test MaterielsControllerTest
1653 263 Etienne Pallier
1654 263 Etienne Pallier
a) Execution depuis le site web : 
1655 263 Etienne Pallier
/test.php?case=Controller%2FMaterielsController
1656 263 Etienne Pallier
Ajouter &debug=1 à l'url pour voir tous les messages de debug
1657 263 Etienne Pallier
1658 263 Etienne Pallier
b) Execution depuis la console :
1659 263 Etienne Pallier
Dans le repertoire app : ./Console/cake test app Controller/MaterielsController
1660 263 Etienne Pallier
Ajouter --debug pour voir tous les messages de debug
1661 263 Etienne Pallier
1662 263 Etienne Pallier
1663 263 Etienne Pallier
1664 263 Etienne Pallier
1665 264 Etienne Pallier
* *DATE PICKERS*
1666 263 Etienne Pallier
1667 263 Etienne Pallier
Pour fontionner, le datePicker fait appel dans la page "View/Layout/default" à 3 scripts (jquery-1.5.2.js, jquery-1.8.12.js, DatepickerConfig.js)
1668 263 Etienne Pallier
présents dans le repertoire "webroot/js/" et à un fichier "Theme" (smoothness.css) présent dans le repertoire "webroot/css/"
1669 263 Etienne Pallier
1670 263 Etienne Pallier
Le thème global peut très facilement être changé en téléchargeant le fichier css de son choix, à cette adresse: "http://jqueryui.com/themeroller/"
1671 263 Etienne Pallier
et en remplaçant celui se trouvant dans "webroot/css/"
1672 263 Etienne Pallier
1673 263 Etienne Pallier
Les options du datePicker sont modifiables dans le fichier "webroot/js/DatepickerConfig.js" et sont assez explicites.
1674 263 Etienne Pallier
Malgré cela, pour plus de précisions, la doc est facilement consultable à cette adresse: "http://jqueryui.com/datepicker/"
1675 263 Etienne Pallier
1676 263 Etienne Pallier
1677 263 Etienne Pallier
1678 263 Etienne Pallier
1679 263 Etienne Pallier
---
1680 263 Etienne Pallier
1681 211 Thibaud Ajas
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}A L'ATTENTION DES UTILISATEURS D'ECLIPSE%
1682 211 Thibaud Ajas
1683 1 Etienne Pallier
*+0) Installer Eclipse (Si nécessaire), voire Java+*
1684 1 Etienne Pallier
1685 211 Thibaud Ajas
En effet, même si la version que vous allez installer est une version pour PHP, Eclipse à besoin de Java pour pouvoir s'exécuter.
1686 211 Thibaud Ajas
Vérifiez que Java soit bien installé sur votre système :
1687 211 Thibaud Ajas
<pre>
1688 211 Thibaud Ajas
java -version
1689 1 Etienne Pallier
</pre>
1690 211 Thibaud Ajas
Si ce n'est pas le cas, exécutez les lignes suivantes :
1691 211 Thibaud Ajas
<pre>
1692 211 Thibaud Ajas
sudo apt-add-repository ppa:webupd8team/java
1693 211 Thibaud Ajas
sudo apt-get update
1694 212 Etienne Pallier
sudo apt-get install oracle-java8-installer
1695 211 Thibaud Ajas
</pre>
1696 211 Thibaud Ajas
1697 211 Thibaud Ajas
Pour installer Eclipse, allez sur : http://www.eclipse.org/downloads/packages/release/Neon/3
1698 211 Thibaud Ajas
Selectionnez la version que vous désirez (Neon, Oxygen, Mars ...) puis sélectionnez "Eclipse for PHP Developers".
1699 211 Thibaud Ajas
Téléchargez la version correspondant à votre système d'exploitation.
1700 211 Thibaud Ajas
Placez-vous dans le dossier ou vou voulez installer Eclipse avec l'archive précédement téléchargée (renommez-la en eclipse.tar.gz), puis exécutez la commande suivante :
1701 211 Thibaud Ajas
<pre>
1702 211 Thibaud Ajas
tar -zxvf eclipse.tar.gz
1703 211 Thibaud Ajas
</pre>
1704 211 Thibaud Ajas
1705 211 Thibaud Ajas
Si vous voulez Eclipse dans le menu des applications sous Ubuntu, il vous faudra crééer le fichier eclipse.desktop :
1706 211 Thibaud Ajas
<pre>
1707 211 Thibaud Ajas
gksudo gedit /usr/share/applications/eclipse.desktop
1708 211 Thibaud Ajas
</pre>
1709 211 Thibaud Ajas
puis collez-y ce qui suit, en modifiant le chemin des lignes Exec et Icon au besoin :
1710 211 Thibaud Ajas
<pre>
1711 211 Thibaud Ajas
[Desktop Entry]
1712 1 Etienne Pallier
Name=Eclipse 
1713 202 Thibaud Ajas
Type=Application
1714 1 Etienne Pallier
Exec=/opt/eclipse/eclipse
1715 1 Etienne Pallier
Terminal=false
1716 1 Etienne Pallier
Icon=/opt/eclipse/icon.xpm
1717 1 Etienne Pallier
Comment=Integrated Development Environment
1718 1 Etienne Pallier
NoDisplay=false
1719 1 Etienne Pallier
Categories=Development;IDE
1720 202 Thibaud Ajas
Name[en]=eclipse.desktop
1721 1 Etienne Pallier
</pre>
1722 200 Thibaud Ajas
1723 200 Thibaud Ajas
Puis donnez les droits à tous les utilisateurs sur ce fichier :
1724 1 Etienne Pallier
<pre>
1725 1 Etienne Pallier
sudo chmod a+r /usr/share/applications/eclipse.desktop
1726 1 Etienne Pallier
</pre>
1727 1 Etienne Pallier
1728 1 Etienne Pallier
*+1) Désactiver la vérification du certificat+*
1729 1 Etienne Pallier
1730 1 Etienne Pallier
Window -> Preferences -> Team -> git -> configuration -> Add entry
1731 1 Etienne Pallier
1732 1 Etienne Pallier
Key = http.sslVerify
1733 1 Etienne Pallier
Value = false
1734 1 Etienne Pallier
1735 1 Etienne Pallier
*+2) Récupérer le projet+*
1736 1 Etienne Pallier
1737 1 Etienne Pallier
*(Si le projet git n'existe pas déjà sur votre machine)*
1738 1 Etienne Pallier
1739 1 Etienne Pallier
File/Import project from git
1740 1 Etienne Pallier
1741 1 Etienne Pallier
Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/labinvent.git
1742 200 Thibaud Ajas
1743 1 Etienne Pallier
Directory: 
1744 200 Thibaud Ajas
- par défaut, il propose : /Users/epallier/git/labinvent
1745 200 Thibaud Ajas
- mais on peut le mettre n'importe où ailleurs, 
1746 200 Thibaud Ajas
par exemple, on pourrait le mettre directement dans le repertoire web de Apache:
1747 1 Etienne Pallier
/Applications/XAMPP/xamppfiles/htdocs 
1748 200 Thibaud Ajas
(si on veut que le projet s'execute directement dans le dossier web apache htdocs, mais ca n'est pas obligatoire...)
1749 1 Etienne Pallier
1750 200 Thibaud Ajas
initial branch: master
1751 200 Thibaud Ajas
remote name: origin
1752 1 Etienne Pallier
1753 200 Thibaud Ajas
Import as general project
1754 200 Thibaud Ajas
1755 200 Thibaud Ajas
Project name: LABINVENT
1756 200 Thibaud Ajas
1757 202 Thibaud Ajas
*(si le projet git existe déjà sur votre machine)*
1758 200 Thibaud Ajas
1759 1 Etienne Pallier
File/Import project from git
1760 1 Etienne Pallier
    
1761 1 Etienne Pallier
Existing local repository
1762 1 Etienne Pallier
1763 1 Etienne Pallier
Directory
1764 1 Etienne Pallier
1765 1 Etienne Pallier
ADD => Selectionnez le dossier contenant le projet git => Finish => Next
1766 1 Etienne Pallier
1767 1 Etienne Pallier
Import existing Eclipse project
1768 1 Etienne Pallier
1769 1 Etienne Pallier
Selectionner le projet => Search for nested project => finish
1770 1 Etienne Pallier
1771 1 Etienne Pallier
1772 1 Etienne Pallier
*+3) Configurer le projet+*
1773 1 Etienne Pallier
1774 1 Etienne Pallier
a) S'assurer que le projet est bien reconnu comme un projet PHP (il doit y avoir un petit "P" sur le dossier racine du projet)
1775 1 Etienne Pallier
Si ça n'est pas le cas, vérifier que le fichier .project (à la racine) contient bien
1776 1 Etienne Pallier
	<natures>
1777 1 Etienne Pallier
		<nature>org.eclipse.php.core.PHPNature</nature>
1778 1 Etienne Pallier
	</natures>
1779 1 Etienne Pallier
NB : Le fichier .project est normalement versionné et donc le projet labinvent devrait être reconnu automatiquement comme projet PHP
1780 1 Etienne Pallier
1781 1 Etienne Pallier
1782 1 Etienne Pallier
b) S'assurer que les fichiers de vue de cakephp ("*.ctp") sont bien reconnus comme des fichiers PHP.
1783 1 Etienne Pallier
Pour tester cela, ouvrir le fichier de vue cakephp/app/View/Categories/get_all.ctp
1784 1 Etienne Pallier
Si ce fichier s'ouvre comme un simple fichier texte, c'est qu'il n'est pas reconnu par Eclipse comme un fichier Php. 
1785 1 Etienne Pallier
Il faut donc associer l'editeur Php a l'extension de fichier "*.ctp" :
1786 1 Etienne Pallier
- Preferences/General/Content types
1787 1 Etienne Pallier
- Dans la liste "Content types", ouvrir la section "Text", selectionner PHP
1788 1 Etienne Pallier
- Ajouter l'extension "*.ctp"
1789 1 Etienne Pallier
1790 1 Etienne Pallier
c) Vérifier la version de php utilisée (il serait préférable d'utiliser la meme version que celle officiellement utilisée par le logiciel, c'est à dire php 5.6, mais attention, le serveur IRAP utilise toujours une version 5.3 pour inventirap) :
1791 1 Etienne Pallier
- Clic-droit sur le projet, Propriétés
1792 1 Etienne Pallier
- PHP
1793 1 Etienne Pallier
- Interpreter
1794 1 Etienne Pallier
- Enable project specific settings, PHP Version : "PHP 5.6"
1795 1 Etienne Pallier
1796 1 Etienne Pallier
d) S'assurer que le texte est bien encodé en UTF-8 par défaut :
1797 1 Etienne Pallier
clic-droit sur le dossier racine du projet (dans PHP Explorer), Properties, Resource : dans la zone "Text file encoding" cocher "Other" et sélectionner UTF-8
1798 1 Etienne Pallier
(
1799 1 Etienne Pallier
Il faudrait commiter ça mais je ne sais pas trop si c'est risqué ou pas.
1800 1 Etienne Pallier
Les fichiers concernés sont :
1801 1 Etienne Pallier
- .project (déjà versionné) : car il commence par la ligne "<?xml version="1.0" encoding="UTF-8"?>"
1802 219 Thibaud Ajas
- mais c'est surtout celui-ci qui compte (actuellement ignoré de git) : .settings/org.eclipse.core.resources.prefs : car sa 2eme ligne est "encoding/<project>=UTF-8"
1803 219 Thibaud Ajas
)
1804 219 Thibaud Ajas
1805 1 Etienne Pallier
Les éléments suivants sont normalement DEJA ignorés par git, à vérifier :
1806 1 Etienne Pallier
- .settings/
1807 1 Etienne Pallier
- cakephp/app/tmp/ : tout sauf 
1808 1 Etienne Pallier
	- documents/
1809 1 Etienne Pallier
- cakephp/app/Config/ :
1810 1 Etienne Pallier
	- database.php
1811 1 Etienne Pallier
	- labinvent.php
1812 1 Etienne Pallier
1813 1 Etienne Pallier
1814 1 Etienne Pallier
1815 1 Etienne Pallier
1816 1 Etienne Pallier
1817 1 Etienne Pallier
---
1818 1 Etienne Pallier
1819 1 Etienne Pallier
1820 1 Etienne Pallier
<pre>
1821 1 Etienne Pallier
*********************************************************
1822 1 Etienne Pallier
REMARQUES INTERRESSANTES (MAIS VOUS POUVEZ LES IGNORER)
1823 1 Etienne Pallier
1824 1 Etienne Pallier
// DEBUT DES REMARQUES
1825 1 Etienne Pallier
1826 1 Etienne Pallier
A la racine du projet, j'ai plusieurs éléments cachés de configuration Eclipse :
1827 1 Etienne Pallier
1828 1 Etienne Pallier
1) fichier .buildpath 
1829 1 Etienne Pallier
Il est versionné puisque "svn status .buildpath" (depuis la console) ne donne rien
1830 1 Etienne Pallier
Il contient :
1831 1 Etienne Pallier
1832 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
1833 1 Etienne Pallier
<buildpath>
1834 1 Etienne Pallier
        <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
1835 1 Etienne Pallier
        <buildpathentry kind="lib" path="docs/mockup/mockup_html.zip"/>
1836 1 Etienne Pallier
        <buildpathentry kind="src" path="cakephp"/>
1837 1 Etienne Pallier
</buildpath>
1838 1 Etienne Pallier
1839 1 Etienne Pallier
2) fichier .project
1840 1 Etienne Pallier
Il est déjà versionné
1841 1 Etienne Pallier
Il contient :
1842 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
1843 1 Etienne Pallier
<projectDescription>
1844 1 Etienne Pallier
        <name>invirap</name>
1845 1 Etienne Pallier
        <comment></comment>
1846 1 Etienne Pallier
        <projects>
1847 1 Etienne Pallier
        </projects>
1848 1 Etienne Pallier
        <buildSpec>
1849 1 Etienne Pallier
                <buildCommand>
1850 1 Etienne Pallier
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
1851 1 Etienne Pallier
                        <arguments>
1852 1 Etienne Pallier
                        </arguments>
1853 1 Etienne Pallier
                </buildCommand>
1854 1 Etienne Pallier
                <buildCommand>
1855 1 Etienne Pallier
                        <name>org.eclipse.wst.validation.validationbuilder</name>
1856 1 Etienne Pallier
                        <arguments>
1857 1 Etienne Pallier
                        </arguments>
1858 1 Etienne Pallier
                </buildCommand>
1859 1 Etienne Pallier
                <buildCommand>
1860 1 Etienne Pallier
                        <name>org.eclipse.dltk.core.scriptbuilder</name>
1861 1 Etienne Pallier
                        <arguments>
1862 1 Etienne Pallier
                        </arguments>
1863 1 Etienne Pallier
                </buildCommand>
1864 1 Etienne Pallier
        </buildSpec>
1865 1 Etienne Pallier
        <natures>
1866 1 Etienne Pallier
                <nature>org.eclipse.php.core.PHPNature</nature>
1867 1 Etienne Pallier
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
1868 1 Etienne Pallier
        </natures>
1869 1 Etienne Pallier
</projectDescription>
1870 1 Etienne Pallier
1871 1 Etienne Pallier
3) dossier .settings/ (exclus de svn)
1872 1 Etienne Pallier
Il contient 3 fichiers :
1873 1 Etienne Pallier
1874 1 Etienne Pallier
- org.eclipse.core.resources.prefs : bizarrement, il ne contient que quelques références seulement :
1875 1 Etienne Pallier
eclipse.preferences.version=1
1876 1 Etienne Pallier
encoding//cakephp/app/Controller/MaterielsController.php=UTF-8
1877 1 Etienne Pallier
encoding//cakephp/app/View/Elements/menu_view.ctp=UTF-8
1878 1 Etienne Pallier
encoding//cakephp/app/View/Layouts/default.ctp=UTF-8
1879 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/index.ctp=UTF-8
1880 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/scaffold.view.ctp=UTF-8
1881 1 Etienne Pallier
encoding//database/Upd_TableConstraints.sql=UTF-8
1882 1 Etienne Pallier
encoding//database/update/README.txt=UTF-8
1883 1 Etienne Pallier
encoding//docs/HOWTO.txt=UTF-8
1884 1 Etienne Pallier
encoding//install/HOWTO.txt=UTF-8
1885 1 Etienne Pallier
encoding/<project>=UTF-8
1886 1 Etienne Pallier
1887 1 Etienne Pallier
- org.eclipse.php.core.prefs
1888 1 Etienne Pallier
eclipse.preferences.version=1
1889 200 Thibaud Ajas
include_path=0;/invirap\u00051;/invirap/docs/mockup/mockup_html.zip
1890 1 Etienne Pallier
1891 1 Etienne Pallier
- org.eclipse.wst.common.project.facet.core.xml : sans doute inutile ? (lié à "Faceted Project Validation Builder" dans Properties/Builders)
1892 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
1893 1 Etienne Pallier
<faceted-project>
1894 200 Thibaud Ajas
  <fixed facet="php.core.component"/>
1895 200 Thibaud Ajas
  <fixed facet="php.component"/>
1896 200 Thibaud Ajas
  <installed facet="php.core.component" version="1"/>
1897 1 Etienne Pallier
  <installed facet="php.component" version="5.4"/>
1898 1 Etienne Pallier
</faceted-project>
1899 1 Etienne Pallier
1900 1 Etienne Pallier
// FIN DES REMARQUES
1901 1 Etienne Pallier
*********************************************************
1902 1 Etienne Pallier
</pre>
1903 200 Thibaud Ajas
1904 1 Etienne Pallier
*+4) (TODO:) Set Code style+*
1905 1 Etienne Pallier
1906 200 Thibaud Ajas
Window/Preferences : PHP / Editor
1907 1 Etienne Pallier
...
1908 1 Etienne Pallier
1909 1 Etienne Pallier
*+5) (TODO:) virtualenv+*
1910 1 Etienne Pallier
1911 1 Etienne Pallier
Now, once the PHP5 virtual environment is installed (see above),
1912 1 Etienne Pallier
set it in Eclipse as the project interpreter:
1913 1 Etienne Pallier
1914 1 Etienne Pallier
(cf http://virtphp.org)
1915 1 Etienne Pallier
1916 1 Etienne Pallier
...
1917 1 Etienne Pallier
1918 1 Etienne Pallier
*+6) (TODO:) Test+*
1919 1 Etienne Pallier
1920 1 Etienne Pallier
1921 1 Etienne Pallier
*+7) (TODO:) Run+*
1922 1 Etienne Pallier
1923 1 Etienne Pallier
check http://localhost:8080/
1924 292 Thibaud Ajas
1925 292 Thibaud Ajas
1926 292 Thibaud Ajas
---
1927 292 Thibaud Ajas
1928 292 Thibaud Ajas
h2. Installer un serveur LDAP et un serveur web sur deux VMs différentes
1929 293 Thibaud Ajas
1930 298 Etienne Pallier
Si vous êtes là c'est que vous avez déjà une VM avec votre serveur web, sinon je vous renvoie à la page d'installation du serveur web :
1931 293 Thibaud Ajas
> https://projects.irap.omp.eu/projects/inventirap/wiki/Installation
1932 293 Thibaud Ajas
1933 293 Thibaud Ajas
Ceci est une VM LDAP déjà installée et configurée (si vous en avez pas déjà) :
1934 293 Thibaud Ajas
> https://www.turnkeylinux.org/openldap
1935 293 Thibaud Ajas
1936 293 Thibaud Ajas
Après avoir installer vos deux VMs, on va les configurer.
1937 293 Thibaud Ajas
1938 299 Thibaud Ajas
Par la suite, j'utiliserais ces termes pour éviter de tout réécrire à chaque fois :
1939 293 Thibaud Ajas
> Machine hôte = Machine physique avec laquelle vous travaillez
1940 293 Thibaud Ajas
> VM_1 = Machine virtuelle qui héberge votre serveur Web/Apache/MySQL ...
1941 293 Thibaud Ajas
> VM_2 = Machine virtuelle qui héberge votre serveur LDAP
1942 293 Thibaud Ajas
1943 293 Thibaud Ajas
La configuration qui a servi a réaliser ce tutoriel :
1944 293 Thibaud Ajas
> Machine hôte : Windows 7 Pro 64bits
1945 293 Thibaud Ajas
> VM_1 : Ubuntu 14.04.5 32bits
1946 293 Thibaud Ajas
> VM_2 : TURNKEY OPENLDAP 64bits
1947 293 Thibaud Ajas
1948 293 Thibaud Ajas
*A faire sur la machine hôte :*
1949 293 Thibaud Ajas
1950 293 Thibaud Ajas
Configuration des 2 cartes réseau de la VM_1 :
1951 293 Thibaud Ajas
1952 293 Thibaud Ajas
_Carte n°1 :_
1953 293 Thibaud Ajas
1954 293 Thibaud Ajas
> Activer la carte réseau
1955 293 Thibaud Ajas
> Mode d'accès : NAT
1956 293 Thibaud Ajas
> 
1957 293 Thibaud Ajas
> (Si vous voulez pouvoir utiliser votre serveur web depuis votre machine hôte)
1958 293 Thibaud Ajas
> 
1959 293 Thibaud Ajas
> -> Avancé -> Redirection de ports
1960 293 Thibaud Ajas
> 
1961 293 Thibaud Ajas
> Ajoutez une règle de redirection :
1962 293 Thibaud Ajas
> IP hôte : 127.0.0.1
1963 293 Thibaud Ajas
> Port hôte : 8080
1964 293 Thibaud Ajas
> Port invité : 80
1965 293 Thibaud Ajas
> (Le reste n'y touchez pas)
1966 293 Thibaud Ajas
1967 296 Thibaud Ajas
(Un exemple)
1968 296 Thibaud Ajas
!Config_carte1_VM_1.png!
1969 296 Thibaud Ajas
1970 293 Thibaud Ajas
_Carte n°2 :_
1971 293 Thibaud Ajas
1972 293 Thibaud Ajas
> Activer la carte réseau
1973 293 Thibaud Ajas
> Mode d'accès : Réseau interne
1974 293 Thibaud Ajas
> Nom : Connexion_LDAP (ceci est un exemple, mettez ce que vous voulez)
1975 293 Thibaud Ajas
> -> Avancé
1976 293 Thibaud Ajas
> Mode Promiscuité : Tout autoriser
1977 293 Thibaud Ajas
1978 296 Thibaud Ajas
(Un exemple)
1979 296 Thibaud Ajas
!Config_carte2_VM_1.png!
1980 296 Thibaud Ajas
1981 293 Thibaud Ajas
Configuration de la carte réseau de la VM_2 :
1982 293 Thibaud Ajas
1983 293 Thibaud Ajas
_Carte n°1 :_
1984 293 Thibaud Ajas
1985 293 Thibaud Ajas
> Activer la carte réseau
1986 293 Thibaud Ajas
> Mode d'accès : Réseau interne
1987 293 Thibaud Ajas
> Nom : Connexion_LDAP (ceci est un exemple, mettez ce que vous voulez, faut juste que ce soit le même que celui de la carte 2 de la VM_1)
1988 293 Thibaud Ajas
> -> Avancé
1989 293 Thibaud Ajas
> Mode Promiscuité : Tout autoriser
1990 296 Thibaud Ajas
1991 296 Thibaud Ajas
(Un exemple)
1992 296 Thibaud Ajas
!Config_carte1_VM_2.png!
1993 293 Thibaud Ajas
1994 293 Thibaud Ajas
Voila, on est bon pour la machine hôte, maintenant on passe à la configuration des VMs.
1995 293 Thibaud Ajas
1996 293 Thibaud Ajas
*A faire sur la VM_1 :*
1997 293 Thibaud Ajas
1998 293 Thibaud Ajas
Carte réseau n°1 : Adresse IPv4 : Méthode d’obtention : DHCP
1999 293 Thibaud Ajas
2000 293 Thibaud Ajas
Carte réseau n°2 : Adresse IPv4 : Méthode d’obtention : Manuelle :
2001 293 Thibaud Ajas
> Adress (Adresse): 192.168.1.2
2002 293 Thibaud Ajas
> Netmask (Masque de sous-réseau) : 255.255.255.0
2003 293 Thibaud Ajas
> Gateway (Passerelle) : 255.255.255.0
2004 293 Thibaud Ajas
2005 297 Thibaud Ajas
Cela devrait ressembler plus ou moins à ceci :
2006 299 Thibaud Ajas
!Config_cartes_reseau_VM_1.png!
2007 297 Thibaud Ajas
2008 297 Thibaud Ajas
*A faire sur la VM_2 :*
2009 297 Thibaud Ajas
2010 297 Thibaud Ajas
-> Advanced Menu -> Networking -> StaticIP
2011 297 Thibaud Ajas
> IP Adress : 192.168.1.3
2012 297 Thibaud Ajas
> Netmask : 255.255.255.0
2013 297 Thibaud Ajas
> (laissez le reste vide)
2014 297 Thibaud Ajas
-> Apply
2015 297 Thibaud Ajas
2016 297 Thibaud Ajas
Cela devrait ressembler à ça :
2017 297 Thibaud Ajas
!Config_carte_reseau_VM_2.png!
2018 297 Thibaud Ajas
2019 297 Thibaud Ajas
Et voila, maintenant pour accéder à votre site depuis votre machine hôte, rendez-vous à l'adresse 127.0.0.1:8080 dans votre navigateur préféré.
2020 300 Thibaud Ajas
Pour ce qui est du LDAP, les adresses vous sont données en page d'accueil lorsque vous lancez votre VM LDAP. Sachez cependant que votre machine hôte ne pourra en aucun cas communiquer avec la VM LDAP, et vice-versa. Le LDAP, quand à lui, n'aura aucun accès à internet.
2021 300 Thibaud Ajas
2022 297 Thibaud Ajas
2023 297 Thibaud Ajas
---