glpi icon indicating copy to clipboard operation
glpi copied to clipboard

GLPI 11.0.4 – Contract “Ticket” tab displays wrong ID (shows contract ID instead of ticket ID)

Open cdbaq opened this issue 2 months ago • 2 comments

Image Image

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.

Image Image

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_64

PHP: 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: Yes
Plugins 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

cdbaq avatar Dec 04 '25 22:12 cdbaq

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)

trasher avatar Dec 05 '25 13:12 trasher

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

element before any JavaScript processing, which suggests that the mismatch happens during Twig rendering or datatable column mapping.

Just sharing this in case it's useful while working on the correction.

cdbaq avatar Dec 05 '25 14:12 cdbaq