Developpement

Version 18 (Etienne Pallier, 05/02/2016 05:12 pm)

1 1 Etienne Pallier
h1. Labinvent 2.0 (cakephp3) - Développement
2 1 Etienne Pallier
3 1 Etienne Pallier
4 1 Etienne Pallier
5 3 Etienne Pallier
[[Installation|=> Page wiki pour l'installation]]
6 1 Etienne Pallier
7 4 Etienne Pallier
8 4 Etienne Pallier
{{toc}}
9 1 Etienne Pallier
10 1 Etienne Pallier
---
11 1 Etienne Pallier
12 1 Etienne Pallier
h2. LIENS UTILES
13 1 Etienne Pallier
14 1 Etienne Pallier
Activité sur le projet (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent
15 1 Etienne Pallier
16 1 Etienne Pallier
Browse files (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent/tree/master
17 1 Etienne Pallier
18 1 Etienne Pallier
Inventirap 1.3 (prod): https://inventirap.irap.omp.eu
19 1 Etienne Pallier
20 1 Etienne Pallier
Inventirap 1.3 (test): https://inventirap-test.irap.omp.eu/
21 1 Etienne Pallier
22 1 Etienne Pallier
Forum cakephp: http://discourse.cakephp.org
23 1 Etienne Pallier
24 1 Etienne Pallier
Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html
25 1 Etienne Pallier
26 1 Etienne Pallier
Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial
27 1 Etienne Pallier
28 1 Etienne Pallier
Cakephp CRUD: https://github.com/FriendsOfCake/crud
29 1 Etienne Pallier
30 1 Etienne Pallier
---
31 1 Etienne Pallier
32 1 Etienne Pallier
h2. TODOLIST
33 1 Etienne Pallier
34 1 Etienne Pallier
 * 1) Materiels/form
35 1 Etienne Pallier
36 1 Etienne Pallier
 * 2) ACL
37 1 Etienne Pallier
38 1 Etienne Pallier
* installer une VM avec LDAP
39 1 Etienne Pallier
40 1 Etienne Pallier
---
41 1 Etienne Pallier
42 10 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}Schéma de la base de données (v2.0.0)%
43 9 Etienne Pallier
44 9 Etienne Pallier
45 11 Etienne Pallier
{{thumbnail(BDD_IRAP.png, size=300, title=Pyros data model)}}
46 9 Etienne Pallier
47 9 Etienne Pallier
---
48 9 Etienne Pallier
49 12 Etienne Pallier
h2. ROADMAP - Plan de développement
50 12 Etienne Pallier
51 14 Etienne Pallier
Le stage se déroule de mi-avril à fin juin, soit sur 12 semaines (S1 à S12)
52 15 Etienne Pallier
_*(Ne pas oublier de rédiger le rapport de stage au fur et à mesure)*_
53 1 Etienne Pallier
54 18 Etienne Pallier
* S1-S3début (2,5 semaines) : version 2.0 - Cakephp3 + Php5 (version de base from bake) 		
55 1 Etienne Pallier
56 14 Etienne Pallier
57 18 Etienne Pallier
* S3fin-S5début (2 semaines) : version 2.1 - Implémentation complète du CRUD 		
58 14 Etienne Pallier
Implémentation complète du CRUD sur Materiels (+find), Suivis, et Emprunts (labels + validations + liens 1-N ou M-N entre tables...)
59 14 Etienne Pallier
60 14 Etienne Pallier
* S5fin-S6 (1,5 semaines): version 2.2 - Implémentation de toutes les autres actions 		
61 1 Etienne Pallier
Toutes les actions autres que CRUD (y-compris tout le javascript ajax...)
62 1 Etienne Pallier
63 14 Etienne Pallier
* S7 (1 semaine): version 2.3 - Implémentation du LDAP (vrai et fake) 			
64 12 Etienne Pallier
65 14 Etienne Pallier
* S8-S9début (1,5 semaines): version 2.4 - Implémentation des ACL (droits) 			
66 12 Etienne Pallier
67 14 Etienne Pallier
* S9fin-S10début (1 semaine): version 2.5 - Documents attaches aux materiels (+ photos) 			
68 12 Etienne Pallier
69 14 Etienne Pallier
* S10fin-S11début (1 semaine): version 2.6 - Cakephp3 + Php7 (compatible Php5) 			
70 12 Etienne Pallier
71 16 Etienne Pallier
* S11fin-S12 (1,5 semaines): version 2.7 - Autres ajouts (+ fin rédaction rapport de stage)
72 12 Etienne Pallier
73 17 Etienne Pallier
Voir le détail de la roadmap: https://projects.irap.omp.eu/projects/inventirap/roadmap
74 17 Etienne Pallier
75 7 Etienne Pallier
h2. Installation from scratch (Sous UBuntu)
76 1 Etienne Pallier
77 1 Etienne Pallier
h3. Création projet avec Composer
78 1 Etienne Pallier
79 1 Etienne Pallier
* Télécharger composer.phar : 
80 1 Etienne Pallier
"curl -s https://getcomposer.org/installer | php"
81 1 Etienne Pallier
82 1 Etienne Pallier
* Avec le Composer créer un nouveau projet : 
83 1 Etienne Pallier
"php composer.phar create-project --prefer-dist cakephp/app labinvent_2.0"
84 1 Etienne Pallier
85 1 Etienne Pallier
> Voir structure projet : http://book.cakephp.org/3.0/fr/intro/cakephp-folder-structure.html
86 1 Etienne Pallier
87 1 Etienne Pallier
* On rempli la base de données avec le fichier sql
88 1 Etienne Pallier
89 1 Etienne Pallier
* On indique la BD utilisé à CakePHP dans le fichier config/app.php, propriété "Datasources".
90 1 Etienne Pallier
91 1 Etienne Pallier
* On se place à la racine du projet
92 1 Etienne Pallier
93 1 Etienne Pallier
* On génère le code Scaffold : 
94 1 Etienne Pallier
"bin/cake bake all nom_table" --> ça génére les modeles, les vues, et les controlleurs.
95 1 Etienne Pallier
96 1 Etienne Pallier
> Commande (en une fois) :
97 1 Etienne Pallier
> > 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
98 1 Etienne Pallier
99 1 Etienne Pallier
h3. Modification de la base de données 
100 1 Etienne Pallier
> Une version du sql corrigée au fur et à mesure est disponible dans le git :
101 1 Etienne Pallier
> > Dans database/, le fichier labinvent_2.0_19-04-16 correspond à la création de la base.
102 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.
103 1 Etienne Pallier
104 1 Etienne Pallier
* Création table "config"
105 1 Etienne Pallier
106 1 Etienne Pallier
h3. Autres remarques lors du dévellopement
107 1 Etienne Pallier
108 1 Etienne Pallier
109 1 Etienne Pallier
* CakePHP permet de se configurer en PHP, on pourrait permettre au super-admin de configurer sa base, les noms, les logos, et autres graphiquement outils config dans la section outils ou dans le script d'installation, ou un autre script ?
110 1 Etienne Pallier
<pre>
111 1 Etienne Pallier
Configure::write('nomObjet', [
112 1 Etienne Pallier
    'attribut1' => 'valeur1',
113 1 Etienne Pallier
    'attribut2' => 'valeur2'
114 1 Etienne Pallier
]);
115 1 Etienne Pallier
</pre>
116 1 Etienne Pallier
117 1 Etienne Pallier
  La configuration du mode debug necessite l'extension "pdo_sqlite" (php5-sqlite pour ubuntu)...
118 1 Etienne Pallier
  Et même avec, ça marche pas (mais il n'y a plus d'erreurs dans le log de CakePHP)... vérifier syntaxe : "Configure::write('debug', false);".
119 1 Etienne Pallier
--> Syntaxe correct mais modifie la valeur momentanément...
120 1 Etienne Pallier
--> Utilisation de variable session pour un mode debug (mode install) personalisé (mode debug de CakePHP3, ne doit pas être actif sur un serveur de production). 
121 1 Etienne Pallier
122 1 Etienne Pallier
* Avec CakePHP3 on peut gérér les ACL avec plusieurs gestionnaires d’autorisation propre à chaque profils (rôles), et une table users dans la base. 
123 1 Etienne Pallier
(Lorsqu'un utilisateur se connecte, le gestionnaire de son type de compte se déclenche et les autres gestionnaires sont ignorés)
124 1 Etienne Pallier
125 1 Etienne Pallier
> Voir (explication) : http://book.cakephp.org/3.0/fr/controllers/components/authentication.html
126 1 Etienne Pallier
> Voir (exemple) : http://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
127 1 Etienne Pallier
> Pour faire des tests d'authentication : http://book.cakephp.org/3.0/fr/development/testing.html#testing-authentication
128 1 Etienne Pallier
129 1 Etienne Pallier
130 1 Etienne Pallier
* La commande Bake de CakePHP3, permet aussi de générer des tests...
131 1 Etienne Pallier
---
132 1 Etienne Pallier
133 1 Etienne Pallier
* 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")...
134 1 Etienne Pallier
> http://book.cakephp.org/3.0/fr/contributing/cakephp-coding-conventions.html
135 1 Etienne Pallier
136 1 Etienne Pallier
* 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.
137 1 Etienne Pallier
Le mot de passe "login" = "$2y$10$LZzpws3oDidBcqO/Fy1RTedLLk3ENTmplny5J7bZ6R1PqFoGOw3Ma".
138 1 Etienne Pallier
139 1 Etienne Pallier
* Vérifier que la migration vers la prochaine version de cakephp3 (3.3 ?) sera facile... (décrire la procédure à suivre)
140 1 Etienne Pallier
--> Une migration vers une version mineur 3.2 => 3.3, se réalise avec la mise à jour de CakePHP à l'aide de Composer
141 1 Etienne Pallier
--> Puis il faut regarder les changements dans la page migration correspondant à la version voulu et adapter les changements au code.
142 1 Etienne Pallier
==>http://book.cakephp.org/3.0/fr/appendices/3-2-migration-guide.html
143 1 Etienne Pallier
144 1 Etienne Pallier
* Outil (plugin) "DebugKit" de CakePHP3 : (a venir)
145 1 Etienne Pallier
146 8 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}NOTES FOR ECLIPSE USERS%
147 1 Etienne Pallier
148 1 Etienne Pallier
0) Install Eclipse (if necessary)
149 1 Etienne Pallier
150 1 Etienne Pallier
Get the Eclipse version for Php
151 1 Etienne Pallier
152 1 Etienne Pallier
153 1 Etienne Pallier
1) Deactivate CA certificate verification
154 1 Etienne Pallier
155 1 Etienne Pallier
Window -> Preferences -> Team -> git -> configuration -> Add entry
156 1 Etienne Pallier
157 1 Etienne Pallier
Key = http.sslVerify
158 1 Etienne Pallier
Value = false
159 1 Etienne Pallier
160 1 Etienne Pallier
2) Fetch the project
161 1 Etienne Pallier
162 1 Etienne Pallier
File/Import project from git
163 1 Etienne Pallier
164 1 Etienne Pallier
Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/labinvent.git
165 1 Etienne Pallier
166 1 Etienne Pallier
Directory: 
167 1 Etienne Pallier
- par défaut, il propose : /Users/epallier/git/labinvent
168 1 Etienne Pallier
- mais on peut le mettre n'importe où ailleurs, 
169 1 Etienne Pallier
par exemple, on pourrait le mettre directement dans le repertoire web de Apache:
170 1 Etienne Pallier
/Applications/XAMPP/xamppfiles/htdocs 
171 1 Etienne Pallier
(si on veut que le projet s'execute directement dans le dossier web apache htdocs, mais ca n'est pas obligatoire...)
172 1 Etienne Pallier
173 1 Etienne Pallier
initial branch: master
174 1 Etienne Pallier
remote name: origin
175 1 Etienne Pallier
176 1 Etienne Pallier
Import as general project
177 1 Etienne Pallier
178 1 Etienne Pallier
Project name: LABINVENT
179 1 Etienne Pallier
180 1 Etienne Pallier
181 1 Etienne Pallier
182 1 Etienne Pallier
183 1 Etienne Pallier
3) Configure the project
184 1 Etienne Pallier
185 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)
186 1 Etienne Pallier
Si ça n'est pas le cas, vérifier que le fichier .project (à la racine) contient bien
187 1 Etienne Pallier
	<natures>
