Developpement

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