Fr Plugin072to078 » History » Version 38

ddurieux, 10/01/2010 02:16 PM

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