188 1 Etienne Pallier
		<nature>org.eclipse.php.core.PHPNature</nature>
189 1 Etienne Pallier
	</natures>
190 1 Etienne Pallier
NB : Le fichier .project est normalement versionné et donc le projet labinvent devrait être reconnu automatiquement comme projet PHP
191 1 Etienne Pallier
192 1 Etienne Pallier
193 1 Etienne Pallier
b) S'assurer que les fichiers de vue de cakephp ("*.ctp") sont bien reconnus comme des fichiers PHP.
194 1 Etienne Pallier
Pour tester cela, ouvrir le fichier de vue cakephp/app/View/Categories/get_all.ctp
195 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. 
196 1 Etienne Pallier
Il faut donc associer l'editeur Php a l'extension de fichier "*.ctp" :
197 1 Etienne Pallier
- Preferences/General/Content types
198 1 Etienne Pallier
- Dans la liste "Content types", ouvrir la section "Text", selectionner PHP
199 1 Etienne Pallier
- Ajouter l'extension "*.ctp"
200 1 Etienne Pallier
201 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) :
202 1 Etienne Pallier
- Clic-droit sur le projet, Propriétés
203 1 Etienne Pallier
- PHP
204 1 Etienne Pallier
- Interpreter
205 1 Etienne Pallier
- Enable project specific settings, PHP Version : "PHP 5.6"
206 1 Etienne Pallier
207 1 Etienne Pallier
d) S'assurer que le texte est bien encodé en UTF-8 par défaut :
208 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
209 1 Etienne Pallier
(
210 1 Etienne Pallier
Il faudrait commiter ça mais je ne sais pas trop si c'est risqué ou pas.
211 1 Etienne Pallier
Les fichiers concernés sont :
212 1 Etienne Pallier
- .project (déjà versionné) : car il commence par la ligne "<?xml version="1.0" encoding="UTF-8"?>"
213 1 Etienne Pallier
- 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"
214 1 Etienne Pallier
)
215 1 Etienne Pallier
216 1 Etienne Pallier
Les éléments suivants sont normalement DEJA ignorés par git, à vérifier :
217 1 Etienne Pallier
- .settings/
218 1 Etienne Pallier
- cakephp/app/tmp/ : tout sauf 
219 1 Etienne Pallier
	- documents/
