Fr Plugin080to083

Changement des fonctions du core

Group_Ticket::getTicketGroups($tickets_id)   =>   Group_Ticket::getGroups($tickets_id)
Ticket_User::getTicketUsers($tickets_id)     =>   Ticket_User::getUsers($tickets_id)
openArrowMassive()                           =>   openArrowMassives() 
closeArrowMassive($name='', $label='')       =>   closeArrowMassives($options) 

*Changement des appels de fonctions :*

 location.class - $this->showNetpoints()    => Netpoint::showForLocation($item)

 addConfirmationOnAction()           =>  Html::addConfirmationOnAction()
 addMessageAfterRedirect()           =>  Session::addMessageAfterRedirect()
 addslashes_deep()                   =>  Toolbox::addslashes_deep()
 addToNavigateListItems()            =>  Session::addToNavigateListItems()
 ajaxDisplaySearchTextForDropdown()  =>  Ajax::displaySearchTextForDropdown()
 ajaxDropdown()                      =>  Ajax::dropdown()
 ajaxFooter()                        =>  Html::ajaxFooter()
 ajaxUpdateItem()                    =>  Ajax::updateItem() 
 ajaxUpdateItemJsCode()              =>  Ajax::updateItemJsCode() 
 ajaxUpdateItemOnEvent()             =>  Ajax::updateItemOnEvent()  
 ajaxUpdateItemOnEventJsCode()       =>  Ajax::updateItemOnEventJsCode()
 ajaxUpdateItemOnInputTextEvent()    =>  Ajax::updateItemOnInputTextEvent()
 ajaxUpdateItemOnSelectEvent()       =>  Ajax::updateItemOnSelectEvent() 
 append_params()                     =>  Toolbox::append_params()
 autocompletionTextField()           =>  Html::autocompletionTextField()

 callCron()                          =>  CronTask::callCron()
 callCronForce()                     =>  CronTask::callCronForce() 
 canUseImapPop()                     =>  Toolbox::canUseImapPop()
 canUseLdap()                        =>  Toolbox::canUseLdap()
 changeActiveEntities()              =>  Session::changeActiveEntities()
 changeProgressBarMessage()          =>  Html::changeProgressBarMessage()
 changeProgressBarPosition()         =>  Html::changeProgressBarPosition()
 changeProfile()                     =>  Session::changeProfile()
 checkCentralAccess()                =>  Session::checkCentralAccess()
 checkFaqAccess()                    =>  Session::checkFaqAccess()
 checkHelpdeskAccess()               =>  Session::checkHelpdeskAccess()
 checkLoginUser()                    =>  Session::checkLoginUser()
 checkNewVersionAvailable()          =>  Toolbox::checkNewVersionAvailable()
 checkSeveralRightsOr()              =>  Session::checkSeveralRightsOr()
 checkRight()                        =>  Session::checkRight()
 checkWriteAccessToDirs()            =>  Config::checkWriteAccessToDirs()
 clean_cross_side_scripting_deep()   =>  Toolbox::clean_cross_side_scripting_deep()
 cleanInputText()                    =>  Html::cleanInputText()
 cleanParametersURL()                =>  Html::cleanParametersURL()
 cleanPostForTextArea()              =>  Html::cleanPostForTextArea()
 closeArrowMassive($name,$label)     =>  Html::closeArrowMassives(array($name => $label))
 commonCheckForUseGLPI()             =>  Toolbox::commonCheckForUseGLPI()
 commonDropdownUpdateItem()          =>  Ajax::commonDropdownUpdateItem()
 commonFooter()                      =>  Html::footer()
 commonHeader()                      =>  Html::header()
 constructMailServerConfig()         =>  Toolbox::constructMailServerConfig()
 convDate()                          =>  Html::convDate()
 convDateTime()                      =>  Html::convDateTime()
 createAjaxTabs()                    =>  Ajax::createTabs()
 createProgressBar()                 =>  Html::createProgressBar()

 decodeFromUtf8()                    =>  Toolbox::decodeFromUtf8()
 decrypt()                           =>  Toolbox::decrypt()
 deleteDir()                         =>  Toolbox::deleteDir()
 destroySession (Auth.class)         =>  Session::destroy()
 displayBackLink()                   =>  Html::displayBackLink()
 displayDebugInfos()                 =>  Html::displayDebugInfos()
 displayErrorAndDie()                =>  Html::displayErrorAndDie()
 displayMessageAfterRedirect()       =>  Html::displayMessageAfterRedirect()
 displayNotFoundError()              =>  Html::displayNotFoundError()
 displayProgressBar()                =>  Html::displayProgressBar()
 displayRightError()                 =>  Html::displayRightError()
 displayTitle()                      =>  Html::displayTitle()
 doHook()                            =>  Plugin::doHook()
 doHookFunction()                    =>  Plugin::doHookFunction()
 doOneHook()                         =>  Plugin::doOneHook()

 encodeInUtf8()                      =>  Toolbox::encodeInUtf8()
 encrypt()                           =>  Toolbox::encrypt()

 filesizeDirectory ()                =>  Toolbox::filesizeDirectory()
 formatNumber()                      =>  Html::formatNumber()

 getActiveTab()                      =>  Session::getActiveTab()
 getAllReplicateForAMaster()         =>  AuthLDAP::getAllReplicateForAMaster()
 getCountLogin()                     =>  Event::getCountLogin()
 getItemTypeFormURL()                =>  Toolbox::getItemTypeFormURL()
 getItemTypeSearchURL()              =>  Toolbox::getItemTypeSearchURL()
 getItemTypeTabsURL()                =>  Toolbox::getItemTypeTabsURL()
 getLoginUserID()                    =>  Session::getLoginUserID()
 get_magic_quotes_gpc()              =>  Toolbox::get_magic_quotes_gpc()
 get_magic_quotes_runtime()          =>  Toolbox::get_magic_quotes_runtime()
 getMemoryLimit()                    =>  Toolbox::getMemoryLimit()
 getPluginSearchOptions()            =>  Plugin::getPluginSearchOptions()
 getPluginsDatabaseRelations()       =>  Plugin::getPluginsDatabaseRelations()
 getPluginsDropdowns()               =>  Plugin::getPluginsDropdowns()
 getRandomString()                   =>  Toolbox::getRandomString()
 getSize()                           =>  Toolbox::getSize()
 getTimestampTimeUnits()             =>  Toolbox::getTimestampTimeUnits()
 getURLContent()                     =>  Toolbox::getURLContent()
 getWarrantyExpir()                  =>  Infocom::getWarrantyExpir()
 glpi_flush()                        =>  Html::glpi_flush()
 glpi_header()             => Html::redirect(URL de redirection)
                           => Html::back()     => Html::redirect($_SERVER['HTTP_REFERER'])

 haveAccessToAllOfEntities()         =>  Session::haveAccessToAllOfEntities()
 haveAccessToEntity()                =>  Session::haveAccessToEntity()
 haveAccessToOneOfEntities()         =>  Session::haveAccessToOneOfEntities()
 haveRecursiveAccessToEntity()       =>  Session::haveRecursiveAccessToEntity()
 haveRight()                         =>  Session::haveRight()
 header_nocache()                    =>  Html::header_nocache()
 helpFooter()                        =>  Html::helpFooter()
 helpHeader()                        =>  Html::helpHeader()
 html_clean()                        =>  Html::clean()
 html_entity_decode_deep()           =>  Html::entity_decode_deep()
 htmlentities_deep()                 =>  Html::entities_deep()

 includeCommonHtmlHeader()           =>  Html::includeHeader()
 initEditorSystem()                  =>  Html::initEditorSystem()
 initEntityProfiles()                =>  Session::initEntityProfiles()
 initNavigateListItems()             =>  Session::initNavigateListItems()
 initSession (Auth.class)            =>  Session::init()
 isMultiEntitiesMode()               =>  Session::isMultiEntitiesMode()

 key_exists_deep()                   =>  Toolbox::key_exists_deep()

 ldap_get_entries_clean()            =>  AuthLDAP::get_entries_clean() 
 listTemplates()                     =>  CommonDBTM::listTemplates()
 loadGroups()                        =>  Session::loadGroups()
 loadLanguage()                      =>  Session::loadLanguage()
 logDebug()                          =>  Toolbox::logDebug()
 logInFile()                         =>  Toolbox::logInFile()

 makeTextCriteria()                  =>  Search::makeTextCriteria()
 makeTextSearch()                    =>  Search::makeTextSearch()
 manageBeginAndEndPlanDates()        =>  Toolbox::manageBeginAndEndPlanDates()
 manageRedirect()                    =>  Toolbox::manageRedirect()

 nl2br_deep()                        =>  Html::nl2br_deep()
 nullFooter()                        =>  Html::nullFooter()
 nullHeader()                        =>  Html::nullHeader()

 openArrowMassive()                  =>  Html::openArrowMassives()
 optimize_tables()                   =>  DBmysql::optimize_tables()

 popFooter()                         =>  Html::popFooter()
 popHeader()                         =>  Html::popHeader()
 printAjaxPager()                    =>  Html::printAjaxPager()
 printCleanArray()                   =>  Html::printCleanArray()
 printHelpDesk()                     =>  Ticket::showFormHelpdesk()
 printPager()                        =>  Html::printPager()
 printPagerForm()                    =>  Html::printPagerForm()

 refreshDropdownPopupInMainWindow()  =>  Ajax::refreshDropdownPopupInMainWindow()
 refreshPopupMainWindow()            =>  Ajax::refreshPopupMainWindow()
 resume_text()                       =>  Html::resume_text()
 resume_name()                       =>  Html::resume_name()
 return_bytes_from_ini_vars()        =>  Toolbox::return_bytes_from_ini_vars()

 seems_utf8()                        =>  Toolbox::seems_utf8()
 sendFile()                          =>  Toolbox::sendFile()
 setActiveTab()                      =>  Session::setActiveTab()
 setGlpiSessionPath()                =>  Session::setPath()
 showDateFormItem()                  =>  Html::showDateFormItem()
 showDateTimeFormItem()              =>  Html::showDateTimeFormItem()
 showGenericDateTimeSearch()         =>  Html::showGenericDateTimeSearch()
 showMailServerConfig()              =>  Toolbox::showMailServerConfig()
 showOtherAuthList($target)          =>  Auth::showOtherAuthList()
 showProfileSelecter()               =>  Html::showProfileSelecter()
 showToolTip()                       =>  Html::showToolTip()
 simpleHeader()                      =>  Html::simpleHeader()
 startGlpiSession()                  =>  Session::start()
 stripslashes_deep()                 =>  Toolbox::stripslashes_deep()

 testWriteAccessToDirectory()        =>  Toolbox::testWriteAccessToDirectory()
 timestampToString()                 =>  Html::timestampToString()

 utf8_str_pad()                      =>  Toolbox::str_pad()
 utf8_strlen()                       =>  Toolbox::strlen()
 utf8_strpos()                       =>  Toolbox::strpos()
 utf8_strtolower ()                  =>  Toolbox::strtolower()
 utf8_strtoupper()                   =>  Toolbox::strtoupper()
 utf8_substr()                       =>  Toolbox::substr()
 unclean_cross_side_scripting_deep() =>  Toobox::unclean_cross_side_scripting_deep()
 userErrorHandlerDebug()             =>  Toolbox::userErrorHandlerDebug()
 userErrorHandlerNormal()            =>  Toolbox::userErrorHandlerNormal()

 weblink_extract()                   =>  Html::weblink_extract()

 *Changement des appels de constant*

 DROPDOWN_EMPTY_VALUE     =>  Dropdown::EMPTY_VALUE

 DEBUG_MODE               =>  Session::DEBUG_MODE
 NORMAL_MODE              =>  Session::NORMAL_MODE
 TRANSLATION_MODE         =>  Session::TRANSLATION_MODE

 HISTORY_....             => Log::HISTORY_....    

 BOOKMARK_SEARCH          => Bookmark::SEARCH
