-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Description
Code of Conduct
- I agree to follow this project's Code of Conduct
Is there an existing issue for this?
- I have searched the existing issues
GLPI Version
11.0.4
Plugin version
1.23.2
Bug description
Adding a dropdown field of type User leads to a rendering bug after the first safe. Problem is that value is a """" which gets json_decoded in line 1282 in fields.class.php into "" . But the dropdown rendering requires a array.
Adding
if ($field['multiple'] && !is_array($value)) {
// Value may be set:
// - either from a default value in DB (it will be a JSON string),
// - either from a previous input (it will be an array).
//
// -> Decode it only if it is not already an array.
$value = json_decode((string) $value);
// next lines are added
if ($value === '' && $field['default_value'] !== ''){
$value = json_decode((string) $field['default_value']);
}
}However, I'm unsure if this is the right place to fix or if the fix should be when saving in the DB.
Relevant log output
[2026-01-28 08:32:46] glpi.WARNING: *** Warning: foreach() argument must be of type array|object, string given at User.php line 4322
Backtrace :
./src/User.php:4322
...ication/View/Extension/ItemtypeExtension.php:99 User::dropdown()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2151 Glpi\Application\View\Extension\ItemtypeExtension->getItemtypeDropdown()
.../twig/twig/src/Extension/CoreExtension.php:2110 __TwigTemplate_534115b72f7af60d98f579846620a899->{closure}()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2148 Twig\Extension\CoreExtension::captureOutput()
.../twig/twig/src/Extension/CoreExtension.php:2110 __TwigTemplate_534115b72f7af60d98f579846620a899->{closure}()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2088 Twig\Extension\CoreExtension::captureOutput()
...tes/19/198fdeb1cfbeab86c99611ed31f2e5a0.php:320 __TwigTemplate_534115b72f7af60d98f579846620a899->macro_dropdownField()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_085e46df890ee3d7994796efb90b2fc1->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../Glpi/Application/View/TemplateRenderer.php:170 Twig\TemplateWrapper->render()
./plugins/fields/inc/field.class.php:1287 Glpi\Application\View\TemplateRenderer->render()
./plugins/fields/inc/field.class.php:893 PluginFieldsField::prepareHtmlFields()
./plugins/fields/inc/field.class.php:993 PluginFieldsField::showDomContainer()
./src/Plugin.php:1820 PluginFieldsField::showForTab()
...plication/View/Extension/PluginExtension.php:74 Plugin::doHook()
...ates/35/353a01b8da7f197e65f5961d189994f0.php:61 Glpi\Application\View\Extension\PluginExtension->callPluginHook()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_d3ab1baba93d9d491e32993e5cc10dcf->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../twig/twig/src/Extension/CoreExtension.php:1520 Twig\TemplateWrapper->render()
...tes/8f/8f4b377bc136a9dcfbd1c7dc0f04038b.php:153 Twig\Extension\CoreExtension::include()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_31b19364c29f7ba72f426f70f74206ee->doDisplay()
...ates/e7/e7ce6492a8168574be228272d1666526.php:52 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_7c059720945e5036507b1c5b4afaa8c2->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/TemplateWrapper.php:61 Twig\Template->display()
.../Glpi/Application/View/TemplateRenderer.php:188 Twig\TemplateWrapper->display()
./src/Contract.php:173 Glpi\Application\View\TemplateRenderer->display()
./src/CommonGLPI.php:683 Contract->showForm()
./ajax/common.tabs.php:108 CommonGLPI::displayStandardTab()
...Glpi/Controller/LegacyFileLoadController.php:64 require()
./vendor/symfony/http-kernel/HttpKernel.php:181 Glpi\Controller\LegacyFileLoadController->__invoke()
./vendor/symfony/http-kernel/HttpKernel.php:76 Symfony\Component\HttpKernel\HttpKernel->handleRaw()
./vendor/symfony/http-kernel/Kernel.php:197 Symfony\Component\HttpKernel\HttpKernel->handle()
./public/index.php:70 Symfony\Component\HttpKernel\Kernel->handle()
[2026-01-28 08:32:46] glpi.CRITICAL: *** Uncaught PHP Exception Twig\Error\RuntimeError: "An exception has been thrown during the rendering of a template ("array_combine(): Argument #1 ($keys) must be of type array, string given") in "@fields/fields.html.twig" at line 142." at fields.html.twig line 142
Backtrace :
./plugins/fields/templates/fields.html.twig:142
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../Glpi/Application/View/TemplateRenderer.php:170 Twig\TemplateWrapper->render()
./plugins/fields/inc/field.class.php:1287 Glpi\Application\View\TemplateRenderer->render()
./plugins/fields/inc/field.class.php:893 PluginFieldsField::prepareHtmlFields()
./plugins/fields/inc/field.class.php:993 PluginFieldsField::showDomContainer()
./src/Plugin.php:1820 PluginFieldsField::showForTab()
...plication/View/Extension/PluginExtension.php:74 Plugin::doHook()
...ates/35/353a01b8da7f197e65f5961d189994f0.php:61 Glpi\Application\View\Extension\PluginExtension->callPluginHook()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_d3ab1baba93d9d491e32993e5cc10dcf->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../twig/twig/src/Extension/CoreExtension.php:1520 Twig\TemplateWrapper->render()
...tes/8f/8f4b377bc136a9dcfbd1c7dc0f04038b.php:153 Twig\Extension\CoreExtension::include()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_31b19364c29f7ba72f426f70f74206ee->doDisplay()
...ates/e7/e7ce6492a8168574be228272d1666526.php:52 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_7c059720945e5036507b1c5b4afaa8c2->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/TemplateWrapper.php:61 Twig\Template->display()
.../Glpi/Application/View/TemplateRenderer.php:188 Twig\TemplateWrapper->display()
./src/Contract.php:173 Glpi\Application\View\TemplateRenderer->display()
./src/CommonGLPI.php:683 Contract->showForm()
./ajax/common.tabs.php:108 CommonGLPI::displayStandardTab()
...Glpi/Controller/LegacyFileLoadController.php:64 require()
./vendor/symfony/http-kernel/HttpKernel.php:181 Glpi\Controller\LegacyFileLoadController->__invoke()
./vendor/symfony/http-kernel/HttpKernel.php:76 Symfony\Component\HttpKernel\HttpKernel->handleRaw()
./vendor/symfony/http-kernel/Kernel.php:197 Symfony\Component\HttpKernel\HttpKernel->handle()
./public/index.php:70 Symfony\Component\HttpKernel\Kernel->handle()
Previous: array_combine(): Argument #1 ($keys) must be of type array, string given
./src/Html.php:4590
./src/Html.php:4590 array_combine()
./src/User.php:4379 Html::jsAjaxDropdown()
...ication/View/Extension/ItemtypeExtension.php:99 User::dropdown()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2151 Glpi\Application\View\Extension\ItemtypeExtension->getItemtypeDropdown()
.../twig/twig/src/Extension/CoreExtension.php:2110 __TwigTemplate_534115b72f7af60d98f579846620a899->{closure}()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2148 Twig\Extension\CoreExtension::captureOutput()
.../twig/twig/src/Extension/CoreExtension.php:2110 __TwigTemplate_534115b72f7af60d98f579846620a899->{closure}()
...es/2a/2ac79fe58a63fdcaa029675a4efa656f.php:2088 Twig\Extension\CoreExtension::captureOutput()
...tes/19/198fdeb1cfbeab86c99611ed31f2e5a0.php:320 __TwigTemplate_534115b72f7af60d98f579846620a899->macro_dropdownField()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_085e46df890ee3d7994796efb90b2fc1->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../Glpi/Application/View/TemplateRenderer.php:170 Twig\TemplateWrapper->render()
./plugins/fields/inc/field.class.php:1287 Glpi\Application\View\TemplateRenderer->render()
./plugins/fields/inc/field.class.php:893 PluginFieldsField::prepareHtmlFields()
./plugins/fields/inc/field.class.php:993 PluginFieldsField::showDomContainer()
./src/Plugin.php:1820 PluginFieldsField::showForTab()
...plication/View/Extension/PluginExtension.php:74 Plugin::doHook()
...ates/35/353a01b8da7f197e65f5961d189994f0.php:61 Glpi\Application\View\Extension\PluginExtension->callPluginHook()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_d3ab1baba93d9d491e32993e5cc10dcf->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:373 Twig\Template->display()
./vendor/twig/twig/src/TemplateWrapper.php:51 Twig\Template->render()
.../twig/twig/src/Extension/CoreExtension.php:1520 Twig\TemplateWrapper->render()
...tes/8f/8f4b377bc136a9dcfbd1c7dc0f04038b.php:153 Twig\Extension\CoreExtension::include()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_31b19364c29f7ba72f426f70f74206ee->doDisplay()
...ates/e7/e7ce6492a8168574be228272d1666526.php:52 Twig\Template->yield()
./vendor/twig/twig/src/Template.php:402 __TwigTemplate_7c059720945e5036507b1c5b4afaa8c2->doDisplay()
./vendor/twig/twig/src/Template.php:358 Twig\Template->yield()
./vendor/twig/twig/src/TemplateWrapper.php:61 Twig\Template->display()
.../Glpi/Application/View/TemplateRenderer.php:188 Twig\TemplateWrapper->display()
./src/Contract.php:173 Glpi\Application\View\TemplateRenderer->display()
./src/CommonGLPI.php:683 Contract->showForm()
./ajax/common.tabs.php:108 CommonGLPI::displayStandardTab()
...Glpi/Controller/LegacyFileLoadController.php:64 require()
./vendor/symfony/http-kernel/HttpKernel.php:181 Glpi\Controller\LegacyFileLoadController->__invoke()
./vendor/symfony/http-kernel/HttpKernel.php:76 Symfony\Component\HttpKernel\HttpKernel->handleRaw()
./vendor/symfony/http-kernel/Kernel.php:197 Symfony\Component\HttpKernel\HttpKernel->handle()
./public/index.php:70 Symfony\Component\HttpKernel\Kernel->handle()Steps To reproduce
- Add a user drop down field to i.e contracts
- go to a contract
- change something and save
- reload and observe the bug
maxime-ole
Metadata
Metadata
Assignees
Labels
No labels