220 1 Etienne Pallier
- cakephp/app/Config/ :
221 1 Etienne Pallier
	- database.php
222 1 Etienne Pallier
	- labinvent.php
223 1 Etienne Pallier
224 1 Etienne Pallier
225 1 Etienne Pallier
226 1 Etienne Pallier
227 1 Etienne Pallier
228 1 Etienne Pallier
<pre>
229 1 Etienne Pallier
*********************************************************
230 1 Etienne Pallier
REMARQUES INTERRESSANTES (MAIS VOUS POUVEZ LES IGNORER)
231 1 Etienne Pallier
232 1 Etienne Pallier
// DEBUT DES REMARQUES
233 1 Etienne Pallier
234 1 Etienne Pallier
A la racine du projet, j'ai plusieurs éléments cachés de configuration Eclipse :
235 1 Etienne Pallier
236 1 Etienne Pallier
1) fichier .buildpath 
237 1 Etienne Pallier
Il est versionné puisque "svn status .buildpath" (depuis la console) ne donne rien
238 1 Etienne Pallier
Il contient :
239 1 Etienne Pallier
240 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
241 1 Etienne Pallier
<buildpath>
242 1 Etienne Pallier
        <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
243 1 Etienne Pallier
        <buildpathentry kind="lib" path="docs/mockup/mockup_html.zip"/>
