The present file will list all changes made to the project; according to the Keep a Changelog project.
- Business Rules for Changes
- Business Rules for Problems
- Configurable toast notification location
Link ITIL ObjectandUnlink ITIL Objectmassive actions for Tickets, Changes, and Problems.- Group approval requests (any user from group can approve).
- Satisfaction surveys for Changes
- New right for assigning service levels to ITIL Objects (UPDATE right also still allows this).
- New right for impersonation of users with less rights (Config UPDATE right also still allows this globally).
- Marketplace availability configuration.
- Toast popup message location configuration.
- Datacenter room grid size configuration (per room).
- Approval reminder automatic action.
- Reservation massive actions.
aliasandcodefields for Locations.- Profile cloning.
- Associated elements for recurring ITIL Objects.
- Processes and Environment Variable tabs for automatically inventoried assets.
- Log viewer for logs in
files/_logdirectory. - Custom palette/theme support (uses
files/_themesdirectory by default). - Two-Factor Authentication (2FA) support via Time-based One-time Password (TOTP).
Deny loginauthorization rule action to deny login for a user, but not prevent the import/existence of the user in GLPI.- Directly capture screenshots or screen recordings from the "Add a document" form in tickets.
- With a clean install, dashboards now show fake/placeholder data by default with a message indicating you are viewing demonstration data and a button to disable it.
- Assets that can be assigned to users/groups have new "View assigned" and "Update assigned" rights which give read/update access to users and groups assigned to the asset.
ODSandXLSexport of search results.- Support for the well-known `change-password" URI which can be used by some password managers to automatically (or assist with) changing a user's password.
- CLI commands for creating local GLPI users, enabling/disabling/deleting users, resetting local GLPI user passwords and granting profile assignments.
- Cloning templates (such as computer templates)
- Creating a template from an existing item (such as a computer). This action is only available from the Actions menu within the item form (bulk action not allowed).
- ITIL Objects can now be linked to any other ITIL Objects similar to the previous Ticket/Ticket links.
- Logs are now shown using the Search Engine
- The approval option previously named
Groupis now calledGroup user(s)to better reflect that it shows a list of users from a specific group rather than allow sending an approval for a group. - The ticket business rule action
Ticket category from codewas renamed toITIL category from code. - The ticket business rule criteria
Code representing the ticket categorywas renamed toCode representing the ITIL category. - The ticket business rule criteria
Ticket locationwas renamed toLocation. - ITIL Templates can now restrict available statuses.
- Improved offline mode for marketplace.
- Lines can be assigned directly to assets without needing a SIM card.
- Planning event occurances can be detached from a series.
- Locations are now displayed in Datacenter breadcrumbs.
- Marketplace CLI download command now supports downloading specific versions of plugins.
- Browse tab of Knowledgebase now uses the Search Engine.
- Satisfaction surveys can now be configured with a custom maximum score, default score, and if a comment is required.
- LDAP TLS version can now be specified.
- Kanabn view state can be reset from the Kanban if the user has the right to modify the view.
- Personal reminders in central view now include only non-public reminders created by the user.
- Public reminders in central view now include public reminders regardless of who created them.
- Project description field is now a rich text field.
- Entity, profile, debug mode flag, and language are restored after ending impersonation.
- Volumes now show
Used percentageinstead ofFree percentage. - Budget "Main" tab now shows negative values for "Total remaining in the budget" in parentheses instead of with a negative sign to align with typical accounting practices.
- Followups and Tasks no longer visible without the "See public" or "See private" rights even if the user has permission to be assigned the parent ITIL Object.
- Followups, Tasks and Solutions now check the
canView()method of the parent ITIL Object rather than just the "See my/See author" right of the parent item. This means they now take into account "See all", "See group", etc. rights for the global permission check. Permission checks at the item-level have not been changed. - External Links
Link or filenameandFile contentfields now use Twig templates instead of a custom tag syntax. - Itemtypes associated with External links are now in the main form rather than a separate tab.
- The
Computer_Itemclass has been replaced by the\Glpi\Asset\Asset_PeripheralAssetclass. - List of network ports in a VLAN form now shows the NetworkPort link in a breadcrumb manner (MyServer > eth0 where MyServer is a link to the computer and eth0 is a link to the port).
- Running
front/cron.phporbin/consolewill attempt to check and block execution if running as root. - Testing LDAP replicates now shows results as toast notifications rather than inside the replicate tab after a page reload.
- The debug tab that was present, for some items, when the debug mode was active, no longer exists. The corresponding features have been either moved, either removed.
GroupandGroup in chargefields for assets may now contain multiple groups.- "If software are no longer used" transfer option is now taken into account rather than always preserving.
- Notifications can now specify exclusions for recipients.
- Survey URL tags
TICKETCATEGORY_IDandTICKETCATEGORY_NAMEare deprecated and replaced byITILCATEGORY_IDandITILCATEGORY_NAMErespectively.
- XML-RPC API.
Link ticketsmassive action for Tickets (UseLink ITIL Objectinstead).Link to a problemmassive action for Tickets (UseLink ITIL Objectinstead).- Manage tab for Knowledgebase (Unpublished is now a toggle in the browse tab).
- The database "master" property in the status checker (/status.php and glpi:system:status), replaced by "main".
- The database "slaves" property in the status checker (/status.php and glpi:system:status), replaced by "replicas".
- API URL is no longer customizable within GLPI. Use alias/rewrite rules in your web server configuration instead if needed.
status.phpandbin/console system:statusno longer supports plain-text output.Glpi\System\Status\StatusChecker::getServiceStatus()as_arrayparameter.Sylkexport of search results.full_width_adapt_columnoption for fields macros has been removed.
phpCASlibrary is now bundled in GLPI, to prevent version compatibility issues.Glpi\DBAL\QueryFunctionclass with multiple static methods for building SQL query function strings in an abstract way.fetchSessionMessages()global JS function to display new session messages as toast notifications without requiring a page reload.is_exclusioncolumn added toglpi_notificationtargetstable.CommonDBTM::getForbiddenMultipleMassiveActions()method to allow specifying which actions should only be shown from the item form.
- Many methods have their signature changed to specify both their return type and the types of their parameters.
chartistlibrary has been replaced byecharts.codemirrorlibrary has been replaced bymonaco-editor.htmLawedlibrary has been replaced bysymfony/html-sanitizer.monolog/monologhas been upgraded to version 3.3.photoswipelibrary has been upgraded to version 5.x.phpmailer/phpmailerlibrary has been replaced bysymfony/mailer.true/punycodelibrary has been removed.Symfonylibraries have been upgraded to version 6.0.users_id_validatefield inCommonITILValidationwill now have a0value until someone approves or refuses the validation. Approval targets (who the approval is for) is now indicated byitemtype_targetanditems_id_targetfields.- Notifications are not deduplicated anymore.
- Notifications with
Approverrecipient have had this recipient replaced with the newApproval targetrecipient to maintain previous behavior as much as possible. The previous recipient option still exists if needed. This replacement will only happen once during the upgrade. GLPIMailermailer class does not extends anymorePHPMailer\PHPMailer\PHPMailer. We added a compatibility layer to handle main usages found in plugins, but we cannot ensure compatibility with all properties and methods that were inherited fromPHPMailer\PHPMailer\PHPMailer.CommonGLPI::$othertabsstatic property has been made private.CommonGLPI::createTabEntry()signature changed.- All types of rules are now sortable and ordered by ranking.
- Plugins console commands must now use the normalized prefix
plugins:XXXwhereXXXis the plugin key. - GLPI web root is now the
/publicdirectory and all web request to PHP scripts are proxified bypublic/index.phpscript. - Usage of
DBmysql::query()andDBmysql::queryOrDie()method are prohibited to ensure that legacy unsafe DB are no more executed. Building and executing raw queries usingDBmysql::request(),DBmysqlIterator::buildQuery()andDBmysqlIterator::execute()methods is also prohibited. To execute DB queries, eitherDBmysql::request()can be used to craft query using the GLPI query builder, orDBmysql::doQuery()can be used for safe queries to execute DB query using a self-crafted a SQL string. js/fuzzysearch.jsreplaced withFuzzySearch/ModalVue component.Html::fuzzySearch()replaced withHtml::getMenuFuzzySearchList()function.NotificationEvent::raiseEvent()signature cahnged. A new$triggerparameter has been added at 4th position, and$labelis now the 5th parameter.NotificationEventInterface::raise()has a new$triggerparameter.QueryExpressionclass moved toGlpi\DBALnamespace.QueryParamclass moved toGlpi\DBALnamespace.QuerySubQueryclass moved toGlpi\DBALnamespace.QueryUnionclass moved toGlpi\DBALnamespace.PrinterLog::getMetrics()method has been made final.SavedSearch::showSaveButton()replaced withpages/tools/savedsearch/save_button.html.twigtemplate.showSystemInformationsmethod for$CFG_GLPI['systeminformations_types']types renamed togetSystemInformationand should return an array with a label and content.DisplayPreferenceconfig form POST handling moved toajax/displaypreference.phpscript. The front file is for displaying the tabs only.Document::send()signature changed. The$contextparameter has been removed.titleproperty of Kanban items must be text only. HTML no longer supported.kanban:filterJS event now includes the columns in the event data. Filtering must set the_filtered_outproperty of cards to hide them instead of changing the elements in the DOM.CommonITILActor::getActors()signature changed. The$items_idparameter must strictly be an integer.- The
date_modproperty for historical entries returned byLog::getHistoryDatais no longer formatted based on the user's preferences. Rule::dropdownRulesMatch()has been made protected.ITILTemplateField::showForITILTemplate()method is no longer abstract.CommonITILTask::getItilObjectItemTypeis now static.- The
Item_Ticket$1tab should be used in replacement of theTicket$1tab to display tickets associated with an item. - Specifying the
rankingof a rule during add/update now triggersRuleCollection::moveRuleto manage the rankings of other rules to try to keep them valid and in order. Lock::getLocksQueryInfosByItemType()has been made private.DBmysql::request(),DBmysqlIterator::buildQuery()andDBmysqlIterator::execute()methods signatures changed.- Some values for the
$typeparameters of severalStatmethods have changed to match English spelling (technicien -> technician). showInstantiationForm()method for Network Port classes are now expected to output HTML for a flex form instead of a table.NetworkName::showFormForNetworkPort()now outputs HTML for a flex form instead of a table.NetworkPortInstantiation::showSocketField(),NetworkPortInstantiation::showMacField(),NetworkPortInstantiation::showNetworkCardFieldnow outputs HTML for a flex form instead of a table.CommonGLPI::can*()andCommonDBTM::can*()methods now have strict type hints for their parameters and return types.- Multiple methods in
CommonDeviceand sub-classes now have return types defined (classes that extends these must match the new method signatures). templates/password_form.html.twigshould no longer be used directly. Usetemplates/forgotpassword.html.twig,templates/updatepassword.html.twigor a custom template.- Usage of
ajax/dropdownMassiveActionAddValidator.phpandajax/dropdownValidator.phpnow requires avalidation_classparameter. - Usage of
ajax/dropdownValidator.phpwith theusers_id_validateparameter is no longer supported. Useitems_id_targetinstead. Glpi\Dashboard\Filters\AbstractFilter::field()method has been made protected.- Usage of
CommonITILValidation::dropdownValidator()with thenameandusers_id_validateoptions are no longer supported. Useprefixanditemtype_target/items_id_targetrespectively instead. - The
helperproperty of form fields will not support anymore the presence of HTML code. Glpi\Application\ErrorHandlerconstructor visibility has been changed to private.GLPI::initErrorHandler()does not return any value anymore.- The
inc/autoload.function.php,inc/based_config.php,inc/config.php,inc/db.function.phpandinc/define.phpfiles have been removed and theinc/includes.phpfile has been almost emptied. The corresponding global functions, constants and variables are now loaded and initialized automatically and the corresponding GLPI boostraping logic is now executed automatically. Plugin::init()andPlugin::checkStates()methods signature changed. It is not anymore possible to exclude specific plugins.- In a HTTP request context,
$_SERVER['PATH_INFO'],$_SERVER['SCRIPT_FILENAME'] and$_SERVER['SCRIPT_NAME']will no longer contain the path to the requested script, but will contain the path to thepublic/index.php` script. - Any class added to
$CFG_GLPI['directconnect_types']must now use theGlpi\Features\AssignableItemtrait as multi-group support is required. - For assets,
groups_idandgroups_id_techfields were changed from integers to arrays and are loaded into thefieldsarray aftergetFromDB/getEmpty. If reading directly from the DB, you need to query the new linking tableglpi_groups_items. Group::getDataItems()signature changed. The two first parameters$typesand$fieldwere replaced by a unique boolean$techparameter that is used to compute the$typesand$fieldvalues automatically.CartridgeItem::addCompatibleType()method is now static.Rule::initRule()has been made final and non static and its signature changed.Clonable::clone()andClonable::cloneMultiple()methods now accept a$clone_as_templateparameter to allow creating templates.enable_partial_warningsoption removed fromSavedSearch::displayMine().enable_partial_warningsoption removed fromSavedSearch::execute().enable_partial_warningsoption removed fromSavedSearch::getMine().Transferclass is now final.Transfer::addNotToBeTransfer()method is now private.Transfer::addToAlreadyTransfer()method is now private.Transfer::addToBeTransfer()method is now private.Transfer::cleanSoftwareVersions()method is now private.Transfer::copySingleSoftware()method is now private.Transfer::copySingleVersion()method is now private.Transfer::simulateTransfer()method is now private.Transfer::transferAffectedLicense()method is now private.Transfer::transferCertificates()method is now private.Transfer::transferCompatiblePrinters()method is now private.Transfer::transferContracts()method is now private.Transfer::transferDevices()method is now private.Transfer::transferDirectConnection()method is now private.Transfer::transferDocuments()method is now private.Transfer::transferDropdownLocation()method is now private.Transfer::transferDropdownSocket()method is now private.Transfer::transferHelpdeskAdditionalInformations()method is now private.Transfer::transferHistory()method is now private.Transfer::transferInfocoms()method is now private.Transfer::transferItem()method is now private.Transfer::transferItem_Disks()method is now private.Transfer::transferItemSoftwares()method is now private.Transfer::transferLinkedSuppliers()method is now private.Transfer::transferNetworkLink()method is now private.Transfer::transferPrinterCartridges()method is now private.Transfer::transferReservations()method is now private.Transfer::transferSingleSupplier()method is now private.Transfer::transferSoftwareLicensesAndVersions()method is now private.Transfer::transferSupplierContacts()method is now private.Transfer::transferTaskCategory()method is now private.Transfer::transferTickets()method is now private.linkoptionoption has been removed fromCommonDBTM::getLink().commentsandiconoptions have been removed fromCommonDBTM::getName().commentsandiconoptions have been removed fromCommonDBTM::getNameID().- The
$keepDbparameter has been removed fromHtml::footer(). DBConnection::createMainConfig()signature changed. The$allow_myisamparameter has been removed.DBConnection::createSlaveConnectionFile()signature changed. The$allow_myisamparameter has been removed.DBmysql::$allow_myisamproperty has been removed.Contract::getExpiredCriteria()renamed toContract::getNotExpiredCriteria()to match the actual behavior.Migration::updateRight()renamed toMigration::replaceRight().Search::getOptions()no longer returns a reference.
- Usage of the
/marketplacepath for plugins URLs. All plugins URLs should now start with/plugins. - Usage of
GLPI_PLUGINS_PATHjavascript variable. - Usage of
MAIL_SMTPSSLandMAIL_SMTPTLSconstants. $AJAX_INCLUDEglobal variable usage. Use$this->setAjax()in legacy/ajax/and/frontscripts orHtml::setAjax()andSession::setAjax().- Usage of
nameandusers_id_validateparameter inajax/dropdownValidator.php. - Usage of
users_id_validateparameter infront/commonitilvalidation.form.php. front/ticket_ticket.form.phpscript usage.- Usage of
users_id_validateinput inCommonITILObject. - Defining "users_id_validate" field without defining "itemtype_target"/"items_id_target" in "CommonITILValidation".
- Usage of
nameandusers_id_validateoptions inCommonITILValidation::dropdownValidator(). - Usage of
get_plugin_web_dirTwig function. - Usage of
verbatim_valueTwig filter. js/Forms/FaIconSelector.jsand thereforewindow.GLPI.Forms.FaIconSelectorhas been deprecated and replaced byjs/modules/Form/WebIconSelector.jslinkuser_types,linkgroup_types,linkuser_tech_types,linkgroup_tech_typesconfiguration entries have been merged in a uniqueassignable_typesconfiguration entry.- Usage of the
front/dropdown.common.phpand thedropdown.common.form.phpfiles. There is now a generic controller that will serve the search and form pages of anyDropdownclass. - Usage of the
$linkparameter informatUserName()andDbUtils::formatUserName(). UseformatUserLink()orDbUtils::formatUserLink()instead. - Usage of the
$linkparameter ingetUserName()andDbUtils::getUserName(). UsegetUserLink(),DbUtils::getUserLink(), orUser::getInfoCard()instead. - Usage of the
$withcommentparameter ingetTreeValueCompleteName(),DbUtils::getTreeValueCompleteName()andDropdown::getDropdownName(). UseDropdown::getDropdownComments()instead. Auth::getErr()ComputerAntivirushas been deprecated and replaced byItemAntivirusComputerVirtualMachinehas been deprecated and replaced byItemVirtualMachineDBmysql::deleteOrDie(). UseDBmysql::delete()instead.DBmysql::doQueryOrDie(). UseDBmysql::doQuery()instead.DBmysql::insertOrDie(). UseDBmysql::insert()instead.DBmysql::truncate()DBmysql::truncateOrDie()DBmysql::updateOrDie(). UseDBmysql::update()instead.Glpi\Application\View\Extension\DataHelpersExtension::getVerbatimValue()Glpi\Application\View\Extension\PluginExtension::getPluginWebDir()Glpi\Dashboard\Filter::getAll()Glpi\Http\Response::sendError(). Throw aGlpi\Exception\Http\*HttpExceptionexception instead.Glpi\Toolbox\Sanitizer::dbEscape()Glpi\Toolbox\Sanitizer::dbEscapeRecursive()Glpi\Toolbox\Sanitizer::dbUnescape()Glpi\Toolbox\Sanitizer::dbUnescapeRecursive()Glpi\Toolbox\Sanitizer::decodeHtmlSpecialChars()Glpi\Toolbox\Sanitizer::decodeHtmlSpecialCharsRecursive()Glpi\Toolbox\Sanitizer::encodeHtmlSpecialChars()Glpi\Toolbox\Sanitizer::encodeHtmlSpecialCharsRecursive()Glpi\Toolbox\Sanitizer::getVerbatimValue()Glpi\Toolbox\Sanitizer::isDbEscaped()Glpi\Toolbox\Sanitizer::isHtmlEncoded()Glpi\Toolbox\Sanitizer::isNsClassOrCallableIdentifier()Glpi\Toolbox\Sanitizer::sanitize()Glpi\Toolbox\Sanitizer::unsanitize()Html::ajaxFooter()Html::cleanInputText()Html::cleanPostForTextArea()Html::createProgressBar()Html::displayErrorAndDie(). Throw aGlpi\Exception\Http\BadRequestHttpExceptionexception instead.Html::displayNotFoundError(). Throw aGlpi\Exception\Http\NotFoundHttpExceptionexception instead.Html::displayRightError(). Throw aGlpi\Exception\Http\AccessDeniedHttpExceptionexception instead.Html::entities_deep()Html::entity_decode_deep()Html::jsGetElementbyID()Html::jsGetDropdownValue()Html::jsSetDropdownValue()HookManager::enableCSRF()ITILFollowup::ADDMYTICKETconstant. UseITILFollowup::ADDMY.ITILFollowup::ADDGROUPTICKETconstant. UseITILFollowup::ADD_AS_GROUP.ITILFollowup::ADDALLTICKETconstant. UseITILFollowup::ADDALLITEM.Pdu_Plughas been deprecated and replaced byItem_PlugPlugin::getWebDir()Search::joinDropdownTranslations()Ticketlink_to_problemmassive action is deprecated. UseCommonITILObject_CommonITILObjectaddmassive action instead.Ticket_Ticketaddmassive action is deprecated. UseCommonITILObject_CommonITILObjectaddmassive action instead.Ticket_Ticket::getLinkedTicketsTo()TimerclassToolbox::addslashes_deep()Toolbox::seems_utf8()Toolbox::stripslashes_deep()
GLPI_USE_CSRF_CHECK,GLPI_USE_IDOR_CHECK,GLPI_CSRF_EXPIRES,GLPI_CSRF_MAX_TOKENSandGLPI_IDOR_EXPIRESconstants.GLPI_DEMO_MODEconstant.GLPI_DUMP_DIRconstant.$CFG_GLPI_PLUGINSglobal variable.$DBCONNECTION_REQUIREDand$USEDBREPLICATEglobal variables. UseDBConnection::getReadConnection()to get the most apporpriate connection for read only operations.$dont_check_maintenance_modeand$skip_db_checkglobal variables.$GLPIglobal variable.$LANGglobal variable.$PLUGINS_EXCLUDEDand$PLUGINS_INCLUDEDglobal variables.$SECURITY_STRATEGYglobal variable.- Usage of
$CFG_GLPI['itemdevices']and$CFG_GLPI['item_device_types']configuration entries. UseItem_Devices::getDeviceTypes()to get theItem_Devicesconcrete class list. - Usage of
csrf_compliantplugins hook. - Usage of
migratetypesplugin hooks. - Usage of
planning_scheduler_keyplugins hook. - Logging within the
mail-debug.loglog file. X-GLPI-Sanitized-ContentREST API header support.- Handling of encoded/escaped value in
autoName(). closeDBConnectionsregenerateTreeCompleteName()AuthLDAP::ldapChooseDirectory()AuthLDAP::displayLdapFilter()AuthLDAP::dropdownUserDeletedActions()AuthLDAP::dropdownUserRestoredActions()AuthLDAP::getLdapDeletedUserActionOptions()AuthLDAP::manageValuesInSession()AuthLDAP::showDateRestrictionForm()Cartridge::getNotificationParameters()CartridgeItem::showDebug()Certificate::showDebug()Change::showDebug()Change_Item::showForChange()CommonDBTM::$deduplicate_queued_notificationsproperty.CommonDBTM::getCacheKeyForFriendlyName()CommonDBTM::getSNMPCredential()CommonDBTM::showDebugInfo()CommonDevice::title()CommonDropdown::$first_level_menu,CommonDropdown::$second_level_menuandCommonDropdown::$third_level_menuproperties.CommonDropdown::displayHeader()CommonGLPI::$typeproperty.CommonGLPI::getAvailableDisplayOptions()CommonGLPI::getDisplayOptions()CommonGLPI::getDisplayOptionsLink()CommonGLPI::updateDisplayOptions()CommonGLPI::showDislayOptions()CommonITILActor::showUserNotificationForm()CommonITILActor::showSupplierNotificationForm()CommonITILObject::$userentity_oncreateproperty.CommonITILObject::getAssignName()CommonITILObject::isValidator()CommonITILObject::showActorAddFormOnCreate()CommonITILValidation::alreadyExists()CommonITILValidation::getTicketStatusNumber()CommonTreeDropdown::sanitizeSeparatorInCompletename()CommonTreeDropdown::unsanitizeSeparatorInCompletename()Computer_Item::countForAll()Computer_Item::disconnectForItem()Computer_Item::dropdownAllConnect()Computer_Item::showForComputer()Computer_Item::showForItem()ComputerAntivirus::showForComputer()ComputerVirtualMachine::showForComputer()Config::detectRootDoc()Config::getCurrentDBVersion()Config::showDebug()Config::showLibrariesInformation()Config::validatePassword()Consumable::showAddForm()Consumable::showForConsumableItem()ConsumableItem::showDebug()Contract::commonListHeader()Contract::getContractRenewalIDByName()Contract::showDebug()Contract::showShort()DbUtils::closeDBConnections()DbUtils::regenerateTreeCompleteName()DBConnection::displayMySQLError()DBmysql::errorproperty.Document::getImage()Document::showUploadedFilesDropdown()Document::uploadDocument()Document_Item::showSimpleAddForItem()Dropdown::showAdvanceDateRestrictionSwitch()DropdownTranslation::canBeTranslated(). Translations are now always active.DropdownTranslation::getTranslationByName()DropdownTranslation::isDropdownTranslationActive(). Translations are now always active.Entity::getDefaultContractValues()Entity::cleanEntitySelectorCache()Entity::title()FieldUnicity::showDebug()GLPI::getErrorHandler()GLPI::getLogLevel()Glpi\Api\API::showDebug()Glpi\Api\API::returnSanitizedContent()Glpi\Application\ErrorHandler::handleSqlError()Glpi\Console\Command\ForceNoPluginsOptionCommandInterfaceclassGlpi\Dashboard\Filter::dates()Glpi\Dashboard\Filter::dates_mod()Glpi\Dashboard\Filter::itilcategory()Glpi\Dashboard\Filter::requesttype()Glpi\Dashboard\Filter::location()Glpi\Dashboard\Filter::manufacturer()Glpi\Dashboard\Filter::group_tech()Glpi\Dashboard\Filter::user_tech()Glpi\Dashboard\Filter::state()Glpi\Dashboard\Filter::tickettype()Glpi\Dashboard\Filter::displayList()Glpi\Dashboard\Filter::field()Glpi\Dashboard\Widget::getCssGradientPalette()Glpi\Debug\ToolbarclassGlpi\Event::showList()Glpi\Features\DCBreadcrumb::getDcBreadcrumb()Glpi\Features\DCBreadcrumb::getDcBreadcrumbSpecificValueToDisplay()Glpi\Features\DCBreadcrumb::isEnclosurePart()Glpi\Features\DCBreadcrumb::isRackPart()Glpi\Inventory\Conf::importFile()Glpi\Socket::executeAddMulti()Glpi\Socket::showNetworkPortForm()Glpi\System\Requirement\DataDirectoriesProtectedPathclass.Glpi\System\Requirement\ProtectedWebAccessclass.Glpi\System\Requirement\MysqliMysqlndclass.Glpi\System\Requirement\SafeDocumentRootclass.Glpi\System\Status\StatusChecker::getFullStatus()Group::title()Group_Useris_userdelegatefield.Html::autocompletionTextField()Html::clean()Html::closeArrowMassives()Html::displayAccessDeniedPage()Html::displayAjaxMessageAfterRedirect(). The JS function is already provided byjs/misc.js.Html::displayItemNotFoundPage()Html::jsConfirmCallback()Html::jsHide()Html::jsShow()Html::openArrowMassives()Html::showTimeField()Impact::buildNetwork()Infocom::showDebug()IPNetwork::recreateTree()IPNetwork::title()Item_Problem::showForProblem()Item_Ticket::showForTicket()ITILTemplate::getSimplifiedInterfaceFields()Knowbase::getTreeCategoryList()Knowbase::showBrowseView()Knowbase::showManageView()KnowbaseItem::addToFaq()KnowbaseItem::addVisibilityJoins()KnowbaseItem::addVisibilityRestrict()KnowbaseItem::showBrowseForm()KnowbaseItem::showManageForm()KnowbaseItem_Comment::displayComments()KnowbaseItem_KnowbaseItemCategory::displayTabContentForItem()KnowbaseItem_KnowbaseItemCategory::getTabNameForItem()KnowbaseItem_KnowbaseItemCategory::showForItem()KnowbaseItemTranslation::canBeTranslated(). Translations are now always active.KnowbaseItemTranslation::isKbTranslationActive(). Translations are now always active.Link::showForItem()Link_Itemtype::showForLink()MailCollector::listEncodings()MailCollector::title()ManualLink::showForItem()MigrationCleanerclassNetpointclassNetworkAlias::getInternetNameFromID()NetworkName::getInternetNameFromID()NetworkPort::getAvailableDisplayOptions()NetworkPort::getNetworkPortInstantiationsWithNames()NetworkPort::resetConnections()NetworkPortInstantiation::getGlobalInstantiationNetworkPortDisplayOptions()NetworkPortInstantiation::getInstantiationHTMLTable()and all sub classes overrides.NetworkPortInstantiation::getInstantiationHTMLTableHeaders()and all sub classes overrides.NetworkPortInstantiation::getInstantiationHTMLTableWithPeer()NetworkPortInstantiation::getInstantiationNetworkPortDisplayOptions()NetworkPortInstantiation::getInstantiationNetworkPortHTMLTable()NetworkPortInstantiation::getPeerInstantiationHTMLTable()and all sub classes overrides.NetworkPortMigrationclassNotificationEvent::debugEvent()NotificationTemplateTranslation::showDebug()OlaLevel::showForSLA(). Replaced byLevelAgreementLevel::showForLA().PlanningExternalEvent::addVisibilityRestrict()PlanningRecall::specificForm()Plugin::migrateItemType()ProfileRight::updateProfileRightAsOtherRight()ProfileRight::updateProfileRightsAsOtherRights()Project::showDebug()ProjectTask::showDebug()QuerySubQueryclass. Replaced byGlpi\DBAL\QuerySubQuery.QueryUnionclass. Replaced byGlpi\DBAL\QueryUnion.Reminder::addVisibilityJoins()ReminderTranslation::canBeTranslated(). Translations are now always active.ReminderTranslation::isReminderTranslationActive(). Translations are now always active.Reservation::displayError()ReservationItem::showDebugResa()RSSFeed::addVisibilityJoins()RSSFeed::addVisibilityRestrict()RSSFeed::showDiscoveredFeeds()Rule::$can_sortproperty.Rule::$orderbyproperty.Rule::showDebug()Rule::showMinimalActionForm()Rule::showMinimalCriteriaForm()Rule::showMinimalForm()Rule::showNewRuleForm()RuleCollection::showTestResults()RuleRight::showNewRuleForm()RuleRightCollection::displayActionByName()RuleRightCollection::showTestResults()RuleImportComputerclass.RuleImportComputerCollectionclass.RuleMatchedLog::showFormAgent().RuleMatchedLog::showItemForm().SavedSearch::prepareQueryToUse()Search::SYLK_OUTPUTconstant.Search::computeTitle()Search::csv_clean()Search::findCriteriaInSession()Search::getDefaultCriteria()Search::getLogicalOperators()Search::getMetaReferenceItemtype()Search::outputData()Search::sylk_clean()Session::buildSessionName()SlaLevel::showForSLA(). Replaced byLevelAgreementLevel::showForLA().SLM::setTicketCalendar()SoftwareLicense::getSonsOf()SoftwareLicense::showDebug()Transfer::$inittypeproperty.Ticket::canDelegateeCreateTicket()Ticket::showDebug()Ticket::showFormHelpdesk()Ticket::showFormHelpdeskObserver()Ticket_Ticket::checkParentSon()Ticket_Ticket::countOpenChildren()Ticket_Ticket::manageLinkedTicketsOnSolved(). Replaced byCommonITILObject_CommonITILObject::manageLinksOnChange().TicketTemplate::showHelpdeskPreview()Toolbox::canUseCas()Toolbox::checkValidReferer()Toolbox::clean_cross_side_scripting_deep()Toolbox::endsWith()Toolbox::filesizeDirectory()Toolbox::getHtmLawedSafeConfig()Toolbox::getHtmlToDisplay()Toolbox::handleProfileChangeRedirect()Toolbox::logError()Toolbox::logNotice()Toolbox::logWarning()Toolbox::showMailServerConfig()Toolbox::sodiumDecrypt()Toolbox::sodiumEncrypt()Toolbox::unclean_cross_side_scripting_deep()Transfer::manageConnectionComputer()Update::initSession()User::getDelegateGroupsForUser()User::showDebug()User::title()XMLclass.- Usage of
Search::addOrderBysignature with ($itemtype, $ID, $order) parameters - Javascript file upload functions
dataURItoBlob,extractSrcFromImgTag,insertImgFromFile(),insertImageInTinyMCE,isImageBlobFromPaste,isImageFromPaste. CommonDBTM::$fkfieldproperty.getHTMLaction forajax/fuzzysearch.phpendpoint.DisplayPreference::showFormGlobaltargetparameter.DisplayPreference::showFormPersotarget_idparameter.$_SESSION['glpiroot']session variable.$DEBUG_SQL,$SQL_TOTAL_REQUEST,$TIMER_DEBUGand$TIMER` global variables.$CFG_GLPI['debug_sql']and$CFG_GLPI['debug_vars']configuration options.addgroupanddeletegroupactions infront/user.form.php.ajax/ldapdaterestriction.phpscript.ajax/ticketassigninformation.phpscript. Useajax/actorinformation.phpinstead.ajax/planningcheck.phpscript. UsePlanning::showPlanningCheck()instead.test_ldapandtest_ldap_replicateactions infront/authldap.form.php. Useajax/ldap.phpinstead.ajax/ticketsatisfaction.phpandajax/changesatisfaction.phpscripts. Accessajax/commonitilsatisfaction.phpdirectly instead.- Usage of the
$cutparameter informatUserName()andDbUtils::formatUserName(). - Handling of the
delegateright inUser::getSqlSearchResult().
- Searching IDs in dropdowns now matches the beginning of the ID instead of anywhere in the ID.
NotificationTarget::canNotificationContentBeDisclosed()method that can be overriden to indicates whether a notification contents should be undisclosed.
conditionanddisplaywithparameters must now be added in IDOR token creation data when they are not empty.
- Permissions for historical data and system logs (Administration > Logs) are now managed by "Historical (READ)" and "System Logs (READ)" respectively.
Entity::cleanEntitySelectorCache()no longer has any effect as the entity selector is no longer cached as a unique entry
- Usage of the
DBmysql::query()method is deprecated, for security reasons, as it is most of the time used in an insecure way. To execute DB queries, eitherDBmysql::request()can be used to craft query using the GLPI query builder, eitherDBmysql::doQuery()can be used for safe queries to execute DB query using a self-crafted SQL string. This deprecation will not trigger any error, unless theGLPI_STRICT_DEPRECATEDconstant is set totrue, to avoid cluttering error logs.
- Unified Debug bar feature has been added to display debug information in the browser as a replacement and expansion on the previous, individual debug panels.
- Debug panels and the toggle button to show/hide the primary debug panel that was next to the current user's name in the top right corner of the screen have been removed.
debug_tabsplugin hook
CommonDBTM::getMessageReferenceEvent()method that can be overridden to tweak notifications grouping in mail clients.
-
Html::displayDebugInfo()method no longer has any effect. The functionality was replaced by the new Debug Bar feature. -
Hooks::DEBUG_TABS -
$TIMER_DEBUGglobal variable. -
$DEBUG_SQLglobal variable. -
$SQL_TOTAL_REQUESTglobal variable. -
$CFG_GLPI['debug_sql']configuration option. -
$CFG_GLPI['debug_vars']configuration option. -
Usage of parameter
$cleaninAuthLDAP::getObjectByDn()andAuthLDAP::getUserByDn().
- Itemtype that can be linked to a disk are now declared in
$CFG_GLPI['disk_types'].
Glpi\Inventory\Conf::importFile()RSSFeed::showDiscoveredFeeds()Toolbox::checkValidReferer()
glpi:command prefix has been removed from console commands canonical name.
CommonDBTM::pre_addToDB()added.
- PDF export library has been changed back from
mPDFtoTCPDF.
- Gantt feature has been moved into the
ganttplugin.
plugin_xxx_activate()andplugin_xxx_deactivatehooks support.
Glpi\Api\Api::initEndpoint()visibility changed toprotected.
GlpiGanttjavascript helper anddhtmlx-ganttlibrary.Glpi\Ganttnamespace and all corresponding classes.Project::getDataToDisplayOnGantt()Project::showGantt()ProjectTask::getDataToDisplayOnGantt()ProjectTask::getDataToDisplayOnGanttForProject()
- Added UUID to all other itemtypes that are related to Operating Systems (Phones, Printers, etc)
- Added a button to the General > System configuration tab to copy the system information
- APCu and WinCache are not anymore use by GLPI, use
php bin/console cache:configurecommand to configure cache system. - PDF export library has been changed from
TCPDFtomPDF. - The search engine and search results page now support sorting by multiple fields.
- The search result lists now refresh/update without triggering a full page reload.
- Replaced user-facing cases of master/slave usage replaced with main/replica.
- Usage of XML-RPC API is deprecated.
- The database "slaves" property in the status checker (/status.php and glpi:system:status) is deprecated. Use "replicas" instead,
- The database "master" property in the status checker (/status.php and glpi:system:status) is deprecated. Use "main" instead,
- Autocomplete feature on text fields.
- Usage of alternative DB connection encoding (
DB::$dbencproperty). - Deprecated
scripts/ldap_mass_sync.phphas been removed in favor ofglpi:ldap:synchronize_userscommand available usingbin/console - Deprecated
scripts/compute_dictionary.phphas been removed in favor ofglpi:rules:replay_dictionnary_rulescommand available usingbin/console - Deprecated
scripts/softcat_mass_compute.phphas been removed in favor ofglpi:rules:process_software_category_rulescommand available usingbin/console
- Added
DBMysql::setSavepoint()to create savepoints within a transaction. - Added
CommonDBTM::showForm()to have a generic showForm for asset (based on a twig template).
- MySQL warnings are now logged in SQL errors log.
Guzzlelibrary has been upgraded to version 7.4.Symfony\Consolelibrary has been upgraded to version 5.4.CommonGLPIconstructor signature has been declared in an interface (CommonGLPIInterface).DBmysqlIteratorclass compliancy withIteratorhas been fixed (i.e.DBmysqlIterator::next()does not return current row anymore).Domainclass inheritance changed fromCommonDropdowntoCommonDBTM.showForm()method of all classes inheritingCommonDBTMhave been changed to matchCommonDBTM::showForm()signature.- Format of
Message-Idheader sent in Tickets notifications changed to match format used by other items. - Added
DB::truncate()to replace raw SQL queries - Impact context
positionsfield type changed fromTEXTtoMEDIUMTEXT - Field
dateof KnowbaseItem has been renamed todate_creation. - Field
date_creationof KnowbaseItem_Revision has been renamed todate. - Field
date_creationof NetworkPortConnectionLog has been renamed todate. - Field
dateof Notepad has been renamed todate_creation. - Field
date_modof ObjectLock has been renamed todate. - Field
dateof ProjectTask has been renamed todate_creation. - Table
glpi_netpointshas been renamed toglpi_sockets. GLPI_FORCE_EMPTY_SQL_MODEconstant has been removed in favor ofGLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODEusage.CommonDBTM::clone(),CommonDBTM::prepareInputForClone()andCommonDBTM::post_clone()has been removed. Clonable objects must now useGlpi\Features\Clonabletrait.CommonDBTM::notificationqueueonactionproperty has been removed in favor ofCommonDBTM::deduplicate_queued_notificationsproperty.CommonDropdown::displaySpecificTypeField()has a new$optionsparameter.DBMysql::rollBacksupports anameparameter for rolling back to a savepoint.Knowbase::getJstreeCategoryList()as been replaced byKnowbase::getTreeCategoryList().NetworkPortInstantiation::showNetpointField()has been renamed toNetworkPortInstantiation::showSocketField().NotificationSettingConfig::showForm()renamed toNotificationSettingConfig::showConfigForm().RuleMatchedLog::showForm()renamed toRuleMatchedLog::showItemForm().Search::addOrderBy()signature changed.TicketSatisfaction::showForm()renamed toTicketSatisfaction::showSatisfactionForm().Transfer::transferDropdownNetpoint()has been renamed toTransfer::transferDropdownSocket().Dashboardglobal javascript object has been moved toGLPI.Dashboard.
- Usage of
MyISAMengine in database, in favor ofInnoDBengine. - Usage of
utf8mb3charset/collation in database in favor ofutf8mb4charset/collation. - Usage of
datetimefield type in database, in favor oftimestampfield type. - Handling of encoded/escaped value in
autoName() Netpointhas been deprecated and replaced bySocketCommonDropdown::displayHeader(), useCommonDropdown::displayCentralHeader()instead and make sure to override properlyfirst_level_menu,second_level_menuandthird_level_menu.GLPI::getLogLevel()Glpi\System\Status\StatusChecker::getFullStatus()Html::clean()MailCollector::listEncodings()RuleImportComputerclassRuleImportComputerCollectionclassSLM::setTicketCalendar()Toolbox::clean_cross_side_scripting_deep()Toolbox::endsWith()Toolbox::filesizeDirectory()Toolbox::getHtmlToDisplay()Toolbox::logError()Toolbox::logNotice()Toolbox::logWarning()Toolbox::sodiumDecrypt()Toolbox::sodiumEncrypt()Toolbox::startsWith()Toolbox::unclean_cross_side_scripting_deep()
jQueryUIhas been removed in favor oftwbs/bootstrap. This implies removal of following widgets:$.accordion,$.autocomplete,$.button,$.dialog,$.draggable,$.droppable,$.progressbar,$.resizable,$.selectable,$.sortable,$.tabs,$.tooltip.- Usage of
$orderparameter ingetAllDataFromTable()(DbUtils::getAllDataFromTable()) - Usage of
tableparameter in requests made toajax/comments.php - Usage of
GLPI_FORCE_EMPTY_SQL_MODEconstant - Usage of
GLPI_PREVERconstant - Support of
doc_types,helpdesk_typesandnetport_typeskeys inPlugin::registerClass() $CFG_GLPI['layout_excluded_pages']entry$CFG_GLPI['transfers_id_auto']entry$CFG_GLPI['use_ajax_autocompletion']entry$DEBUG_AUTOLOADglobal variable$LOADED_PLUGINSglobal variable$PHP_LOG_HANDLERglobal variable$SQL_LOG_HANDLERglobal variableCommonDBTM::notificationqueueonactionpropertyNotificationTarget::html_tagspropertygetAllDatasFromTable()getRealQueryForTreeItem()Ajax::createFixedModalWindow()Ajax::createSlidePanel()Calendar_Holiday::cloneCalendar()Calendar::duplicate()CalendarSegment::cloneCalendar()Change::getCommonLeftJoin()Change::getCommonSelect()Change::showAnalysisForm()Change::showPlanForm()CommonDBTM::clone()CommonDBTM::getRawName()CommonDBTM::prepareInputForClone()CommonDBTM::post_clone()CommonDBTM::showDates()CommonGLPI::isLayoutExcludedPage()CommonGLPI::isLayoutWithMain()CommonGLPI::showPrimaryForm()CommonITILObject::displayHiddenItemsIdInput()CommonITILObject::filterTimeline()CommonITILObject::getActorIcon()CommonITILObject::getSplittedSubmitButtonHtml()CommonITILObject::showActorsPartForm()CommonITILObject::showFormHeader()CommonITILObject::showGroupsAssociated()CommonITILObject::showSupplierAddFormOnCreate()CommonITILObject::showSuppliersAssociated()CommonITILObject::showTimeline()CommonITILObject::showTimelineForm()CommonITILObject::showTimelineHeader()CommonITILObject::showUsersAssociated()Computer_Item::cloneComputer()Computer_Item::cloneItem()Computer_SoftwareLicenseclassComputer_SoftwareVersionclassComputerAntivirus::cloneComputer()Contract::cloneItem()Contract_Item::cloneItem()ContractCost::cloneContract()Config::agreeDevMessage()Config::checkWriteAccessToDirs()Config::displayCheckExtensions()Config::getCache()DBMysql::affected_rows()DBMysql::areTimezonesAvailable()DBMysql::data_seek()DBMysql::fetch_array()DBMysql::fetch_assoc()DBMysql::fetch_object()DBMysql::fetch_row()DBMysql::field_name()DBMysql::free_result()DBmysql::getTableSchema()DBMysql::insert_id()DBMysql::isMySQLStrictMode()DBMysql::list_fields()DBMysql::notTzMigrated()DBMysql::num_fields()DbUtils::getRealQueryForTreeItem()Dropdown::getDropdownNetpoint()DCBreadcrumb::showDcBreadcrumb()Document_Item::cloneItem()Entity::showSelector()Glpi\Marketplace\Api\Plugins::getNewPlugins()Glpi\Marketplace\Api\Plugins::getPopularPlugins()Glpi\Marketplace\Api\Plugins::getTopPlugins()Glpi\Marketplace\Api\Plugins::getTrendingPlugins()Glpi\Marketplace\Api\Plugins::getUpdatedPlugins()Html::autocompletionTextField()Html::displayImpersonateBanner()Html::displayMainMenu()Html::displayMenuAll()Html::displayTopMenu()Html::fileForRichText()Html::generateImageName()Html::imageGallery()Html::jsDisable()Html::jsEnable()Html::nl2br_deep()Html::replaceImagesByGallery()Html::resume_name()Html::setSimpleTextContent()Html::setRichTextContent()Html::showProfileSelecter()Html::weblink_extract()Infocom::cloneItem()Itil_Project::cloneItilProject()ITILFollowup::showApprobationForm()ITILTemplate::getBeginHiddenFieldText()ITILTemplate::getBeginHiddenFieldValue()ITILTemplate::getEndHiddenFieldText()ITILTemplate::getEndHiddenFieldValue()Item_Devices::cloneItem()Item_Disk::cloneItem()Item_OperatingSystem::cloneItem()Item_SoftwareLicense::cloneComputer()Item_SoftwareLicense::cloneItem()Item_SoftwareVersion::cloneComputer()Item_SoftwareVersion::cloneItem()Item_SoftwareVersion::showForComputer()Item_SoftwareVersion::updateDatasForComputer()KnowbaseItem_Item::cloneItem()LevelAgreement::showForTicket()NetworkPort::cloneItem()Notepad::cloneItem()NotificationTargetTicket::isAuthorMailingActivatedForHelpdesk()Plugin::getGlpiPrever()Plugin::isGlpiPrever()Plugin::setLoaded()Plugin::setUnloaded()Plugin::setUnloadedByName()Problem::getCommonLeftJoin()Problem::getCommonSelect()Problem::showAnalysisForm()ProjectCost::cloneProject()ProjectTeam::cloneProjectTask()ProjectTask::cloneProjectTeam()Reservation::displayReservationDay()Reservation::displayReservationsForAnItem()Search::isDeletedSwitch()Ticket::getCommonLeftJoin()Ticket::getCommonSelect()Ticket::getTicketTemplateToUse()Ticket::showDocumentAddButton()Ticket_Ticket::displayLinkedTicketsTo()TicketTemplate::getFromDBWithDatas()Toolbox::canUseImapPop()Toolbox::checkSELinux()Toolbox::commonCheckForUseGLPI()Toolbox::convertImageToTag()Toolbox::decrypt()Toolbox::doubleEncodeEmails()Toolbox::encrypt()Toolbox::getGlpiSecKey()Toolbox::removeHtmlSpecialChars()Toolbox::sanitize()Toolbox::throwError()Toolbox::unclean_html_cross_side_scripting_deep()Toolbox::useCache()Toolbox::userErrorHandlerDebug()Toolbox::userErrorHandlerNormal()Transfer::transferComputerSoftwares()Update::declareOldItems()User::showPersonalInformation()
X-Forwarded-Forheader value is no longer used during API access controls, API requests passing through proxies may be refused for security reasons.
- All POST request made to
/ajax/scripts are now requiring a valid CSRF token in theirX-Glpi-Csrf-Tokenheader. Requests done using jQuery are automatically including this header, from the moment that the page header is built usingHtml::includeHeader()method and thejs/common.jsscript is loaded.
- Usage of "followups" option in
CommonITILObject::showShort() CommonITILTask::showInObjectSumnary()ITILFollowup::showShortForITILObject()
- Remove deprecation of
Search::getMetaReferenceItemtype()
iframeelements are not anymore allowed in rich text unlessGLPI_ALLOW_IFRAME_IN_RICH_TEXTconstant is defined totrue
Search::getMetaReferenceItemtype()
- Usage of alternative DB connection encoding (
DB::$dbencproperty).
- Ability to use SQL expressions as string in criterion values in SQL iterator (replaced by usage of
QueryExpression). - Ability to delete a plugin image using
/front/pluginimage.send.phpscript.
- Encrypted file systems support.
- Mails collected from suppliers can be marked as private on an entity basis.
- Ability to add custom CSS in entity configuration.
- CLI commands to enable and disable maintenance mode.
- Operating system links on Monitors, Peripherals, Phones and Printers.
- Add datacenter items to global search
- Project task search options for Projects
- Automatic action to purge closed tickets
- Ability to automatically calculate project's percent done
- Software link on Phones.
- Add and answer approvals from timeline
- Add lightbox with PhotoSwipe to timeline images
- Ability to copy tasks while merging tickets
- the API gives the ID of the user who logs in with initSession
- Kanban view for projects
- Network ports on Monitors
- Add warning when there are unsaved changes in forms
- Add ability to get information from the status endpoint in JSON format using Accept header
- Add
glpi:system:statusCLI command for getting the GLPI status
- PHP error_reporting and display_errors configuration directives are no longer overrided by GLPI, unless in debug mode (which forces reporting and display of all errors).
scripts/migrations/racks_plugin.phphas been replaced byglpi:migration:racks_plugin_to_corecommand available usingbin/console- Encryption alogithm improved using libsodium
- Add translation functions
__(),_n(),_x()and_nx()in javascript in browser context. Migration::renameItemtype()method to update of database schema/values when an itemtype class is renamed- Menu returned by
CommonGLPI::getMenuContent()method override may now define an icon for each menu entry. CommonDBConnexity::getItemsAssociatedTo()method to get the items associated to the given oneCommonDBConnexity::getItemsAssociationRequest()method to get the DB request to use to get the items associated to the given oneCommonDBTM::clone()method to clone the current itemCommonDBTM::prepareInputForClone()method to modify the input data that will be used for the cloningCommonDBTM::post_clone()method to perform other steps after an item has been cloned (like clone the elements it is associated to)
- jQuery library has been upgraded from 2.2.x to 3.4.x. jQuery Migrate is used to ensure backward compatibility in most cases.
DBmysqlIterator::handleOrderClause()supports QueryExpressions- Use Laminas instead of deprecated ZendFramework
- Database datetime fields have been replaced by timestamp fields to handle timezones support.
- Database integer/float fields values are now returned as number instead of strings from DB read operations.
- Field
domains_idof Computer, NetworkEquipment and Printer has been dropped and data has been transfered intoglpi_domains_itemstable. - Plugin status hook can now be used to provide an array with more information about the plugin's status the status of any child services.
- Returned array should contain a 'status' value at least (See status values in Glpi\System\Status\StatusChecker)
- Old style returns are still supported
DBMysql::fetch_array()DBMysql::fetch_row()DBMysql::fetch_assoc()DBMysql::fetch_object()DBMysql::data_seek()DBMysql::insert_id()DBMysql::num_fields()DBMysql::field_name()DBMysql::list_fields()DBMysql::affected_rows()DBMysql::free_result()DBMysql::isMySQLStrictMode()getAllDatasFromTablerenamed togetAllDataFromTable()- Usage of
$orderparameter ingetAllDataFromTable()(DbUtils::getAllDataFromTable()) Ticket::getTicketTemplateToUse()renamed toTicket::getITILTemplateToUse()TicketTemplate::getFromDBWithDatas()renamed toTicketTemplate::getFromDBWithData()(inherited fromITILTemplate)Computer_SoftwareLicensereplaced byItem_SoftwareLicenseand tableglpi_computers_softwarelicensesrenamed toglpi_items_softwarelicensesComputer_SoftwareVersionreplaced byItem_SoftwareVersionand tableglpi_computers_softwareversionsrenamed toglpi_items_softwareversionsItem_SoftwareVersion::updateDatasForComputerrenamed toItem_SoftwareVersion::updateDatasForItemItem_SoftwareVersion::showForComputerrenamed toItem_SoftwareVersion::showForItemItem_SoftwareVersion::softsByCategoryrenamed toItem_SoftwareVersion::softwareByCategoryItem_SoftwareVersion::displaySoftsByLicenserenamed toItem_SoftwareVersion::displaySoftwareByLicenseItem_SoftwareVersion::cloneComputerrenamed toItem_SoftwareVersion::cloneItemTransfer::transferComputerSoftwaresrenamed toTransfer::transferItemSoftwares- 'getRealQueryForTreeItem()'
getCommonSelectandgetCommonLeftJoin()fromTicket,ChangeandProblemare replaced withgetCommonCriteria()compliant with db iteratorConfig::checkWriteAccessToDirs()Config::displayCheckExtensions()Toolbox::checkSELinux()Toolbox::userErrorHandlerDebug()Toolbox::userErrorHandlerNormal()Html::jsDisable()Html::jsEnable()Plugin::setLoaded()Plugin::setUnloaded()Plugin::setUnloadedByName()- Usage of
$LOADED_PLUGINSglobal variable CommonDBTM::getRawName()replaced byCommonDBTM::getFriendlyName()Calendar_Holiday::cloneCalendar()CalendarSegment::cloneCalendar()Computer_Item::cloneComputer()Computer_Item::cloneItem()ComputerAntivirus::cloneComputer()Contract::cloneItem()Contract_Item::cloneItem()ContractCost::cloneContract()Document_Item::cloneItem()Infocom::cloneItem()Item_Devices::cloneItem()Item_Disk::cloneItem()Item_OperatingSystem::cloneItem()Item_SoftwareLicense::cloneComputer()Item_SoftwareLicense::cloneItem()Item_SoftwareVersion::cloneComputer()Item_SoftwareVersion::cloneItem()Itil_Project::cloneItilProject()KnowbaseItem_Item::cloneItem()NetworkPort::cloneItem()Notepad::cloneItem()ProjectCost::cloneProject()ProjectTeam::cloneProjectTask()ProjectTask::cloneProjectTeam()- Usage of
GLPIKEYconstant Toolbox::encrypt()andToolbox::decrypt()because they use the old encryption algorithm
- Usage of string
$conditionparameter inCommonDBTM::find() - Usage of string
$conditionparameter inDropdown::addNewCondition() - Usage of string in
$option['condition']parameter inDropdown::show() KnowbaseItemCategory::showFirstLevel()Ticket::getTicketActors()NotificationTarget::getProfileJoinSql()NotificationTarget::getDistinctUserSql()NotificationTargetCommonITILObject::getProfileJoinSql()RuleCollection::getRuleListQuery()getNextItem()getPreviousItem()CommonDBChild::getSQLRequestToSearchForItem()CommonDBConnexity::getSQLRequestToSearchForItem()CommonDBRelation::getSQLRequestToSearchForItem()Project::addVisibility()Project::addVisibilityJoins()Plugin::hasBeenInit()- 'SELECT DISTINCT' and 'DISTINCT FIELDS' criteria in
DBmysqlIterator::buildQuery() CommonDBTM::getTablesOf()CommonDBTM::getForeignKeyFieldsOf()TicketFollowupgetDateRequestandDbUtils::getDateRequest()Html::convertTagFromRichTextToImageTag()Transfer::createSearchConditionUsingArray()- Unused constants GLPI_FONT_FREESANS and GLPI_SCRIPT_DIR
- For security reasons, autocompletion feature requires now to be authorized by a
'autocomplete' => trueflag in corresponding field search option.
The following methods have been deprecated:
Html::convertTagFromRichTextToImageTag()
The following methods have been deprecated:
CommonDBTM::getTablesOf()CommonDBTM::getForeignKeyFieldsOf()
- new display hook
timeline_actionsto add new buttons to timeline forms - Ability to copy document links while merging tickets
The following methods have been deprecated:
Plugin::hasBeenInit()- Deprecate 'SELECT DISTINCT' and 'DISTINCT FIELDS' criteria in
DBmysqlIterator::buildQuery()
- Drop
CommonITILObject::showSolutions().
- Ability to link project with problems and tickets.
- Ability to specify creation and modification dates during CommonDBTM object add method
- Add followups to Changes and Problems.
- Add timeline to Changes and Problems.
- CLI console to centralize CLI commands.
- Search on devices from Printers and Network equipments.
- Ability to merge and split tickets.
- Search on devices from Printers and Network equipments.
- Ability to specify creation and modification dates during CommonDBTM object add method.
license_idfield inglpi_items_operatingsystemstable has been renamed tolicenseidolas_tto_idfield inglpi_ticketstable has been renamed toolas_id_ttoolas_ttr_idfield inglpi_ticketstable has been renamed toolas_id_ttrttr_olalevels_idfield inglpi_ticketstable has been renamed toolalevels_id_ttrslas_tto_idfield inglpi_ticketstable has been renamed toslas_id_ttoslas_ttr_idfield inglpi_ticketstable has been renamed toslas_id_ttrttr_slalevels_idfield inglpi_ticketstable has been renamed toslalevels_id_ttrscripts/add_creation_date.phphas been replaced byglpi:migration:build_missing_timestampscommand available usingbin/consolescripts/checkdb.phphas been replaced byglpi:database:checkcommand available usingbin/consolescripts/cliinstall.phphas been replaced byglpi:database:installcommand available usingbin/consolescripts/cliupdate.phphas been replaced byglpi:database:updatecommand available usingbin/consolescripts/ldap_mass_sync.phphas been replaced byglpi:ldap:synchronize_userscommand available usingbin/consolescripts/innodb_migration.phphas been replaced byglpi:migration:myisam_to_innodbcommand available usingbin/consolescripts/unlock_tasks.phphas been replaced byglpi:task:unlockcommand available usingbin/console
- Plugins are now loaded in ajax files.
TicketFollowuphas been replaced byITILFollowup$numparameter has been removed from severalSearchclass methods:addSelect(),addOrderBy(),addHaving(),giveItem()
NotificationTarget::getMode()visibility is nowpublic.- Added
add_recipient_to_targethook, triggered when a recipient is added to a notification.
- Remove
$CFG_GLPI['use_rich_text']parameter. Will now betrueper default. - Remove
$CFG_GLPI['ticket_timeline']parameter. Will now betrueper default. - Remove
$CFG_GLPI['ticket_timeline_keep_replaced_tabs']parameter. Will now befalseper default. - Usage of
TicketFollowupclass has been deprecated. - Usage of string
$conditionparameter inCommonDBTM::find()has been deprecated. - Usage of string
$conditionparameter inDropdown::addNewCondition()has been deprecated. - Usage of string in
$option['condition']parameter inDropdown::show()has been deprecated.
The following methods have been deprecated:
KnowbaseItemCategory::showFirstLevel()Ticket::getTicketActors()Ticket::processMassiveActionsForOneItemtype()Ticket::showFormMassiveAction()Ticket::showMassiveActionsSubForm()NotificationTarget::getProfileJoinSql()NotificationTarget::getDistinctUserSql()NotificationTargetCommonITILObject::getProfileJoinSql()RuleCollection::getRuleListQuery()getNextItem()getPreviousItem()CommonDBChild::getSQLRequestToSearchForItem()CommonDBConnexity::getSQLRequestToSearchForItem()CommonDBRelation::getSQLRequestToSearchForItem()Project::addVisibility()Project::addVisibilityJoins()
-
Drop ability to use
JOINinDBmysqlIterator::buildQuery() -
Drop
NotificationTarget::datasproperty -
Drop support of string
$filterparameter inProfileuser::getUserProfiles() -
Drop support of string
$conditionparameter inUser::getFromDBbyEmail() -
Drop support of string
$conditionparameter inGroup_User::getUserGroups() -
Drop support of string
$conditionparameter inGroup_User::getGroupUsers() -
Drop support of string
$conditionparameter incountElementsInTable(DbUtils::countElementsInTable()) -
Drop support of string
$conditionparameter incountDistinctElementsInTable(DbUtils::countDistinctElementsInTable()) -
Drop support of string
$conditionparameter incountElementsInTableForMyEntities(DbUtils::countElementsInTableForMyEntities()) -
Drop support of string
$conditionparameter incountElementsInTableForEntity(DbUtils::countElementsInTableForEntity()) -
Drop support of string
$conditionparameter ingetAllDatasFromTable(DbUtils::getAllDataFromTable()) -
Drop ITIL Tasks, Followups and Solutions
showSummary()and massive actions related methods that are replaced with timeline -
Drop class alias
EventforGlpi\Event -
Drop
Zend\Loader\SplAutoloaderinterface -
Drop all methods that have been deprecated in GLPI 9.2
_e()_ex()FieldExists()formatOutputWebLink()TableExists()CommonTreeDropodwn::recursiveCleanSonsAboveID()DBMysql::optimize_tables()NotificationTarget::addToAddressesList()NotificationTarget::getAdditionalTargets()NotificationTarget::getAddressesByGroup()NotificationTarget::getAddressesByTarget()NotificationTarget::getAdminAddress()NotificationTarget::getEntityAdminAddress()NotificationTarget::getItemAuthorAddress()NotificationTarget::getItemGroupAddress()NotificationTarget::getItemGroupSupervisorAddress()NotificationTarget::getItemGroupTechInChargeAddress()NotificationTarget::getItemGroupWithoutSupervisorAddress()NotificationTarget::getItemOwnerAddress()NotificationTarget::getItemTechnicianInChargeAddress()NotificationTarget::getNotificationTargets()NotificationTarget::getSpecificTargets()NotificationTarget::getUserByField()NotificationTarget::getUsersAddressesByProfile()NotificationTargetCommonITILObject::getDatasForObject()NotificationTargetCommonITILObject::getFollowupAuthor()NotificationTargetCommonITILObject::getLinkedGroupByType()NotificationTargetCommonITILObject::getLinkedGroupSupervisorByType()NotificationTargetCommonITILObject::getLinkedGroupWithoutSupervisorByType()NotificationTargetCommonITILObject::getLinkedUserByType()NotificationTargetCommonITILObject::getOldAssignTechnicianAddress()NotificationTargetCommonITILObject::getRecipientAddress()NotificationTargetCommonITILObject::getSupplierAddress()NotificationTargetCommonITILObject::getTaskAssignGroup()NotificationTargetCommonITILObject::getTaskAssignUser()NotificationTargetCommonITILObject::getTaskAuthor()NotificationTargetCommonITILObject::getValidationApproverAddress()NotificationTargetCommonITILObject::getValidationRequesterAddress()NotificationTargetProjectTask::getTeamContacts()NotificationTargetProjectTask::getTeamGroups()NotificationTargetProjectTask::getTeamSuppliers()NotificationTargetProjectTask::getTeamUsers()QueuedNotification::sendMailById()Ticket::convertContentForNotification()User::getPersonalToken()User::getUniquePersonalToken()
-
Drop all methods that have been deprecated in GLPI 9.3.0
CommonDBTM::getFromDBByQuery()CommonDBTM::getSearchOptions()CommonDBTM::getSearchOptionsNew()CommonDBTM::getSearchOptionsToAddNew()CommonITILObject::getStatusIconURL()DBMysql::list_tables()Dropdown::showPrivatePublicSwitch()NotificationTargetProjectTask::getTeamContacts()NotificationTargetProjectTask::getTeamGroups()NotificationTargetProjectTask::getTeamSuppliers()NotificationTargetProjectTask::getTeamUsers()Search::constructDatas()Search::displayDatas()Transfer::transferComputerDisks()
-
Drop all methods that have been deprecated in GLPI 9.3.1
ComputerVirtualMachine::getUUIDRestrictRequest()Config::getSQLMode()DBMysql::checkForCrashedTables()Html::checkAllAsCheckbox()Html::scriptEnd()Html::scriptStart()Plugin::isAllPluginsCSRFCompliant()Profile::getUnderActiveProfileRestrictRequest()Toolbox::is_a()
-
Drop all constants that have been deprecated in GLPI 9.3.1
CommonDBTM::ERROR_FIELDSIZE_EXCEEDEDCommonDBTM::HAS_DUPLICATECommonDBTM::NOTHING_TO_DOCommonDBTM::SUCCESSCommonDBTM::TYPE_MISMATCH
-
Drop all methods that have been deprecated in GLPI 9.3.2
-
ITILSolution::removeForItem() -
Session::isViewAllEntities()
- Fix some cache issues
- Fix reservation tab of an item
- Fix actors notifications massive action
- Improve racks plugins migration script
No API changes.
Rule::executePluginsActions()signature has changed- Javascript function
formatResult()has been renamed totemplateResult()
The following methods have been deprecated:
CommonITILTask::displayTabContentForItem()CommonITILTask::showFormMassiveAction()CommonITILTask::showSummary()ITILSolution::displayTabContentForItem()ITILSolution::removeForItem()ITILSolution::showSummary()Session::isViewAllEntities()TicketFollowup::processMassiveActionsForOneItemtype()TicketFollowup::showFormMassiveAction()TicketFollowup::showMassiveActionsSubForm()TicketFollowup::showSummary()Plugin::removeFromSession()
- List receivers folders to choose imported/refused folders
- Usage of string
$conditionparameter inGroup_User::getUserGroups()has been deprecated - Usage of string
$conditionparameter inGroup_User::getGroupUsers()has been deprecated - Usage of string
$conditionparameter incountElementsInTable(DbUtils::countElementsInTable()) has been deprecated - Usage of string
$conditionparameter incountDistinctElementsInTable(DbUtils::countDistinctElementsInTable()) has been deprecated - Usage of string
$conditionparameter incountElementsInTableForMyEntities(DbUtils::countElementsInTableForMyEntities()) has been deprecated - Usage of string
$conditionparameter incountElementsInTableForEntity(DbUtils::countElementsInTableForEntity()) has been deprecated - Usage of string
$conditionparameter ingetAllDatasFromTable(DbUtils::getAllDataFromTable()) has been deprecated
The following methods have been deprecated:
Config::getSQLMode()DBMysql::checkForCrashedTables()Html::checkAllAsCheckbox()Html::scriptEnd()Html::scriptStart()Toolbox::is_a()ComputerVirtualMachine::getUUIDRestrictRequest()Plugin::isAllPluginsCSRFCompliant()Profile::getUnderActiveProfileRestrictRequest()
The following constants have been deprecated:
CommonDBTM::ERROR_FIELDSIZE_EXCEEDEDCommonDBTM::HAS_DUPLICATECommonDBTM::NOTHING_TO_DOCommonDBTM::SUCCESSCommonDBTM::TYPE_MISMATCH
- Add DCIM management
- Add OSM view to set locations and on Search
- Add login source selection
- Add logs purge
- Filter in items logs
- Switch MySQL engine from MyIsam to Innodb
- Rework solutions for Tickets, Problems and Changes to support history
- Disks can be attached to network equipments and printers
- Added
DB::insert(),DB::update()andDB::delete()to replace raw SQL queries CommonITILObject::showMassiveSolutionForm()now takes aCommonITILObjectas argumentProfileuser::getUserProfiles()$filterparameter is now an arrayUser::getFromDBbyEmail()$conditionparameter is now an array- Select2 javascript component has been upgraded to 4.0 version, see Migrating from Select2 3.5
CommonDevice::getItem_DeviceType()has a new optional$devicetypeparameter
- Usage of string
$filterparameter inProfileuser::getUserProfiles()has been deprecated - Usage of string
$conditionparameter inUser::getFromDBbyEmail()has been deprecated
The following methods have been deprecated:
CommonDBTM::getFromDBByQuery()CommonDBTM::getSearchOptions()CommonDBTM::getSearchOptionsNew()CommonDBTM::getSearchOptionsToAddNew()CommonITILObject::getStatusIconURL()DBMysql::list_tables()Dropdown::showPrivatePublicSwitch()NotificationTargetProject::getTeamContacts()NotificationTargetProject::getTeamGroups()NotificationTargetProject::getTeamSuppliers()NotificationTargetProject::getTeamUsers()Search::constructDatas()Search::displayDatas()Transfer::transferComputerDisks()
CommonITILValidation::isAllValidationsHaveSameStatusForTicketCommonITILValidation::getNumberValidationForTicket- PHPCas library is no longer provided (for licensing issues)
CommonITILValidation::isAllValidationsHaveSameStatusForTicketCommonITILValidation::getNumberValidationForTicketDBMysql::optimize_tables()
- Search engine, added
itemtype_item_revertjointype
Ticket::convertContentForNotification()
- Link knowledge base entries with assets or tickets
- Revisions on knowledge base entries and their translations, with diff view
- Add recursive comments on knowledge base entries
- Direct links to KB article's title for a direct access
- Load minified CSS and JS files (core and plugins) that are generated on release
- Link beetween software licenses
- Alerts on saved searches
- Add ajax browsers notifications in addition to emails
- Plugins can now add new notifications types (xmpp, sms, telegram, ...) to be used along with standard notifications
- Simcard component
- Synchronization field for LDAP
- Improved performances on large entities databases
- Remember me on login
- Fuzzy search
- Paste images in rich text editor
- Add tasks in tickets templates
- Composite tickets (link on sons/parents)
- Telemetry
- Certificates component
- Firmwares components (BIOSes, firwmwares, ...)
- Add OLA management
- Many bugs have been fixed
- Display knowledge base category items in tickets using a popup instead of a new whole window
- Reviewed all richtext editor (tinymce) and their upload parts, now more simpler and intuitive
- Don't ask user to select a template if there is no configured template
- personal_token is not used anymore for api authentication, a new api_token field has been added (empty by default, you should regenerate it)
- Operating systems management has been improved
- Direct language change from any page
- Better icons harmonization
CommonDBTM::getTable()signature has changedUser::getFromDBbyToken()signature has changedBookmarkhas been renamed toSavedSearch- Update to latest jsTree plugin
RuleDictionnarySoftwareCollection::versionExists()signature has changedNotificationTemplate::getDataToSend()signature has changedQueuedMailhas been renamed toQueuedNotificationCommonDBTM::mailqueueonactionhas been renamed toCommonDBTM::notificationqueueonactionNotificationTarget::getSender()no longer takes any parameters (was not used)TableExists()has been moved toDBMysql::tableExists()FieldExists()has been moved toDBMysql::fieldExists()Profile_User::getUserEntitiesForRight()signature has changedNotificationTargetpropertydatashas been renamed todata
- Ability to use
JOINinDBmysqlIterator::buildQuery()has been deprecated - Usage of
NotificationTarget::datasproperty has been deprecated - Usage of
Zend\Loader\SplAutoloaderinterface has been deprecated
The following methods have been deprecated:
_e()_ex()Bookmark::mark_default()Bookmark::unmark_default()CommonTreeDropodwn::recursiveCleanSonsAboveID()NotificationTarget::addToAddressesList()NotificationTarget::getAdditionalTargets()NotificationTarget::getAddressesByGroup()NotificationTarget::getAddressesByTarget()NotificationTarget::getAdminAddress()NotificationTarget::getEntityAdminAddress()NotificationTarget::getItemAuthorAddress()NotificationTarget::getItemGroupAddress()NotificationTarget::getItemGroupSupervisorAddress()NotificationTarget::getItemGroupTechInChargeAddress()NotificationTarget::getItemGroupWithoutSupervisorAddress()NotificationTarget::getItemOwnerAddress()NotificationTarget::getItemTechnicianInChargeAddress()NotificationTarget::getNotificationTargets()NotificationTarget::getSpecificTargets()NotificationTarget::getUserByField()NotificationTarget::getUsersAddressesByProfile()NotificationTargetCommonITILObject::getDatasForObject()NotificationTargetCommonITILObject::getFollowupAuthor()NotificationTargetCommonITILObject::getLinkedGroupByType()NotificationTargetCommonITILObject::getLinkedGroupSupervisorByType()NotificationTargetCommonITILObject::getLinkedGroupWithoutSupervisorByType()NotificationTargetCommonITILObject::getLinkedUserByType()NotificationTargetCommonITILObject::getOldAssignTechnicianAddress()NotificationTargetCommonITILObject::getRecipientAddress()NotificationTargetCommonITILObject::getSupplierAddress()NotificationTargetCommonITILObject::getTaskAssignGroup()NotificationTargetCommonITILObject::getTaskAssignUser()NotificationTargetCommonITILObject::getTaskAuthor()NotificationTargetCommonITILObject::getValidationApproverAddress()NotificationTargetCommonITILObject::getValidationRequesterAddress()NotificationTargetProjectTask::getTeamContacts()NotificationTargetProjectTask::getTeamGroups()NotificationTargetProjectTask::getTeamSuppliers()NotificationTargetProjectTask::getTeamUsers()QueuedNotification::sendMailById()User::getPersonalToken()User::getUniquePersonalToken()formatOutputWebLink()
The following methods have been dropped:
Ajax::displaySearchTextForDropdown()Ajax::getSearchTextForDropdown()Bookmark::changeBookmarkOrder()Bookmark::moveBookmark()CommonGLPI::addDivForTabs()CommonGLPI::showTabs()CommonGLPI::showNavigationHeaderOld()CommonGLPI::show()Dropdown::showInteger()DBMysql::field_flags()Html::showDateFormItem()Html::showDateTimeFormItem()Profile::dropdownNoneReadWrite()Toolbox::get_magic_quotes_runtime()Toolbox::get_magic_quotes_gpc()Dropdown::showAllItems()
For older entries, please check GLPI website.