From 99b460f78398a3cbe7da49c201afa20cdafc244f Mon Sep 17 00:00:00 2001 From: tremo Date: Thu, 2 Apr 2026 09:26:34 +0200 Subject: [PATCH 1/3] fix(model): getting models created on parent entites on child entites --- CHANGELOG.md | 1 + inc/model.class.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b6c08e0..4370626e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Fix crash when injection model has no mandatory fields defined +- Fix models created on parent entities can't be used on child entites ## [2.15.4] - 2026-03-16 diff --git a/inc/model.class.php b/inc/model.class.php index a92794b4..a26bcf97 100644 --- a/inc/model.class.php +++ b/inc/model.class.php @@ -398,7 +398,7 @@ public static function getModels($user_id, $order = "name", $entity = -1, $all = "glpi_plugin_datainjection_models", "entities_id", $entity, - false, + true, ) . ") OR (`is_private` = '" . self::MODEL_PRIVATE . "' AND `users_id` = '$user_id')) ORDER BY `is_private` DESC, From d2d6a78a56edda50bc7fffb3bd31dc258b316ca2 Mon Sep 17 00:00:00 2001 From: tremo Date: Thu, 2 Apr 2026 10:13:16 +0200 Subject: [PATCH 2/3] building the models query with an array to use the GLPI DB iterator --- inc/model.class.php | 49 +++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/inc/model.class.php b/inc/model.class.php index a26bcf97..89541039 100644 --- a/inc/model.class.php +++ b/inc/model.class.php @@ -382,29 +382,40 @@ public static function getModels($user_id, $order = "name", $entity = -1, $all = global $DB; $models = []; - $query = "SELECT `id`, `name`, `is_private`, `entities_id`, `is_recursive`, `itemtype`, - `step`, `comment` - FROM `glpi_plugin_datainjection_models` "; + $query = [ + 'SELECT' => ['id', 'name', 'is_private', 'entities_id', 'is_recursive', 'itemtype', 'step', 'comment'], + 'FROM' => 'glpi_plugin_datainjection_models', + ]; + + $where = []; if (!$all) { - $query .= " WHERE `step` = '" . self::READY_TO_USE_STEP . "' AND ("; - } else { - $query .= " WHERE ("; + $where['step'] = self::READY_TO_USE_STEP; } - $query .= "(`is_private` = '" . self::MODEL_PUBLIC . "'" . - getEntitiesRestrictRequest( - " AND", - "glpi_plugin_datainjection_models", - "entities_id", - $entity, - true, - ) . ") - OR (`is_private` = '" . self::MODEL_PRIVATE . "' AND `users_id` = '$user_id')) - ORDER BY `is_private` DESC, - `entities_id`, " . ($order == "`name`" ? "`name`" : $order); - - foreach ($DB->doQuery($query) as $data) { + $restrict = getEntitiesRestrictCriteria( + 'glpi_plugin_datainjection_models', + 'entities_id', + $entity, + true, + ); + + $where[] = [ + 'OR' => [ + [ + 'is_private' => self::MODEL_PUBLIC, + ] + $restrict, + [ + 'is_private' => self::MODEL_PRIVATE, + 'users_id' => $user_id, + ], + ], + ]; + + $query['WHERE'] = $where; + $query['ORDER'] = ['is_private DESC', 'entities_id', $order == "`name`" ? "name" : $order]; + + foreach ($DB->request($query) as $data) { if ( self::checkRightOnModel($data['id']) && class_exists($data['itemtype']) From 52d816e2489708d15805b6a3aad5e4e2a84430cb Mon Sep 17 00:00:00 2001 From: tremo Date: Thu, 2 Apr 2026 13:50:31 +0200 Subject: [PATCH 3/3] refactoring the db query --- inc/model.class.php | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/inc/model.class.php b/inc/model.class.php index 89541039..efc89ae1 100644 --- a/inc/model.class.php +++ b/inc/model.class.php @@ -383,11 +383,6 @@ public static function getModels($user_id, $order = "name", $entity = -1, $all = $models = []; - $query = [ - 'SELECT' => ['id', 'name', 'is_private', 'entities_id', 'is_recursive', 'itemtype', 'step', 'comment'], - 'FROM' => 'glpi_plugin_datainjection_models', - ]; - $where = []; if (!$all) { $where['step'] = self::READY_TO_USE_STEP; @@ -412,8 +407,25 @@ public static function getModels($user_id, $order = "name", $entity = -1, $all = ], ]; - $query['WHERE'] = $where; - $query['ORDER'] = ['is_private DESC', 'entities_id', $order == "`name`" ? "name" : $order]; + $query = [ + 'SELECT' => [ + 'id', + 'name', + 'is_private', + 'entities_id', + 'is_recursive', + 'itemtype', + 'step', + 'comment', + ], + 'FROM' => 'glpi_plugin_datainjection_models', + 'WHERE' => $where, + 'ORDER' => [ + 'is_private DESC', + 'entities_id', + $order == "`name`" ? "name" : $order, + ], + ]; foreach ($DB->request($query) as $data) { if (