244 1 Etienne Pallier
        <buildpathentry kind="src" path="cakephp"/>
245 1 Etienne Pallier
</buildpath>
246 1 Etienne Pallier
247 1 Etienne Pallier
2) fichier .project
248 1 Etienne Pallier
Il est déjà versionné
249 1 Etienne Pallier
Il contient :
250 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
251 1 Etienne Pallier
<projectDescription>
252 1 Etienne Pallier
        <name>invirap</name>
253 1 Etienne Pallier
        <comment></comment>
254 1 Etienne Pallier
        <projects>
255 1 Etienne Pallier
        </projects>
256 1 Etienne Pallier
        <buildSpec>
257 1 Etienne Pallier
                <buildCommand>
258 1 Etienne Pallier
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
259 1 Etienne Pallier
                        <arguments>
260 1 Etienne Pallier
                        </arguments>
261 1 Etienne Pallier
                </buildCommand>
262 1 Etienne Pallier
                <buildCommand>
263 1 Etienne Pallier
                        <name>org.eclipse.wst.validation.validationbuilder</name>
264 1 Etienne Pallier
                        <arguments>
265 1 Etienne Pallier
                        </arguments>
266 1 Etienne Pallier
                </buildCommand>
267 1 Etienne Pallier
                <buildCommand>
