Fr Plugin072to078 » History » Version 40

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