Fr Plugin072to078 » History » Version 43

« Previous - Version 43/67 (diff) - Next » - Current version
yllen, 01/12/2011 11:16 AM


Migration d'un plugin de GLPI 0.72 vers 0.78

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.
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 dans les classes
  • Prise en charge des modifications de fonctions du cœur
  • Nouveaux hooks disponibles
  • Modification de la gestion des objets de type dropdown (listes déroulantes)

Database

CleanDB

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

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

MODIFICATIONS A EFFECTUER DANS LES PLUGINS

Règle de nommage des tables d'un plugin

Nom de table d'un objet
glpi_plugin_nomduplugin_objets (le nom de l'objet doit être au pluriel)

ex: glpi_plugin_monplugin_profiles

Nom de table d'un sous-objet
glpi_plugin_nomduplugin_objetsousobjets (le nom de l'objet doit être au singulier et celui du sous-objet au pluriel)

ex: glpi_plugin_monplugin_profiletypes

Nom de table de 2 objets liés
glpi_plugin_nomduplugin_objets1_objets2 (les noms des 2 objets liés doivent être au pluriel)

ex: glpi_plugin_monplugin_profiles_entities

MODIFICATIONS DU COEUR IMPACTANT LES PLUGINS

CommonDBTM

showFormHeader

Nouvelle fonction (factorisation du code)

function showFormHeader ($options=array())

Nouveau fonctionnement :
  • passage par défaut des form sur 2 colonnes
  • ouverture des <form, <div (tabsbody) et <table (tab_cadre_fixe)
  • champs cachés : entities_id, _no_message_link, template_name et is_template

Conseil : à utiliser conjointement avec showFormButtons

showFormButtons

Nouvelle fonction (factorisation du code)

function showFormButtons ($options=array())
Fonctionnement :
  • fermeture des <form, <div et <table
  • champs cachés : id

can / check

Nouveau prototype

function can($ID,$right,&$input=NULL)
function check($ID,$right,&$input=NULL)

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

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 et glpi_networkports_networkports (netport_types)
  • glpi_reservationitems (reservation_types)
  • glpi_tickets (helpdesk_types)

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.

A REVOIR

getSearchOptions

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

Variables de session

$_SESSION["glpiview_ID"] remplacé par $_SESSION["glpiis_ids_visible"] 

Utilisation Mbstring pour gérer UTF8

substr remplacé par utf8_substr

utf8_decode remplacé par decodeFromUtf8

utf8_encode remplacé par encodeFromUtf8

strtolower remplacé par utf8_strtolower

strtoupper remplacé par utf8_strtoupper

Configuration

$CFG_GLPI["mailing"] remplacé par $CFG_GLPI["use_mailing"]

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(...)

Classes renommées

Enterprise => Supplier

HOOK supprimés

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

HOOK ajoutés

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

Hooks sur des actions de GLPI

Modification des hooks sur les actions de GLPI
On passe de

$PLUGIN_HOOKS['pre_item_add']['nomduplugin'] = 'plugin_pre_item_update_nomduplugin';

à

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

Tâche planifiée

Le hook 'cron' n'est plus utilisé

Lors de l'installation un plugin peut enregistrer une tâche en utilisant

   CronTask::Register('pluginame', 'taskname', DAY_TIMESTAMP, array('param'=>50));

La suppression est automatiquement réalisée par le coeur lors de la désinstallation du plugin.

Il devrait ensuite fournir 1 fonction

function plugin_example_cron_info($name)

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

function plugin_example_cron_sample_run($task)

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)