GLPI 11.0.4 – Contract “Ticket” tab displays wrong ID (shows contract ID instead of ticket ID)
Code of Conduct
- [x] I agree to follow this project's Code of Conduct
Is there an existing issue for this?
- [x] I have searched the existing issues
Version
11.04
Bug description
When viewing a contract in GLPI 11.0.4, the “Cases” tab shows a list of related tickets. However, the ID column displays the wrong value:
Instead of showing the ticket ID (tickets.id),
It shows the contract ID (or the ID of the relation table glpi_tickets_contracts).
Despite this incorrect display, the relation is correctly stored in the database.
This results in misleading information on the contract view, making it appear as if the contract ID were the ticket ID.
Relevant log output
Page URL
No response
Steps To reproduce
Create or open an existing contract (example: Contract ID = 11).
Open any ticket (example: Ticket ID = 142).
In the ticket, go to the Contracts section and link the ticket to the contract.
Now return to the contract and open the Cases tab.
Expected Result
The table in Contract → Cases should list:
ID = the real ticket ID (e.g. 142)
The correct title, date, entity, etc.
Actual Result
The table shows:
ID = 11 (the contract ID),
Instead of ID = 142 (the ticket ID).
Title, dates, and other fields are correct, but the ID column is wrong.
This happens for every ticket associated with a contract.
Your GLPI setup information
GLPI information
GLPI: 11.0.4 ( => /var/www/glpi) Installation mode: TARBALL Current language: es_419 Source Integrity: 28 files changed A: public/css_compiled/backup_dawing_2025-12-04-164319/css_core_palettes.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_glpi.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_helpdesk_home.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_install.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_chartist.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_dashboard.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_kb.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_marketplace.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_reservations.min.css A: public/css_compiled/backup_dawing_2025-12-04-164319/css_standalone_stencil-editor.min.css M: public/css_compiled/css_core_palettes.min.css M: public/css_compiled/css_glpi.min.css M: public/css_compiled/css_install.min.css M: public/pics/favicon.ico M: public/pics/fd_logo.png M: public/pics/glpi.png M: public/pics/login_logo_glpi.png M: public/pics/logos/logo-G-100-black.png M: public/pics/logos/logo-G-100-grey.png M: public/pics/logos/logo-G-100-white.png M: public/pics/logos/logo-GLPI-100-black.png M: public/pics/logos/logo-GLPI-100-grey.png M: public/pics/logos/logo-GLPI-100-white.png M: public/pics/logos/logo-GLPI-250-black.png M: public/pics/logos/logo-GLPI-250-grey.png ...
Server
Operating system: Linux apps.dawing.com.co 6.12.0-124.8.1.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 22:54:28 UTC 2025 x86_64PHP: 8.4.15 fpm-fcgi
PHP extensions: Core, date, libxml, json, pcre, zlib, filter, hash, SPL, random, Reflection, session, standard, openssl, sockets, cgi-fcgi, bcmath, bz2, calendar, ctype, curl, dom, mbstring, fileinfo, ftp, gd, gettext, iconv, intl, ldap, exif, mysqlnd, PDO, Phar, posix, shmop, SimpleXML, soap, sodium, sqlite3, sysvmsg, sysvsem, sysvshm, tokenizer, xml, xmlwriter, xsl, mysqli, pdo_mysql, pdo_sqlite, xmlreader, zip, apcu, igbinary, msgpack, uuid, memcached, redis, Zend OPcache
Setup: disable_functions="" max_execution_time="600" max_input_vars="1000" memory_limit="512M" post_max_size="100M" session.cookie_secure="0" session.cookie_httponly="1" session.cookie_samesite="" session.save_handler="files" upload_max_filesize="100M"
Web server: Apache/2.4.63 (Rocky Linux) ()
User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0
Database:
Server Software: MariaDB Server
Server Version: 11.4.5-MariaDB
Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Parameters: [email protected]/db_glpi
Host info: db01.dawing.com.co via TCP/IP
Requirements: PHP version (8.4.15) is supported. OS and PHP are relying on 64 bits integers. Sessions configuration is OK. Allocated memory is sufficient. Following extensions are installed: dom, fileinfo, filter, libxml, simplexml, tokenizer, xmlreader, xmlwriter. mysqli extension is installed curl extension is installed gd extension is installed intl extension is installed mbstring extension is installed zlib extension is installed bcmath extension is installed The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present. openssl extension is installed Database engine version (11.4.5) is supported. The log file has been created successfully. Write access to /var/www/glpi/files/_cache has been validated. Write access to /var/www/glpi/files/_cron has been validated. Write access to /var/www/glpi/files has been validated. Write access to /var/www/glpi/files/_graphs has been validated. Write access to /var/www/glpi/files/_lock has been validated. Write access to /var/www/glpi/files/_pictures has been validated. Write access to /var/www/glpi/files/_plugins has been validated. Write access to /var/www/glpi/files/_rss has been validated. Write access to /var/www/glpi/files/_sessions has been validated. Write access to /var/www/glpi/files/_tmp has been validated. Write access to /var/www/glpi/files/_uploads has been validated. SELinux configuration is OK.
Sessions configuration is secured. exif extension is installed ldap extension is installed Following extensions are installed: bz2, Phar, zip. Zend OPcache extension is installed Following extensions are installed: ctype, iconv, sodium. Write access to /var/www/glpi/marketplace has been validated. Timezones seems loaded in database.
GLPI constants
GLPI_ROOT: "/var/www/glpi" GLPI_VERSION: "11.0.4" GLPI_SCHEMA_VERSION: "11.0.4@9065df1ff6b8ff1d77b519d1c4856507d18258b0" GLPI_FILES_VERSION: "11.0.4-1d4fbe9a" GLPI_MIN_PHP: "8.2" GLPI_MAX_PHP: "8.5" GLPI_YEAR: "2025" GLPI_I18N_DIR: "/var/www/glpi/locales" GLPI_ENVIRONMENT_TYPE: "production" GLPI_CONFIG_DIR: "/var/www/glpi/config" GLPI_VAR_DIR: "/var/www/glpi/files" GLPI_MARKETPLACE_DIR: "/var/www/glpi/marketplace" GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false GLPI_SERVERSIDE_URL_ALLOWLIST: ["~^\n (http|https|feed)://
# protocol\n (\n (?:\n
(?:xn--[a-z0-9-]++\.)+xn--[a-z0-9-]++ # a domain name using punycode\n
|\n (?:[\pL\pN\pS\pM\-\]++\.)+[\pL\pN\pM]++ # a multi-level domain name\n |\n [a-z0-9\-\]++
# a single-level domain name\n )\.?\n |
# or\n \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
# an IP address\n | # or\n \[\n
(?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::))))\n \] # an IPv6 address\n
)\n (?:/ (?:[\pL\pN\pS\pM\-._\~!$&'()+,;=:@]|%[0-9A-Fa-f]{2})* )* # a path\n
(?:\? (?:[\pL\pN\-._\~!$&'\\+,;=:@/?]|%[0-9A-Fa-f]{2}) )? # a query (optional)\n
$~ixuD"] GLPI_DISALLOWED_UPLOADS_PATTERN: "/\.(php\d*|phar)$/i" GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org" GLPI_INSTALL_MODE: "TARBALL" GLPI_NETWORK_MAIL: "[email protected]" GLPI_NETWORK_SERVICES: "https://services.glpi-network.com" GLPI_MARKETPLACE_ENABLE: 3 GLPI_MARKETPLACE_PRERELEASES: false GLPI_MARKETPLACE_ALLOW_OVERRIDE: true GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true GLPI_USER_AGENT_EXTRA_COMMENTS: "" GLPI_DOCUMENTATION_ROOT_URL: "https://links.glpi-project.org" GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1" GLPI_LOG_LVL: "warning" GLPI_SKIP_UPDATES: false GLPI_STRICT_ENV: false GLPI_AJAX_DASHBOARD: "1" GLPI_CALDAV_IMPORT_STATE: 0 GLPI_CENTRAL_WARNINGS: "1" GLPI_SYSTEM_CRON: false GLPI_TEXT_MAXSIZE: "4000" GLPI_WEBHOOK_ALLOW_RESPONSE_SAVING: "0" GLPI_WEBHOOK_CRA_MANDATORY: false GLPI_ALTCHA_MODE: "interactive" GLPI_ALTCHA_MAX_NUMBER: 50000 GLPI_ALTCHA_EXPIRATION_INTERVAL: "PT20M" GLPI_DOC_DIR: "/var/www/glpi/files" GLPI_CACHE_DIR: "/var/www/glpi/files/_cache" GLPI_CRON_DIR: "/var/www/glpi/files/_cron" GLPI_GRAPH_DIR: "/var/www/glpi/files/_graphs" GLPI_LOCAL_I18N_DIR: "/var/www/glpi/files/_locales" GLPI_LOCK_DIR: "/var/www/glpi/files/_lock" GLPI_LOG_DIR: "/var/www/glpi/files/_log" GLPI_PICTURE_DIR: "/var/www/glpi/files/_pictures" GLPI_PLUGIN_DOC_DIR: "/var/www/glpi/files/_plugins" GLPI_RSS_DIR: "/var/www/glpi/files/_rss" GLPI_SESSION_DIR: "/var/www/glpi/files/_sessions" GLPI_TMP_DIR: "/var/www/glpi/files/_tmp" GLPI_UPLOAD_DIR: "/var/www/glpi/files/_uploads" GLPI_INVENTORY_DIR: "/var/www/glpi/files/_inventories" GLPI_THEMES_DIR: "/var/www/glpi/files/_themes" GLPI_PLUGINS_DIRECTORIES: ["/var/www/glpi/marketplace","/var/www/glpi/plugins"] GLPI_NETWORK_API_URL: "https://services.glpi-network.com/api" GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/" GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
SQL replicas
Not active
Notifications
Way of sending emails: SMTP+OAUTH(smtp://soporte%40dawing.com.co:********@smtp.office365.com:587)
Name: 'Soporte Dawing'
Active: Yes
Server: '{outlook.office365.com/imap-oauth-1/ssl/validate-cert/tls/secure}INBOX'
Login: '[email protected]'
Password: YesPlugins list
advancedforms Name: advancedforms Version: 1.0.0 State: Activado
Install Method: Marketplace escalade Name: Escalation Version: 2.10.0 State: Activado
Install Method: Marketplace gantt Name: gantt Version: 1.2.0 State: Activado
Install Method: Marketplace glpiinventory Name: GLPI Inventory Version: 1.6.3 State: Activado
Install Method: Marketplace oauthimap Name: OAuth IMAP Version: 1.5.0 State: Activado
Install Method: Marketplace pdf Name: PDF Version: 4.1.1 State: Activado
Install Method: Marketplace useditemsexport Name: Used items export Version: 2.6.0 State: Activado
Install Method: Marketplace
Anything else?
No response
I confirm the issue.
There is also a Twig error when in debug mode:
Impossible to access a key ("content") on a int variable ("3") in "components/datatable.html.twig" at line 297.
In ./templates/components/datatable.html.twig(297)
Thanks for confirming the issue and adding it to the 11.0.5 milestone.
While reviewing the behavior from the browser side (Inspect → DOM), I noticed one additional detail that may help with the fix:
The backend is correctly loading the related tickets_id (verified through the database). However, in the Contracts → Tickets tab, the rendered ID in the datatable corresponds to the contracts_id (or the row index), not the tickets_id. The wrong value is already present in the
Just sharing this in case it's useful while working on the correction.