]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Improve using unique_objects parameter in object endpoint
authorMarcin Haba <marcin.haba@bacula.pl>
Mon, 5 Jun 2023 09:48:02 +0000 (11:48 +0200)
committerMarcin Haba <marcin.haba@bacula.pl>
Mon, 3 Jul 2023 08:46:57 +0000 (10:46 +0200)
gui/baculum/protected/API/Modules/ObjectManager.php
gui/baculum/protected/API/Pages/API/Objects.php

index 12e27bac3eb6780f7fddcf5f094f4526b4057783..b97f0b1e1dde7e7010aa489f5bd6ca642f02f4b2 100644 (file)
@@ -60,7 +60,6 @@ class ObjectManager extends APIModule
         */
        const OBJECT_RESULT_MODE_NORMAL = 'normal';
        const OBJECT_RESULT_MODE_OVERVIEW = 'overview';
-       const OBJECT_RESULT_MODE_OVERVIEW_UNIQUE = 'overview_unique';
 
        /**
         * Object result record view.
@@ -74,7 +73,8 @@ class ObjectManager extends APIModule
        /**
         * Get objects.
         *
-        * @param array $criteria criteria in nested array format (@see  Databaes::getWhere)
+        * @param array $criteria SQL criteria in nested array format (@see  Databaes::getWhere)
+        * @param array $opts object options
         * @param integer $limit_val maximum number of elements to return
         * @param integer $offset_val query offset number
         * @param string $sort_col column to sort
@@ -84,7 +84,7 @@ class ObjectManager extends APIModule
         * @param string $view job records view (basic, full)
         * @return array object list
         */
-       public function getObjects($criteria = array(), $limit_val = null, $offset_val = 0, $sort_col = 'ObjectId', $sort_order = 'DESC', $group_by = null, $group_limit = 0, $group_offset = 0, $view = self::OBJ_RESULT_VIEW_FULL, $mode = self::OBJECT_RESULT_MODE_NORMAL) {
+       public function getObjects($criteria = [], $opts = [], $limit_val = null, $offset_val = 0, $sort_col = 'ObjectId', $sort_order = 'DESC', $group_by = null, $group_limit = 0, $group_offset = 0, $view = self::OBJ_RESULT_VIEW_FULL, $mode = self::OBJECT_RESULT_MODE_NORMAL) {
                $db_params = $this->getModule('api_config')->getConfig('db');
                if ($db_params['type'] === Database::PGSQL_TYPE) {
                    $sort_col = strtolower($sort_col);
@@ -122,7 +122,7 @@ LEFT JOIN Client USING (ClientId) '
 . $where['where'] . $order . $limit . $offset;
                $statement = Database::runQuery($sql, $where['params']);
                $result = $statement->fetchAll(\PDO::FETCH_OBJ);
-               if ($mode == self::OBJECT_RESULT_MODE_OVERVIEW_UNIQUE) {
+               if (key_exists('unique_objects', $opts) && $opts['unique_objects']) {
                        Database::groupBy('objectname', $result, 1, 0, 'objecttype');
                        $func = function ($item) {
                                return ((object)$item[0]);
@@ -131,7 +131,7 @@ LEFT JOIN Client USING (ClientId) '
                        $result = array_map($func, $result);
                }
                $overview = Database::groupBy($group_by, $result, $group_limit, $group_offset, 'objecttype');
-               if ($mode == self::OBJECT_RESULT_MODE_OVERVIEW || $mode == self::OBJECT_RESULT_MODE_OVERVIEW_UNIQUE) {
+               if ($mode == self::OBJECT_RESULT_MODE_OVERVIEW) {
                        // Overview mode.
                        $result = [
                                'objects' => $result,
@@ -456,7 +456,7 @@ JOIN Job USING (JobId) '
                                'vals' => $objectid
                        ]]
                ];
-               $obj = $this->getObjects($params, 1);
+               $obj = $this->getObjects($params, [], 1);
                if (is_array($obj) && count($obj) > 0) {
                        $obj = array_shift($obj);
                }
index c236ab75e51cdf5afe226aec2bcd690ec3d80d1b..47a6e2da85a24ef90caaf84dd01065f55f394a05 100644 (file)
@@ -84,9 +84,9 @@ class Objects extends BaculumAPIServer {
                $order_direction = $this->Request->contains('order_direction') && $misc->isValidOrderDirection($this->Request['order_direction']) ? $this->Request['order_direction']: 'DESC';
                $mode = ($this->Request->contains('overview') && $misc->isValidBooleanTrue($this->Request['overview'])) ? ObjectManager::OBJECT_RESULT_MODE_OVERVIEW : ObjectManager::OBJECT_RESULT_MODE_NORMAL;
                $unique_objects = ($this->Request->contains('unique_objects') && $misc->isValidBooleanTrue($this->Request['unique_objects'])) ? true : false;
-               if ($mode === ObjectManager::OBJECT_RESULT_MODE_OVERVIEW && $unique_objects) {
-                       $mode = ObjectManager::OBJECT_RESULT_MODE_OVERVIEW_UNIQUE;
-               }
+               $opts = [
+                       'unique_objects' => $unique_objects
+               ];
 
                $or = new \ReflectionClass('Baculum\API\Modules\ObjectRecord');
                $prop_cols = $or->getProperties();
@@ -377,6 +377,7 @@ class Objects extends BaculumAPIServer {
 
                $objects = $this->getModule('object')->getObjects(
                        $params,
+                       $opts,
                        $limit,
                        $offset,
                        $order_by_lc,