268 1 Etienne Pallier
                        <name>org.eclipse.dltk.core.scriptbuilder</name>
269 1 Etienne Pallier
                        <arguments>
270 1 Etienne Pallier
                        </arguments>
271 1 Etienne Pallier
                </buildCommand>
272 1 Etienne Pallier
        </buildSpec>
273 1 Etienne Pallier
        <natures>
274 1 Etienne Pallier
                <nature>org.eclipse.php.core.PHPNature</nature>
275 1 Etienne Pallier
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
276 1 Etienne Pallier
        </natures>
277 1 Etienne Pallier
</projectDescription>
278 1 Etienne Pallier
279 1 Etienne Pallier
3) dossier .settings/ (exclus de svn)
280 1 Etienne Pallier
Il contient 3 fichiers :
281 1 Etienne Pallier
282 1 Etienne Pallier
- org.eclipse.core.resources.prefs : bizarrement, il ne contient que quelques références seulement :
283 1 Etienne Pallier
eclipse.preferences.version=1
284 1 Etienne Pallier
encoding//cakephp/app/Controller/MaterielsController.php=UTF-8
285 1 Etienne Pallier
encoding//cakephp/app/View/Elements/menu_view.ctp=UTF-8
286 1 Etienne Pallier
encoding//cakephp/app/View/Layouts/default.ctp=UTF-8
287 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/index.ctp=UTF-8
288 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/scaffold.view.ctp=UTF-8
289 1 Etienne Pallier
encoding//database/Upd_TableConstraints.sql=UTF-8
290 1 Etienne Pallier
encoding//database/update/README.txt=UTF-8
291 1 Etienne Pallier
encoding//docs/HOWTO.txt=UTF-8
292 1 Etienne Pallier
encoding//install/HOWTO.txt=UTF-8
293 1 Etienne Pallier
encoding/<project>=UTF-8
294 1 Etienne Pallier
295 1 Etienne Pallier
- org.eclipse.php.core.prefs
296 1 Etienne Pallier
eclipse.preferences.version=1
297 1 Etienne Pallier
include_path=0;/invirap\u00051;/invirap/docs/mockup/mockup_html.zip
298 1 Etienne Pallier
299 1 Etienne Pallier
- org.eclipse.wst.common.project.facet.core.xml : sans doute inutile ? (lié à "Faceted Project Validation Builder" dans Properties/Builders)
300 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
301 1 Etienne Pallier
<faceted-project>
302 1 Etienne Pallier
  <fixed facet="php.core.component"/>
303 1 Etienne Pallier
  <fixed facet="php.component"/>
304 1 Etienne Pallier
  <installed facet="php.core.component" version="1"/>
305 1 Etienne Pallier
  <installed facet="php.component" version="5.4"/>
306 1 Etienne Pallier
</faceted-project>
307 1 Etienne Pallier
308 1 Etienne Pallier
// FIN DES REMARQUES
309 1 Etienne Pallier
*********************************************************
310 1 Etienne Pallier
</pre>
311 1 Etienne Pallier
312 1 Etienne Pallier
4) (TODO:) Set Code style
313 1 Etienne Pallier
314 1 Etienne Pallier
Window/Preferences : PHP / Editor
315 1 Etienne Pallier
...
316 1 Etienne Pallier
317 1 Etienne Pallier
5) (TODO: virtualenv) Now, once the PHP5 virtual environment is installed (see above),
318 1 Etienne Pallier
set it in Eclipse as the project interpreter:
319 1 Etienne Pallier
320 1 Etienne Pallier
(cf http://virtphp.org)
321 1 Etienne Pallier
322 1 Etienne Pallier
...
323 1 Etienne Pallier
324 1 Etienne Pallier
6) (TODO:) Test
325 1 Etienne Pallier
326 1 Etienne Pallier
327 1 Etienne Pallier
7) (TODO:) Run
328 1 Etienne Pallier
329 1 Etienne Pallier
check http://localhost:8080/