Fr Plugin072to078 » History » Version 39

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