(For plugins, use Bookmark::URI (lien sans contrôles du coeur sur l'itemtype)

Ajout de nouveaux paramètres dans Plugin::registerClass

'linkuser_tech_types' => true / false
'linkgroup_tech_types' => true / false
'addtabon' => array('itemtype') : un onglet du plugin sera ajouté à l'objet itemtype
'forwardentityfrom' => itemtype : indique à GLPI que la classe père doit répercuter sur la classe du plugin les modifications des champs entities_id et is_recursive

Exemple :

Plugin::registerClass('PluginTicketssuppliersConfig',
                            array('addtabon'          => array('Supplier'), 
                                  'forwardentityfrom' => 'Supplier'));

La classe PluginTicketssuppliersConfig (qui étend CommonDBChild) est ajoutée à la liste des classes recevant les modifications des champs entities_id et is_recursive de la classe Supplier.

Changements des variables utilisés dans des fonctions du core

Ticket::showListForItem('Computer', $_POST["id"])          => Ticket::showListForItem($Computer);
addField($table, $field, $type, $update='', $condition=''  =>  addField($table, $field, $type, $options=array()
NetworkPort::showForItem($itemtype, $items_id)             => NetworkPort::showForItem(CommonDBTM $item, $withtemplate='')

Définition des onglets

L'ancienne gestion des onglets existe toujours en 0.83, mais sera amenée à disparaitre dans une version ultérieure.

Utilisation d'un onglet standard, géré par un autre objet

Pour l'affichage des onglets standard, utilisation de la fonction addStandardTab('itemtype', $ong, $options) dans la fonction defineTabs() de l'objet
exemples :

onglet logiciel  :  
   $ong[2] = $LANG['Menu'][4];   
=>   $this->addStandardTab('Software',$ong, $options);

onglet document :           
   if (haveRight("document","r")) {
      $ong[5] = $LANG['Menu'][27];
   }
 =>  $this->addStandardTab('Document',$ong, $options);

Dans le fichier ajax/objet.tabs.php
  • suppression des '_case_' correspondant aux onglets standards
  • remplacement de l'appel à Plugin::displayAction() par un appel à CommonGLPI::displayStandardTab()

Exemple : https://forge.indepnet.net/projects/appliances/repository/revisions/143

Si "tous" les onglets sont standards, le fichier ajax/object.tabs.php peut être supprimés (common.tabs.php sera automatiquement utilisé)

Ajout d'un onglet standard géré par un objet du plugin

Pour qu'un objet puisse créer un onglet standard, il doit fournir 2 méthodes :

Définition des onglets à affichés:

function getTabNameForItem(CommonGLPI $item, $withtemplate=0);

Cette méthode retourne une chaine (nom de l'onglet) ou un tableau de chaine (plusieurs onglets).
Le contrôle de droit doit être fait dans cette méthode (pas dans defineTabs).

Affichage du contenu des onglets:

static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0);

Exemple : https://forge.indepnet.net/projects/appliances/repository/revisions/146

Dropdown et Onglets

Les dropdown utilisent maintenant le mécanisme des onglets standards.

Donc: supprimer le fichier ajax/<nomdutypedeladropdown>.tabs.php
(il appellait ajax/dropdown.common.tabs.php qui n'existe plus)

Règles et Onglets

Les règles utilisent maintenant le mécanisme des onglets standards.

Donc: supprimer le fichier ajax/<nomdutypedelarègle>.tabs.php
(il appellait ajax/rule.common.tabs.php qui n'existe plus)

Suppression de tables du core

Suppression de la table glpi_ticketplannings ainsi que la class associée

Déplacement de fonctions

les fonctions isPluginItemType et isCommandLine sont désormais dans autoload.function.php (au lieu de common.function.php)

Changements de nom de classes

la classe TicketCategory devient ITILCategory (glpi_itilcategories / itilcategories_id)

Hooks

Nouveau hook "post_prepareadd"

Ce hook est appelé, apres le hook pre_item_add, après le passage par le prepareInputForAdd de l'objet et avant l'ajout en DB.

Modification du hook "addWhere"

Ce hook accepte désormais l'option $searchtype (indiquant le type de recherche : contains, equals, notequals, under)

plugin_xxxx_addWhere($link, $nott, $type, $ID, $val, $searchtype)

Suppression de chaine de langue du core

$LANG['job'][21] = "Nombre déjà en cours";
$LANG['stats'][31] = "Jour(s)";

class_exists

Changement d'écriture si un objet est instancié après contrôle de la class

if (class_exists($itemtype) {
   $item = new $itemtype();
}

devient
if ($item = getItemForItemtype($itemtype)) {

Licence

Information de licence

La fonction plugin_version_foo doit retourner un nouveau champ 'license' contenant le nom court de la licence, GPLv2+ par exemple.

Cette information sera affichée dans le liste des plugins.

Fichier License

Si le fichier LICENSE ou COPYING.txt est présent à la racine du plugin, le nom de la license, dans la liste des plugins, sera un lien vers ce fichier.

Entête

Vérifier l'entête des fichiers afin qu'il corresponde à la licence du plugin et fasse référence au plugin (et non directement à GLPI).