Fr Plugin072to078 » History » Version 39

Version 38 (ddurieux, 10/01/2010 02:16 PM) → Version 39/67 (tsmr, 01/12/2011 09:26 AM)

h1. Migration d'un plugin de GLPI 0.72 vers 0.78

{{toc}}

Entre la version 0.72 et la version 0.78 ATTENTION ce document n'est qu'un mémo 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.
Pour mettre à jour un plugin en 0.78, plusieurs étapes sont nécessaires :

* Modification des tables et champs utilisés
* Modification des noms de fichiers
* Insertion des fonctions
ce qui change dans les classes
* Prise en charge des modifications de fonctions du cœur
* Nouveaux hooks disponibles
* Modification de
la gestion des objets version développement de type dropdown (listes déroulantes) GLPI.

h2. Database

h3. CleanDB

Le coeur a subi d'importantes modification au niveau base de données :

https://forge.indepnet.net/wiki/glpi/CleanDbStudy

h2. CommonDBTM

h3. showFormHeader

Nouveau prototype :
<pre>
function showFormHeader ($target, $ID, $withtemplate='', $colspan=1)
</pre>

Nouveau fonctionnement :
* ouverture des <form, <div (tabsbody) et <table (tab_cadre_fixe)
* champs cachés : is_template et entities_id

Conseil : à utiliser conjointement avec showFormHeader

h3. showFormButtons

Nouvelle fonction (factorisation du code)

<pre>
function showFormButtons ($ID, $withtemplate='', $colspan=1)
</pre>

Fonctionnement :
* fermeture des <form, <div et <table
* champs cachés : id

h3. can / check

Nouveau prototype

<pre>
function can($ID,$right,&$input=NULL)
function check($ID,$right,&$input=NULL)
</pre>

Le paramètre $input, uniquement requis lors d'un ajout, attend les valeurs à ajouter (souvent le $_POST) et pas uniquement l'entité cible.

h3. cleanDBonPurge

Les méthodes fournies par le coeur (cleanRelationData/cleanRelationTable) nettoient les enregistrements liés des tables lors de la suppression d'un objet.
* glpi_contracts_items (if registered in 'contract_types')
* glpi_documents_items (doc_types)
* glpi_infocoms (infocom_types)
* glpi_networkports (netport_types)
* glpi_reservationsitems (reservation_types)
* glpi_tickets (helpdesk_types)
* etc.. (à vérifier)

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*.

h3. getSearchOptions

Cette nouvelle méthode doit retourner les options de recherche pour le type courant.

h2. Variables de session

<pre>
$_SESSION["glpiview_ID"] remplacé par $_SESSION["glpiis_ids_visible"]
</pre>

h2. Utilisation Mbstring pour gérer UTF8

<pre>
substr remplacé par utf8_substr
</pre>
<pre>
utf8_decode remplacé par decodeFromUtf8
</pre>
<pre>
utf8_encode remplacé par encodeFromUtf8
</pre>
<pre>
strtolower remplacé par utf8_strtolower
</pre>
<pre>
strtoupper remplacé par utf8_strtoupper
</pre>

h2. Configuration

<pre>
$CFG_GLPI["mailing"] remplacé par $CFG_GLPI["use_mailing"]
</pre>

h2. Fonctions supprimées

Liste alphabétique :

|| *Ancienne fonction* || *Alternative* ||
|| addDeviceDocument() || DocumentItem->add() ||
|| addDeviceContract() || ContractItem->add() ||
|| cleanCache(); || ||
|| dropdownRequestType(...); || dropdownValue('glpi_requesttypes', ...) ||
|| getDocumentLink() || Document->getDownloadLink() ||
|| getRequestTypeName(...) || getDropdownName('glpi_requesttypes',...) ||
|| getContractSuppliers() || Contract->getSuppliersNames() ||
|| registerPluginTypers() || Plugin::registerClass() ||
|| showContractAssociated() || Contract::showAssociated() ||
|| showDocumentAssociated() || Document::showAssociated() ||
|| showInfocomForm() || Infocom::showForItem() ||
|| showSaveBookmarkButton(...) || Bookmark::showSaveButton(...) ||
|| dropdownNoneReadWrite(...) || Profile::dropdownNoneReadWrite(...) ||
|| getPlanningState(...) || TicketPlanning::getState(...) ||
|| dropdownPlanningState(...) || TicketPlanning::dropdownState(...) ||
|| dropdown(...) || CommoDropdown::dropdown(...) ||
|| dropdownValue(...) || CommonDropdown::dropdownValue(...) ||
|| dropdownNoValue(...) || CommonDropdown::dropdownNoValue(...) ||
|| getDropdownName(...) || CommonDropdown::getDropdownName(...) ||

h2. Classes renommées

<pre>
Enterprise => Supplier
</pre>

h2. HOOK supprimés

* plugin_example_getAddSearchOption() : remplacé par la méthode getSearchOptions du type et le hook plugin_example_getAddSearchOptions

h2. HOOK ajoutés

* plugin_example_getAddSearchOptions($itemtype) retourne les options de recherche ajoutées par le plugin aux types existants

h2. Hooks sur des actions de GLPI

Modification des hooks sur les actions de GLPI
On passe de
<pre>
$PLUGIN_HOOKS['pre_item_add']['nomduplugin'] = 'plugin_pre_item_update_nomduplugin';
</pre>

à

<pre>
$PLUGIN_HOOKS['pre_item_add']['nomduplugin'] = array('Computer' =>'plugin_pre_item_update_nomduplugin');
</pre>

h2. Tâche planifiée

Le hook *'cron'* n'est plus utilisé

Lors de l'installation un plugin peut enregistrer une tâche en utilisant
<pre>
CronTask::Register('pluginame', 'taskname', DAY_TIMESTAMP, array('param'=>50));
</pre>
La suppression est automatiquement réalisée par le coeur lors de la désinstallation du plugin.

Il devrait ensuite fournir 1 fonction
<pre>
function plugin_example_cron_info($name)
</pre>
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)

Et pour chaque tâche, une fonction d'exécution
<pre>
function plugin_example_cron_sample_run($task)
</pre>
L'objet $task permet d'enregistrer des évenements ($task->log) et des statistiques ($task->add/setVolume)
Le code retour doit être : 0 (rien à faire), >0 (terminé) ou <0 (à continuer)