GLPI: Fix QueuedNotification Bug For MySQL Sync

by Rajiv Sharma 48 views

Hey guys! It looks like we've got a bit of a snag with the QueuedNotification form when it comes to MySQL Sync notifications. Let's dive into what's going on and how we can tackle this. This article aims to break down the issue, understand the technical details, and explore potential solutions. So, buckle up and let's get started!

Understanding the Issue

The core problem lies in how the QueuedNotification form attempts to load related items from the database. When dealing with MySQL Sync notifications, the itemtype is identified as DBConnection. Now, here's the kicker: DBConnection doesn't have a corresponding database table. This mismatch causes a critical error when the system tries to fetch data that simply isn't there. Imagine trying to find a book in a library that isn't cataloged – you're bound to hit a wall!

Diving Deeper into the Technical Details

To truly grasp the problem, let's dissect the error message and the code involved. The error message, as seen in the log output, throws a LogicException with the message "Missing table name." This exception occurs specifically within the DBmysqlIterator.php file, on line 289. This file is a crucial part of GLPI's database interaction layer, responsible for building and executing database queries.

Here's a breakdown of the error's journey through the code:

  1. The QueuedNotification form initiates the process of loading related item data.
  2. It calls the getFromDB() method within the CommonDBTM class. This method is designed to fetch data from the database based on the item's ID.
  3. getFromDB() then utilizes the DBmysql->request() method to construct and execute the database query.
  4. The DBmysql->request() method relies on DBmysqlIterator to handle the query execution.
  5. Within DBmysqlIterator, the buildQuery() method attempts to build the SQL query. This is where the problem surfaces. Since DBConnection lacks a database table, buildQuery() cannot construct a valid query, leading to the "Missing table name" exception.

This detailed breakdown highlights that the issue isn't just a simple oversight; it's a fundamental mismatch between the system's expectations and the actual database structure for DBConnection items. To fix this, we need to address how the system handles notifications related to DBConnection items.

Why This Matters

This bug can significantly impact the functionality of GLPI, especially for users who heavily rely on MySQL Sync notifications. If the QueuedNotification form fails to load, users won't be able to effectively manage and track these notifications. This can lead to missed alerts, delayed actions, and overall disruption of IT management workflows. Ensuring the smooth operation of notification systems is crucial for maintaining system awareness and responsiveness.

Analyzing the Log Output

Let's break down the provided log output to understand the error in detail. The critical part of the log is this:

[2025-08-04 23:40:14] glpi.CRITICAL:   *** Uncaught PHP Exception LogicException: "Missing table name." at DBmysqlIterator.php line 289
  Backtrace :
  ./src/DBmysqlIterator.php:289                      
  ./src/DBmysqlIterator.php:122                      DBmysqlIterator->buildQuery()
  ./src/DBmysql.php:1050                             DBmysqlIterator->execute()
  ./src/CommonDBTM.php:343                           DBmysql->request()
  ./src/QueuedNotification.php:743                   CommonDBTM->getFromDB()
  ./src/CommonGLPI.php:671                           QueuedNotification->showForm()
  ./ajax/common.tabs.php:111                         CommonGLPI::displayStandardTab()
  ...Glpi/Controller/LegacyFileLoadController.php:63 require()
  ./vendor/symfony/http-kernel/HttpKernel.php:181    Glpi\Controller\LegacyFileLoadController->__invoke()
  ./vendor/symfony/http-kernel/HttpKernel.php:76     Symfony\Component\HttpKernel\Kernel->handleRaw()
  ./vendor/symfony/http-kernel/Kernel.php:197        Symfony\Component\HttpKernel\Kernel->handle()
  ./public/index.php:70                              Symfony\Component\HttpKernel\Kernel->handle()

Key takeaways from this log:

  • **`LogicException: