Documentation technique
Version 16 (Alexandre Cases, 06/06/2016 10:27 am)
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 | 1 | Etienne Pallier | |
50 | 1 | Etienne Pallier | |
51 | 9 | Etienne Pallier | h2. Gestion des mails de management |
52 | 1 | Etienne Pallier | |
53 | 1 | Etienne Pallier | * L'envoi de mail en local est réalisé grace à une adresse créer pour labinvent et donc le protocole d'envoi est défini dans app.php, lors de l'envoi d'un mail il faut utiliser le transport 'gmail' en local. |
54 | 1 | Etienne Pallier | > Mail : labinvent2@gmail.com / Mot De Passe : cakephp3 |
55 | 1 | Etienne Pallier | |
56 | 1 | Etienne Pallier | * Pour changer de mail et de transport, il faut aller dans la section Email/Transport de app.php, remplacer l'adresse et son mot de passe, puis il faut définir un protocole d'envoi compatible avec l'adresse mail rentré précédemment. |
57 | 1 | Etienne Pallier | |
58 | 9 | Etienne Pallier | h2. Tests (Mise en place et éxécution) |
59 | 9 | Etienne Pallier | |
60 | 14 | Etienne Pallier | h3. Génération automatique des tests (avec bake) |
61 | 14 | Etienne Pallier | |
62 | 1 | Etienne Pallier | * CakePHP permet aussi de gérer les tests facilement et de générer leurs squelettes avec la commande "bake". |
63 | 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). |
64 | 1 | Etienne Pallier | --> Il faut configurer une base de donnée pour les tests dans "app.php" |
65 | 1 | Etienne Pallier | <pre> |
66 | 1 | Etienne Pallier | Commande génération test (se placer à la racine du projet ./labinvent) : |
67 | 1 | Etienne Pallier | |
68 | 1 | Etienne Pallier | bin/cake bake test "type_src" "nom_table" |
69 | 1 | Etienne Pallier | |
70 | 1 | Etienne Pallier | "type_src" correspond à Controller, Table, Entity, Form, Helper, Fixture... |
71 | 1 | Etienne Pallier | </pre> |
72 | 14 | Etienne Pallier | |
73 | 14 | Etienne Pallier | |
74 | 14 | Etienne Pallier | h3. Ajout manuel d'un test |
75 | 14 | Etienne Pallier | |
76 | 14 | Etienne Pallier | h3. Exécution des tests |
77 | 14 | Etienne Pallier | |
78 | 14 | Etienne Pallier | h3. Couverture de tests |
79 | 14 | Etienne Pallier | |
80 | 14 | Etienne Pallier | Voici ce qui est testé actuellement: |
81 | 14 | Etienne Pallier | |
82 | 14 | Etienne Pallier | bla bla bla... |
83 | 14 | Etienne Pallier | |
84 | 15 | Etienne Pallier | --- |
85 | 9 | Etienne Pallier | |
86 | 10 | Etienne Pallier | h2. LDAP |
87 | 1 | Etienne Pallier | |
88 | 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. |
89 | 1 | Etienne Pallier | --> J'utilise une VM oû les outils d'openLDAP sont déja installés et configurés. |
90 | 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 |
91 | 1 | Etienne Pallier | --> Aller sur une autre machine (physique ou virtuelle), et taper l'adresse ip défini précédement dans un navigateur |
92 | 1 | Etienne Pallier | --> Vous accéderez à une page de gestion (phpLdapAdmin) |
93 | 1 | Etienne Pallier | --> ATTENTION -> Votre PC doit être branché en filaire pour que la machine virtuelle soit accessible |
94 | 1 | Etienne Pallier | > https://www.turnkeylinux.org/openldap |
95 | 1 | Etienne Pallier | |
96 | 10 | Etienne Pallier | h2. Gestion des ACL (droits des utilisateurs selon leur profil) |
97 | 9 | Etienne Pallier | |
98 | 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. |
99 | 9 | Etienne Pallier | |
100 | 1 | Etienne Pallier | * De plus, il est conseillé pour des autorisations basiques d'utiliser la fonction isAuthorized($user) dans les controller. |
101 | 1 | Etienne Pallier | |
102 | 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. |
103 | 1 | Etienne Pallier | Puis, dans chaque controller la fonction est redéclarer, on définit les actions possible pour chaque rôle. |
104 | 1 | Etienne Pallier | |
105 | 1 | Etienne Pallier | * Procédure ajout d'une fonctionnalité |
106 | 1 | Etienne Pallier | - On ajoute la fonctionnalité dans le controller |
107 | 1 | Etienne Pallier | - Si la fonctionnalité est accessible par tout le monde, il faut l'ajouter dans le isAuthorized($user) de l'AppController |
108 | 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) |
109 | 1 | Etienne Pallier | - 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. |
110 | 12 | Alexandre Cases | |
111 | 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) |
112 | 13 | Alexandre Cases | <pre> |
113 | 13 | Alexandre Cases | * Exemple de la fonction provenant du controller Materiels : |
114 | 13 | Alexandre Cases | |
115 | 13 | Alexandre Cases | public function isOwnedBy($id, $nomUtilisateur) |
116 | 13 | Alexandre Cases | { |
117 | 13 | Alexandre Cases | return ($this->Materiels->exists(['id' => $id, 'nom_createur' => $nomUtilisateur]) || $this->Materiels->exists(['id' => $id, 'nom_responsable' => nomUtilisateur])); |
118 | 13 | Alexandre Cases | } |
119 | 13 | Alexandre Cases | </pre> |
120 | 13 | Alexandre Cases | |
121 | 12 | Alexandre Cases | * *Exemple 1 :* Ajout de la fonctionnalité désarchivé avec un bouton sur la view d'un matériel (pour les adminplus+) |
122 | 12 | Alexandre Cases | * On se place dans le controller Materiels, on y définit la fonction correspondante "setStatusArchived($id)". |
123 | 12 | Alexandre Cases | * Dans la fonction "isAuthorized($user)" du même controller, rajouter les lignes suivante : |
124 | 12 | Alexandre Cases | <pre> |
125 | 12 | Alexandre Cases | if (in_array($action, ['setStatusArchived'])) { |
126 | 12 | Alexandre Cases | if (in_array($role, ['Administration Plus', 'Super Administrateur'])) { |
127 | 12 | Alexandre Cases | return true; |
128 | 12 | Alexandre Cases | } |
129 | 12 | Alexandre Cases | } |
130 | 12 | Alexandre Cases | </pre> |
131 | 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)". |
132 | 12 | Alexandre Cases | |
133 | 12 | Alexandre Cases | * *Exemple 2 :* Ajout d'une action "exportQrCode()" (pas très utile) pour tout le monde |
134 | 12 | Alexandre Cases | * On se place dans la fonction "isAuthorized($user)" de l'AppController. |
135 | 12 | Alexandre Cases | * Puis on ajoute l'action à la liste qui est autoriser à tout le monde |
136 | 12 | Alexandre Cases | <pre> |
137 | 12 | Alexandre Cases | //Pour tout le monde |
138 | 12 | Alexandre Cases | if (in_array($action, ['index', 'find', 'view', 'creer', 'add', 'exportQrCode'])) return true; |
139 | 12 | Alexandre Cases | </pre> |
140 | 1 | Etienne Pallier | |
141 | 11 | Etienne Pallier | h2. Autres remarques |
142 | 1 | Etienne Pallier | |
143 | 1 | Etienne Pallier | |
144 | 9 | Etienne Pallier | * Mode debug personnalisé : |
145 | 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é. |
146 | 1 | Etienne Pallier | |
147 | 1 | Etienne Pallier | > Voir : http://book.cakephp.org/3.0/fr/development/testing.html |
148 | 1 | Etienne Pallier | |
149 | 1 | Etienne Pallier | * Pour charger une librairie (ex : phpqrcode, ...) |
150 | 1 | Etienne Pallier | > Voir : http://book.cakephp.org/3.0/fr/core-libraries/app.html#charger-les-fichiers-de-vendor |
151 | 1 | Etienne Pallier | |
152 | 9 | 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. |
153 | 1 | Etienne Pallier | > Voir : https://github.com/FriendsOfCake/CakePdf |
154 | 1 | Etienne Pallier | |
155 | 1 | Etienne Pallier | * Pour le JavaScript, le JS Helper a été retiré |
156 | 1 | Etienne Pallier | > Voir : http://book.cakephp.org/3.0/fr/appendices/3-0-migration-guide.html#jshelper |
157 | 16 | Alexandre Cases | |
158 | 16 | Alexandre Cases | * Pour installer un composant avec le composer : |
159 | 16 | Alexandre Cases | <pre> |
160 | 16 | Alexandre Cases | A la racine : |
161 | 16 | Alexandre Cases | ./composer.phar require --dev phpunit/phpunit |
162 | 16 | Alexandre Cases | </pre> |
163 | 16 | Alexandre Cases | |
164 | 16 | Alexandre Cases | * Pour supprimer un composant avec le composer : |
165 | 16 | Alexandre Cases | <pre> |
166 | 16 | Alexandre Cases | A la racine : |
167 | 16 | Alexandre Cases | ./composer.phar remove phpunit/phpunit |
168 | 16 | Alexandre Cases | </pre> |