Developpement

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