Documentation technique
Version 21 (Thibaud Ajas, 05/23/2017 04:51 pm)
1 | 1 | Etienne Pallier | h1. Documentation technique |
---|---|---|---|
2 | 1 | Etienne Pallier | |
3 | 1 | Etienne Pallier | |
4 | 3 | Etienne Pallier | Cette page décrit les différents concepts techniques utilisés dans le projet. |
5 | 3 | Etienne Pallier | |
6 | 1 | Etienne Pallier | |
7 | 5 | Etienne Pallier | [ [[Labinvent_nouvelle_version|Retour au sommmaire]] ] |
8 | 4 | Etienne Pallier | |
9 | 4 | Etienne Pallier | |
10 | 4 | Etienne Pallier | |
11 | 3 | Etienne Pallier | |
12 | 1 | Etienne Pallier | {{toc}} |
13 | 1 | Etienne Pallier | |
14 | 1 | Etienne Pallier | --- |
15 | 1 | Etienne Pallier | |
16 | 1 | Etienne Pallier | h2. LIENS UTILES |
17 | 1 | Etienne Pallier | |
18 | 1 | Etienne Pallier | * HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting |
19 | 1 | Etienne Pallier | |
20 | 1 | Etienne Pallier | * [[Installation|Page wiki pour l'installation]] |
21 | 1 | Etienne Pallier | |
22 | 1 | Etienne Pallier | * Version majeure en cours (2.1): https://projects.irap.omp.eu/versions/101 |
23 | 1 | Etienne Pallier | |
24 | 1 | Etienne Pallier | * Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master |
25 | 1 | Etienne Pallier | |
26 | 1 | Etienne Pallier | * Browse files (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent/tree/master |
27 | 1 | Etienne Pallier | |
28 | 1 | Etienne Pallier | * Inventirap 1.3 (prod): https://inventirap.irap.omp.eu |
29 | 1 | Etienne Pallier | |
30 | 1 | Etienne Pallier | * Inventirap 1.3 (test): https://inventirap-test.irap.omp.eu/ |
31 | 1 | Etienne Pallier | |
32 | 1 | Etienne Pallier | * CakePhp: |
33 | 1 | Etienne Pallier | |
34 | 1 | Etienne Pallier | * ROADMAP: https://github.com/cakephp/cakephp/wiki |
35 | 1 | Etienne Pallier | * Forum cakephp: http://discourse.cakephp.org |
36 | 1 | Etienne Pallier | * Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html |
37 | 1 | Etienne Pallier | * Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial |
38 | 1 | Etienne Pallier | * Cakephp CRUD: https://github.com/FriendsOfCake/crud |
39 | 1 | Etienne Pallier | |
40 | 1 | Etienne Pallier | --- |
41 | 1 | Etienne Pallier | |
42 | 1 | Etienne Pallier | h2. Schéma de la base de données (v2.0.0) |
43 | 1 | Etienne Pallier | |
44 | 1 | Etienne Pallier | |
45 | 1 | Etienne Pallier | {{thumbnail(BDD_IRAP.png, size=300, title=Pyros data model)}} |
46 | 1 | Etienne Pallier | |
47 | 1 | Etienne Pallier | --- |
48 | 1 | Etienne Pallier | |
49 | 17 | Alexandre Cases | h2. Gestion des mails de management |
50 | 1 | Etienne Pallier | |
51 | 20 | Thibaud Ajas | * L'envoi de mail est réalisé grace à une adresse qu'il faut créer pour labinvent. Le protocole d'envoi est à définir dans app.php selon le serveur choisi. Lors de l'envoi d'un mail il faut utiliser le transport 'dev' en local. |
52 | 1 | Etienne Pallier | |
53 | 18 | Alexandre Cases | * L'application étant paramétré pour utiliser gmail, il est préférable de le garder et de créer une adresse gmail. |
54 | 18 | Alexandre Cases | Puis il faut activer l'option "utiliser des applications moins sécurisé" à l'adresse suivante : https://www.google.com/settings/security/lesssecureapps |
55 | 18 | Alexandre Cases | Enfin il faut remplir le champ "username" avec l'adresse créer et le champ "password" avec son mot de passe associé (voir exemple gmail plus bas). |
56 | 18 | Alexandre Cases | |
57 | 17 | Alexandre Cases | * Pour changer de mail et de transport, il faut aller dans la section Email/Transport de app.php, et adapter le bloc suivant sous le 'default' (exemple avec 'gmail') |
58 | 1 | Etienne Pallier | |
59 | 17 | Alexandre Cases | <pre> |
60 | 19 | Alexandre Cases | 'EmailTransport' => [ |
61 | 19 | Alexandre Cases | ... |
62 | 17 | Alexandre Cases | 'dev' => [ |
63 | 17 | Alexandre Cases | 'className' => 'Smtp', |
64 | 17 | Alexandre Cases | 'host' => 'ssl://smtp.gmail.com', |
65 | 17 | Alexandre Cases | 'port' => 465, |
66 | 17 | Alexandre Cases | 'username' => 'xxxxxxxxxxxxxxxxxxxxx', |
67 | 17 | Alexandre Cases | 'password' => 'xxxxxxxxxxxxxxxxxxxxx', |
68 | 17 | Alexandre Cases | 'context' => [ |
69 | 17 | Alexandre Cases | 'ssl' => [ |
70 | 17 | Alexandre Cases | 'verify_peer' => false, |
71 | 17 | Alexandre Cases | 'verify_peer_name' => false, |
72 | 17 | Alexandre Cases | 'allow_self_signed' => true |
73 | 17 | Alexandre Cases | ] |
74 | 17 | Alexandre Cases | ] |
75 | 17 | Alexandre Cases | ], |
76 | 19 | Alexandre Cases | ], |
77 | 17 | Alexandre Cases | </pre> |
78 | 1 | Etienne Pallier | |
79 | 17 | Alexandre Cases | * Adresse créer pour tester à l'IRAP : |
80 | 17 | Alexandre Cases | Mail : labinvent2@gmail.com / Mot De Passe : cakephp3 |
81 | 9 | Etienne Pallier | |
82 | 9 | Etienne Pallier | h2. Tests (Mise en place et éxécution) |
83 | 14 | Etienne Pallier | |
84 | 14 | Etienne Pallier | h3. Génération automatique des tests (avec bake) |
85 | 1 | Etienne Pallier | |
86 | 1 | Etienne Pallier | * CakePHP permet aussi de gérer les tests facilement et de générer leurs squelettes avec la commande "bake". |
87 | 1 | Etienne Pallier | --> Pour commencer il faut récupérer phpunit (https://phpunit.de/), si la version de PHP est inférieur à 5.6, il faut télécharger le phpunit.phar compatible avec PHP, sinon il faut prendre la derniere version (compatible avec PHP7 également). |
88 | 1 | Etienne Pallier | --> Il faut configurer une base de donnée pour les tests dans "app.php" |
89 | 1 | Etienne Pallier | <pre> |
90 | 1 | Etienne Pallier | Commande génération test (se placer à la racine du projet ./labinvent) : |
91 | 1 | Etienne Pallier | |
92 | 1 | Etienne Pallier | bin/cake bake test "type_src" "nom_table" |
93 | 1 | Etienne Pallier | |
94 | 1 | Etienne Pallier | "type_src" correspond à Controller, Table, Entity, Form, Helper, Fixture... |
95 | 14 | Etienne Pallier | </pre> |
96 | 14 | Etienne Pallier | |
97 | 14 | Etienne Pallier | |
98 | 14 | Etienne Pallier | h3. Ajout manuel d'un test |
99 | 14 | Etienne Pallier | |
100 | 14 | Etienne Pallier | h3. Exécution des tests |
101 | 14 | Etienne Pallier | |
102 | 14 | Etienne Pallier | h3. Couverture de tests |
103 | 14 | Etienne Pallier | |
104 | 14 | Etienne Pallier | Voici ce qui est testé actuellement: |
105 | 14 | Etienne Pallier | |
106 | 14 | Etienne Pallier | bla bla bla... |
107 | 15 | Etienne Pallier | |
108 | 9 | Etienne Pallier | --- |
109 | 10 | Etienne Pallier | |
110 | 1 | Etienne Pallier | h2. LDAP |
111 | 1 | Etienne Pallier | |
112 | 1 | Etienne Pallier | * Pour le développement, j'utilise openLDAP pour avoir un LDAP et y connecter Labinvent2, pour gérer openLDAP, j'utilise l'outil de configuration phpLDAPadmin. |
113 | 1 | Etienne Pallier | --> J'utilise une VM oû les outils d'openLDAP sont déja installés et configurés. |
114 | 1 | Etienne Pallier | --> Il suffit de récupérer la machine virtuelle prête à l'emploi, et de lui attribuer manuellement une adresse IP libre (en général x.x.x.253/254) et son masque |
115 | 1 | Etienne Pallier | --> Aller sur une autre machine (physique ou virtuelle), et taper l'adresse ip défini précédement dans un navigateur |
116 | 1 | Etienne Pallier | --> Vous accéderez à une page de gestion (phpLdapAdmin) |
117 | 1 | Etienne Pallier | --> ATTENTION -> Votre PC doit être branché en filaire pour que la machine virtuelle soit accessible |
118 | 1 | Etienne Pallier | > https://www.turnkeylinux.org/openldap |
119 | 10 | Etienne Pallier | |
120 | 9 | Etienne Pallier | h2. Gestion des ACL (droits des utilisateurs selon leur profil) |
121 | 9 | Etienne Pallier | |
122 | 9 | Etienne Pallier | * CakePHP3 n'intègre plus un composant pour un gérer les ACLs, un plugin est à disposition pour remplacer ce composant, hélas il n'est pas stable, et le fait qu'il utilise la base de données ralenti les applications, car le composant effectue beaucoup de requêtes. |
123 | 1 | Etienne Pallier | |
124 | 1 | Etienne Pallier | * De plus, il est conseillé pour des autorisations basiques d'utiliser la fonction isAuthorized($user) dans les controller. |
125 | 1 | Etienne Pallier | |
126 | 1 | Etienne Pallier | * Dans labinvent2, on utilise la fonction isAuthorized($user), qui définit les choses que les utilisateurs connecté peuvent faire et donne tous les droits au Super-Admin dans AppContoller.php. |
127 | 1 | Etienne Pallier | Puis, dans chaque controller la fonction est redéclarer, on définit les actions possible pour chaque rôle. |
128 | 1 | Etienne Pallier | |
129 | 1 | Etienne Pallier | * Procédure ajout d'une fonctionnalité |
130 | 1 | Etienne Pallier | - On ajoute la fonctionnalité dans le controller |
131 | 1 | Etienne Pallier | - Si la fonctionnalité est accessible par tout le monde, il faut l'ajouter dans le isAuthorized($user) de l'AppController |
132 | 1 | Etienne Pallier | - Sinon il faut ajouter la condition lié à l'action dans la fonction isAuthorized($user) du controller correspondant (1ère fonction de tous les controllers) |
133 | 12 | Alexandre Cases | - Enfin lorsque vous réalisez la vue correspondante, il faut cacher les champs/boutons de votre fonctionnalité en fonction de vos droits, une variable "$role" est accessible dans toutes les vues, ainsi qu'une variable "$username" (nom de l'utilisateur, pas le login) pour tester la proriété d'un objet dans une vue. |
134 | 13 | Alexandre Cases | |
135 | 13 | Alexandre Cases | * Si vous avez besoin de vérifier la propriété d'un objet pour un utilisateur, il faut utiliser la fonction "isOwnedBy" (déja défini dans materiels, suivis, emprunts) |
136 | 13 | Alexandre Cases | <pre> |
137 | 13 | Alexandre Cases | * Exemple de la fonction provenant du controller Materiels : |
138 | 13 | Alexandre Cases | |
139 | 13 | Alexandre Cases | public function isOwnedBy($id, $nomUtilisateur) |
140 | 13 | Alexandre Cases | { |
141 | 13 | Alexandre Cases | return ($this->Materiels->exists(['id' => $id, 'nom_createur' => $nomUtilisateur]) || $this->Materiels->exists(['id' => $id, 'nom_responsable' => nomUtilisateur])); |
142 | 13 | Alexandre Cases | } |
143 | 13 | Alexandre Cases | </pre> |
144 | 12 | Alexandre Cases | |
145 | 12 | Alexandre Cases | * *Exemple 1 :* Ajout de la fonctionnalité désarchivé avec un bouton sur la view d'un matériel (pour les adminplus+) |
146 | 12 | Alexandre Cases | * On se place dans le controller Materiels, on y définit la fonction correspondante "setStatusArchived($id)". |
147 | 12 | Alexandre Cases | * Dans la fonction "isAuthorized($user)" du même controller, rajouter les lignes suivante : |
148 | 12 | Alexandre Cases | <pre> |
149 | 12 | Alexandre Cases | if (in_array($action, ['setStatusArchived'])) { |
150 | 12 | Alexandre Cases | if (in_array($role, ['Administration Plus', 'Super Administrateur'])) { |
151 | 12 | Alexandre Cases | return true; |
152 | 12 | Alexandre Cases | } |
153 | 12 | Alexandre Cases | } |
154 | 12 | Alexandre Cases | </pre> |
155 | 12 | Alexandre Cases | * Puis on se place dans la view de materiels, et on affiche le bouton selon les mêmes conditions que l'action "setStatusArchived($id)" dans la fonction "isAuthorized($user)". |
156 | 12 | Alexandre Cases | |
157 | 12 | Alexandre Cases | * *Exemple 2 :* Ajout d'une action "exportQrCode()" (pas très utile) pour tout le monde |
158 | 12 | Alexandre Cases | * On se place dans la fonction "isAuthorized($user)" de l'AppController. |
159 | 12 | Alexandre Cases | * Puis on ajoute l'action à la liste qui est autoriser à tout le monde |
160 | 12 | Alexandre Cases | <pre> |
161 | 12 | Alexandre Cases | //Pour tout le monde |
162 | 12 | Alexandre Cases | if (in_array($action, ['index', 'find', 'view', 'creer', 'add', 'exportQrCode'])) return true; |
163 | 1 | Etienne Pallier | </pre> |
164 | 11 | Etienne Pallier | |
165 | 1 | Etienne Pallier | h2. Autres remarques |
166 | 1 | Etienne Pallier | |
167 | 9 | Etienne Pallier | |
168 | 1 | Etienne Pallier | * Mode debug personnalisé : |
169 | 1 | Etienne Pallier | > 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é. |
170 | 1 | Etienne Pallier | |
171 | 1 | Etienne Pallier | > Voir : http://book.cakephp.org/3.0/fr/development/testing.html |
172 | 1 | Etienne Pallier | |
173 | 1 | Etienne Pallier | * Pour charger une librairie (ex : phpqrcode, ...) |
174 | 1 | Etienne Pallier | > Voir : http://book.cakephp.org/3.0/fr/core-libraries/app.html#charger-les-fichiers-de-vendor |
175 | 9 | Etienne Pallier | |
176 | 1 | 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éveloppé pour CakePHP3. |
177 | 1 | Etienne Pallier | > Voir : https://github.com/FriendsOfCake/CakePdf |
178 | 1 | Etienne Pallier | |
179 | 1 | Etienne Pallier | * Pour le JavaScript, le JS Helper a été retiré |
180 | 16 | Alexandre Cases | > Voir : http://book.cakephp.org/3.0/fr/appendices/3-0-migration-guide.html#jshelper |
181 | 16 | Alexandre Cases | |
182 | 16 | Alexandre Cases | * Pour installer un composant avec le composer : |
183 | 16 | Alexandre Cases | <pre> |
184 | 16 | Alexandre Cases | A la racine : |
185 | 16 | Alexandre Cases | ./composer.phar require --dev phpunit/phpunit |
186 | 16 | Alexandre Cases | </pre> |
187 | 16 | Alexandre Cases | |
188 | 16 | Alexandre Cases | * Pour supprimer un composant avec le composer : |
189 | 16 | Alexandre Cases | <pre> |
190 | 16 | Alexandre Cases | A la racine : |
191 | 16 | Alexandre Cases | ./composer.phar remove phpunit/phpunit |
192 | 1 | Etienne Pallier | </pre> |