diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f42bf7..1a14412 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fix image (field : description) in to pdf - Fix massive action PDF export redirecting to item list instead of generating the PDF +- Fix PDF export for assignable asset groups by properly handling multiple groups ## [4.1.2] - 2026-01-08 diff --git a/inc/common.class.php b/inc/common.class.php index a883614..532e4a2 100644 --- a/inc/common.class.php +++ b/inc/common.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + abstract class PluginPdfCommon extends CommonGLPI { protected $obj = null; @@ -505,14 +507,31 @@ public static function mainLine(PluginPdfSimplePDF $pdf, $item, $field) ), ); case 'group-model': + $group_tech = Dropdown::getDropdownName( + 'glpi_groups', + $item->fields['groups_id_tech'], + ); + if (Toolbox::hasTrait($item::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($item::class, (int) $item->fields['id']); + $group_ids = []; + foreach ($groups as $group) { + if ((int) $group->fields['type'] === Group_Item::GROUP_TYPE_TECH) { + $group_ids[] = (int) $group->fields['groups_id']; + } + } + $group_names = array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + )); + $group_tech = implode(', ', $group_names); + } + return $pdf->displayLine( '' . sprintf( __s('%1$s: %2$s'), __s('Group in charge of the hardware') . '', - Dropdown::getDropdownName( - 'glpi_groups', - $item->fields['groups_id_tech'], - ), + $group_tech, ), '' . sprintf( __s('%1$s: %2$s'), diff --git a/inc/computer.class.php b/inc/computer.class.php index c8851cf..fb614ad 100644 --- a/inc/computer.class.php +++ b/inc/computer.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfComputer extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -85,16 +87,52 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Computer $computer) ), ); + $group = Dropdown::getDropdownName('glpi_groups', $computer->fields['groups_id']); + $group_tech = Dropdown::getDropdownName('glpi_groups', $computer->fields['groups_id_tech']); + if (Toolbox::hasTrait($computer::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($computer::class, (int) $computer->fields['id']); + + $group_ids = []; + $group_tech_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_TECH) { + $group_tech_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + $group_tech = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_tech_ids, + ))); + } + $pdf->displayLine( '' . sprintf( __('%1$s: %2$s'), __('Group') . '', - Dropdown::getDropdownName( - 'glpi_groups', - $computer->fields['groups_id'], - ), + $group, + ), + '' . sprintf( + __('%1$s: %2$s'), + __('Group in charge of the hardware') . '', + $group_tech, + ), + ); + + $pdf->displayLine( + '' . sprintf( + __('%1$s: %2$s'), + __('UUID') . '', + $computer->fields['uuid'], ), - '' . sprintf(__('%1$s: %2$s'), __('UUID') . '', $computer->fields['uuid']), ); $pdf->displayLine( diff --git a/inc/monitor.class.php b/inc/monitor.class.php index 5d7ccc7..ca94ee1 100644 --- a/inc/monitor.class.php +++ b/inc/monitor.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfMonitor extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -60,12 +62,26 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Monitor $item) PluginPdfCommon::mainLine($pdf, $item, 'contact-otherserial'); PluginPdfCommon::mainLine($pdf, $item, 'user-management'); + $group = Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']); + if (Toolbox::hasTrait($item::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($item::class, (int) $item->fields['id']); + + $group_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + } + $pdf->displayLine( - '' . sprintf( - __s('%1$s: %2$s'), - __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']), - ), + '' . sprintf(__s('%1$s: %2$s'), __s('Group') . '', $group), '' . sprintf( __s('%1$s: %2$s'), __s('Size') . '', diff --git a/inc/networkequipment.class.php b/inc/networkequipment.class.php index cbd1155..c632b30 100644 --- a/inc/networkequipment.class.php +++ b/inc/networkequipment.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfNetworkEquipment extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -82,12 +84,26 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, NetworkEquipment $item) ), ); + $group = Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']); + if (Toolbox::hasTrait($item::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($item::class, (int) $item->fields['id']); + + $group_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + } + $pdf->displayLine( - '' . sprintf( - __s('%1$s: %2$s'), - __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']), - ), + '' . sprintf(__s('%1$s: %2$s'), __s('Group') . '', $group), '' . __s('The MAC address and the IP of the equipment are included in an aggregated network port'), '' . sprintf( __s('%1$s: %2$s'), diff --git a/inc/peripheral.class.php b/inc/peripheral.class.php index 9f38312..d12004d 100644 --- a/inc/peripheral.class.php +++ b/inc/peripheral.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfPeripheral extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -62,12 +64,26 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Peripheral $item) PluginPdfCommon::mainLine($pdf, $item, 'contact-otherserial'); PluginPdfCommon::mainLine($pdf, $item, 'user-management'); + $group = Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']); + if (Toolbox::hasTrait($item::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($item::class, (int) $item->fields['id']); + + $group_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + } + $pdf->displayLine( - '' . sprintf( - __s('%1$s: %2$s'), - __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']), - ), + '' . sprintf(__s('%1$s: %2$s'), __s('Group') . '', $group), '' . sprintf(__s('%1$s: %2$s'), __s('Brand') . '', $item->fields['brand']), ); diff --git a/inc/phone.class.php b/inc/phone.class.php index e35cf92..c7e61cc 100644 --- a/inc/phone.class.php +++ b/inc/phone.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfPhone extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -63,17 +65,27 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Phone $item) PluginPdfCommon::mainLine($pdf, $item, 'user-management'); + $group = Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']); + if (Toolbox::hasTrait($item::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($item::class, (int) $item->fields['id']); + + $group_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + } + $pdf->displayLine( - '' . sprintf( - __s('%1$s: %2$s'), - __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $item->fields['groups_id']), - ), - '' . sprintf( - __s('%1$s: %2$s'), - __s('UUID') . '', - $item->fields['uuid'], - ), + '' . sprintf(__s('%1$s: %2$s'), __s('Group') . '', $group), + '' . sprintf(__s('%1$s: %2$s'), __s('UUID') . '', $item->fields['uuid']), ); $pdf->displayLine( diff --git a/inc/printer.class.php b/inc/printer.class.php index d493fc0..5523900 100644 --- a/inc/printer.class.php +++ b/inc/printer.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfPrinter extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -95,17 +97,27 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Printer $printer) ), ); + $group = Dropdown::getDropdownName('glpi_groups', $printer->fields['groups_id']); + if (Toolbox::hasTrait($printer::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($printer::class, (int) $printer->fields['id']); + + $group_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + } + $pdf->displayLine( - '' . sprintf( - __s('%1$s: %2$s'), - __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $printer->fields['groups_id']), - ), - '' . sprintf( - __s('%1$s: %2$s'), - __s('UUID') . '', - $printer->fields['uuid'], - ), + '' . sprintf(__s('%1$s: %2$s'), __s('Group') . '', $group), + '' . sprintf(__s('%1$s: %2$s'), __s('UUID') . '', $printer->fields['uuid']), ); diff --git a/inc/software.class.php b/inc/software.class.php index 21a3526..0be4cf8 100644 --- a/inc/software.class.php +++ b/inc/software.class.php @@ -30,6 +30,8 @@ * -------------------------------------------------------------------------- */ +use Glpi\Features\AssignableItem; + class PluginPdfSoftware extends PluginPdfCommon { public static $rightname = 'plugin_pdf'; @@ -89,14 +91,38 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Software $software) ), ); + $group = Dropdown::getDropdownName('glpi_groups', $software->fields['groups_id']); + $group_tech = Dropdown::getDropdownName('glpi_groups', $software->fields['groups_id_tech']); + if (Toolbox::hasTrait($software::class, AssignableItem::class)) { + $group_item = new Group_Item(); + $groups = $group_item->getItemsAssociatedTo($software::class, (int) $software->fields['id']); + + $group_ids = []; + $group_tech_ids = []; + foreach ($groups as $group_item_link) { + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_NORMAL) { + $group_ids[] = (int) $group_item_link->fields['groups_id']; + } + if ((int) $group_item_link->fields['type'] === Group_Item::GROUP_TYPE_TECH) { + $group_tech_ids[] = (int) $group_item_link->fields['groups_id']; + } + } + + $group = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_ids, + ))); + $group_tech = implode(', ', array_filter(array_map( + static fn($group_id) => Toolbox::stripTags(Dropdown::getDropdownName('glpi_groups', $group_id)), + $group_tech_ids, + ))); + } + $pdf->displayLine( '' . sprintf( __s('%1$s: %2$s'), __s('Group in charge of the hardware') . '', - Dropdown::getDropdownName( - 'glpi_groups', - $software->fields['groups_id_tech'], - ), + $group_tech, ), '' . sprintf( __s('%1$s: %2$s'), @@ -109,7 +135,7 @@ public static function pdfMain(PluginPdfSimplePDF $pdf, Software $software) '' . sprintf( __s('%1$s: %2$s'), __s('Group') . '', - Dropdown::getDropdownName('glpi_groups', $software->fields['groups_id']), + $group, ), );