Fr Plugin072to078 » History » Version 42
yllen, 01/12/2011 10:55 AM
1 | 37 | tsmr | h1. Migration d'un plugin de GLPI 0.72 vers 0.78 |
---|---|---|---|
2 | 1 | remi | |
3 | 4 | remi | {{toc}} |
4 | 4 | remi | |
5 | 39 | tsmr | Entre la version 0.72 et la version 0.78 de GLPI de nombreux changements ont été implémentés, autant sur la base de données que sur la structure des fichiers. L'utilisation de l'auto-chargement de classes simplifie grandement le codage de plugins. |
6 | 39 | tsmr | Pour mettre à jour un plugin en 0.78, plusieurs étapes sont nécessaires : |
7 | 39 | tsmr | |
8 | 39 | tsmr | * Modification des tables et champs utilisés |
9 | 39 | tsmr | * Modification des noms de fichiers |
10 | 39 | tsmr | * Insertion des fonctions dans les classes |
11 | 39 | tsmr | * Prise en charge des modifications de fonctions du cœur |
12 | 39 | tsmr | * Nouveaux hooks disponibles |
13 | 39 | tsmr | * Modification de la gestion des objets de type dropdown (listes déroulantes) |
14 | 1 | remi | |
15 | 42 | yllen | |
16 | 5 | remi | h2. Database |
17 | 5 | remi | |
18 | 2 | tsmr | h3. CleanDB |
19 | 1 | remi | |
20 | 2 | tsmr | Le coeur a subi d'importantes modification au niveau base de données : |
21 | 2 | tsmr | |
22 | 2 | tsmr | https://forge.indepnet.net/wiki/glpi/CleanDbStudy |
23 | 2 | tsmr | |
24 | 41 | yllen | |
25 | 40 | yllen | |
26 | 42 | yllen | h1. MODIFICATIONS DU COEUR IMPACTANT LES PLUGINS |
27 | 40 | yllen | |
28 | 42 | yllen | h2. CommonDBTM |
29 | 41 | yllen | |
30 | 42 | yllen | h3. showFormHeader |
31 | 41 | yllen | |
32 | 41 | yllen | Nouvelle fonction (factorisation du code) |
33 | 41 | yllen | <pre> |
34 | 1 | remi | function showFormHeader ($options=array()) |
35 | 41 | yllen | </pre> |
36 | 1 | remi | |
37 | 1 | remi | Nouveau fonctionnement : |
38 | 1 | remi | * passage par défaut des form sur 2 colonnes |
39 | 1 | remi | * ouverture des <form, <div (tabsbody) et <table (tab_cadre_fixe) |
40 | 1 | remi | * champs cachés : entities_id, _no_message_link, template_name et is_template |
41 | 41 | yllen | |
42 | 1 | remi | Conseil : à utiliser conjointement avec showFormButtons |
43 | 41 | yllen | |
44 | 42 | yllen | h3. showFormButtons |
45 | 41 | yllen | |
46 | 1 | remi | Nouvelle fonction (factorisation du code) |
47 | 1 | remi | |
48 | 1 | remi | <pre> |
49 | 1 | remi | function showFormButtons ($options=array()) |
50 | 1 | remi | </pre> |
51 | 1 | remi | |
52 | 1 | remi | Fonctionnement : |
53 | 1 | remi | * fermeture des <form, <div et <table |
54 | 1 | remi | * champs cachés : id |
55 | 3 | remi | |
56 | 42 | yllen | h3. can / check |
57 | 41 | yllen | |
58 | 3 | remi | Nouveau prototype |
59 | 1 | remi | |
60 | 1 | remi | <pre> |
61 | 1 | remi | function can($ID,$right,&$input=NULL) |
62 | 1 | remi | function check($ID,$right,&$input=NULL) |
63 | 1 | remi | </pre> |
64 | 1 | remi | |
65 | 1 | remi | Le paramètre $input, uniquement requis lors d'un ajout, attend les valeurs à ajouter (souvent le $_POST) et pas uniquement l'entité cible. |
66 | 1 | remi | |
67 | 42 | yllen | h3. cleanDBonPurge |
68 | 1 | remi | |
69 | 1 | remi | Les méthodes fournies par le coeur (cleanRelationData/cleanRelationTable) nettoient les enregistrements liés des tables lors de la suppression d'un objet. |
70 | 1 | remi | * glpi_contracts_items (if registered in 'contract_types') |
71 | 1 | remi | * glpi_documents_items (doc_types) |
72 | 1 | remi | * glpi_infocoms (infocom_types) |
73 | 1 | remi | * glpi_networkports et glpi_networkports_networkports (netport_types) |
74 | 1 | remi | * glpi_reservationitems (reservation_types) |
75 | 1 | remi | * glpi_tickets (helpdesk_types) |
76 | 1 | remi | |
77 | 1 | remi | Il n'est donc plus utile de le prévoir dans la méthode *cleanDBonPurge* du type, mais de s'assurer de l'enrichissement des tableaux lors du *registerPluginType*. |
78 | 1 | remi | |
79 | 1 | remi | |
80 | 1 | remi | |
81 | 42 | yllen | |
82 | 42 | yllen | |
83 | 42 | yllen | h1. MODIFICATIONS A EFFECTUER DANS LES PLUGINS |
84 | 42 | yllen | |
85 | 42 | yllen | |
86 | 42 | yllen | h2. Règle de nommage des tables d'un plugin |
87 | 42 | yllen | |
88 | 42 | yllen | *Nom de table d'un objet* |
89 | 42 | yllen | glpi_plugin_nomduplugin_objets (le nom de l'objet doit être au pluriel) |
90 | 42 | yllen | > ex: glpi_plugin_monplugin_profiles |
91 | 42 | yllen | |
92 | 42 | yllen | *Nom de table d'un sous-objet* |
93 | 42 | yllen | glpi_plugin_nomduplugin_objetsousobjets (le nom de l'objet doit être au singulier et celui du sous-objet au pluriel) |
94 | 42 | yllen | > ex: glpi_plugin_monplugin_profiletypes |
95 | 42 | yllen | |
96 | 42 | yllen | *Nom de table de 2 objets liés* |
97 | 42 | yllen | glpi_plugin_nomduplugin_objets1_objets2 (les noms des 2 objets liés doivent être au pluriel) |
98 | 42 | yllen | > ex: glpi_plugin_monplugin_profiles_entities |
99 | 42 | yllen | |
100 | 42 | yllen | |
101 | 42 | yllen | |
102 | 42 | yllen | |
103 | 42 | yllen | |
104 | 42 | yllen | |
105 | 42 | yllen | |
106 | 42 | yllen | h1. A REVOIR |
107 | 41 | yllen | |
108 | 41 | yllen | h4. getSearchOptions |
109 | 11 | remi | |
110 | 21 | remi | Cette nouvelle méthode doit retourner les options de recherche pour le type courant. |
111 | 21 | remi | |
112 | 8 | tsmr | h2. Variables de session |
113 | 2 | tsmr | |
114 | 2 | tsmr | <pre> |
115 | 2 | tsmr | $_SESSION["glpiview_ID"] remplacé par $_SESSION["glpiis_ids_visible"] |
116 | 2 | tsmr | </pre> |
117 | 1 | remi | |
118 | 8 | tsmr | h2. Utilisation Mbstring pour gérer UTF8 |
119 | 7 | tsmr | |
120 | 6 | tsmr | <pre> |
121 | 1 | remi | substr remplacé par utf8_substr |
122 | 9 | tsmr | </pre> |
123 | 17 | tsmr | <pre> |
124 | 17 | tsmr | utf8_decode remplacé par decodeFromUtf8 |
125 | 17 | tsmr | </pre> |
126 | 17 | tsmr | <pre> |
127 | 17 | tsmr | utf8_encode remplacé par encodeFromUtf8 |
128 | 17 | tsmr | </pre> |
129 | 17 | tsmr | <pre> |
130 | 17 | tsmr | strtolower remplacé par utf8_strtolower |
131 | 17 | tsmr | </pre> |
132 | 17 | tsmr | <pre> |
133 | 17 | tsmr | strtoupper remplacé par utf8_strtoupper |
134 | 17 | tsmr | </pre> |
135 | 9 | tsmr | |
136 | 9 | tsmr | h2. Configuration |
137 | 9 | tsmr | |
138 | 9 | tsmr | <pre> |
139 | 9 | tsmr | $CFG_GLPI["mailing"] remplacé par $CFG_GLPI["use_mailing"] |
140 | 6 | tsmr | </pre> |
141 | 10 | tsmr | |
142 | 18 | remi | h2. Fonctions supprimées |
143 | 1 | remi | |
144 | 28 | remi | Liste alphabétique : |
145 | 28 | remi | |
146 | 28 | remi | || *Ancienne fonction* || *Alternative* || |
147 | 28 | remi | || addDeviceDocument() || DocumentItem->add() || |
148 | 28 | remi | || addDeviceContract() || ContractItem->add() || |
149 | 28 | remi | || cleanCache(); || || |
150 | 28 | remi | || dropdownRequestType(...); || dropdownValue('glpi_requesttypes', ...) || |
151 | 28 | remi | || getDocumentLink() || Document->getDownloadLink() || |
152 | 28 | remi | || getRequestTypeName(...) || getDropdownName('glpi_requesttypes',...) || |
153 | 29 | remi | || getContractSuppliers() || Contract->getSuppliersNames() || |
154 | 32 | remi | || registerPluginTypers() || Plugin::registerClass() || |
155 | 28 | remi | || showContractAssociated() || Contract::showAssociated() || |
156 | 28 | remi | || showDocumentAssociated() || Document::showAssociated() || |
157 | 31 | remi | || showInfocomForm() || Infocom::showForItem() || |
158 | 28 | remi | || showSaveBookmarkButton(...) || Bookmark::showSaveButton(...) || |
159 | 33 | walid | || dropdownNoneReadWrite(...) || Profile::dropdownNoneReadWrite(...) || |
160 | 36 | walid | || getPlanningState(...) || TicketPlanning::getState(...) || |
161 | 36 | walid | || dropdownPlanningState(...) || TicketPlanning::dropdownState(...) || |
162 | 36 | walid | || dropdown(...) || CommoDropdown::dropdown(...) || |
163 | 36 | walid | || dropdownValue(...) || CommonDropdown::dropdownValue(...) || |
164 | 36 | walid | || dropdownNoValue(...) || CommonDropdown::dropdownNoValue(...) || |
165 | 36 | walid | || getDropdownName(...) || CommonDropdown::getDropdownName(...) || |
166 | 35 | walid | |
167 | 27 | remi | h2. Classes renommées |
168 | 27 | remi | |
169 | 27 | remi | <pre> |
170 | 27 | remi | Enterprise => Supplier |
171 | 27 | remi | </pre> |
172 | 18 | remi | |
173 | 21 | remi | h2. HOOK supprimés |
174 | 21 | remi | |
175 | 21 | remi | * plugin_example_getAddSearchOption() : remplacé par la méthode getSearchOptions du type et le hook plugin_example_getAddSearchOptions |
176 | 21 | remi | |
177 | 21 | remi | h2. HOOK ajoutés |
178 | 21 | remi | |
179 | 21 | remi | * plugin_example_getAddSearchOptions($itemtype) retourne les options de recherche ajoutées par le plugin aux types existants |
180 | 21 | remi | |
181 | 38 | ddurieux | h2. Hooks sur des actions de GLPI |
182 | 38 | ddurieux | |
183 | 38 | ddurieux | Modification des hooks sur les actions de GLPI |
184 | 38 | ddurieux | On passe de |
185 | 38 | ddurieux | <pre> |
186 | 38 | ddurieux | $PLUGIN_HOOKS['pre_item_add']['nomduplugin'] = 'plugin_pre_item_update_nomduplugin'; |
187 | 38 | ddurieux | </pre> |
188 | 38 | ddurieux | |
189 | 38 | ddurieux | à |
190 | 38 | ddurieux | |
191 | 38 | ddurieux | <pre> |
192 | 38 | ddurieux | $PLUGIN_HOOKS['pre_item_add']['nomduplugin'] = array('Computer' =>'plugin_pre_item_update_nomduplugin'); |
193 | 38 | ddurieux | </pre> |
194 | 12 | remi | |
195 | 12 | remi | h2. Tâche planifiée |
196 | 12 | remi | |
197 | 12 | remi | Le hook *'cron'* n'est plus utilisé |
198 | 12 | remi | |
199 | 12 | remi | Lors de l'installation un plugin peut enregistrer une tâche en utilisant |
200 | 12 | remi | <pre> |
201 | 12 | remi | CronTask::Register('pluginame', 'taskname', DAY_TIMESTAMP, array('param'=>50)); |
202 | 12 | remi | </pre> |
203 | 12 | remi | La suppression est automatiquement réalisée par le coeur lors de la désinstallation du plugin. |
204 | 12 | remi | |
205 | 12 | remi | Il devrait ensuite fournir 1 fonction |
206 | 12 | remi | <pre> |
207 | 12 | remi | function plugin_example_cron_info($name) |
208 | 12 | remi | </pre> |
209 | 12 | remi | Qui retourne un tableau à 2 entrées pour la tâche $name comprenant 'description' (description localisée de la tâche) et 'parameter' (optionnel, description localisée du paramètre) |
210 | 12 | remi | |
211 | 12 | remi | Et pour chaque tâche, une fonction d'exécution |
212 | 12 | remi | <pre> |
213 | 12 | remi | function plugin_example_cron_sample_run($task) |
214 | 12 | remi | </pre> |
215 | 12 | remi | L'objet $task permet d'enregistrer des évenements ($task->log) et des statistiques ($task->add/setVolume) |
216 | 12 | remi | Le code retour doit être : 0 (rien à faire), >0 (terminé) ou <0 (à continuer) |