Developpement

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