]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add objecttype filter to objects names endpoint
authorMarcin Haba <marcin.haba@bacula.pl>
Wed, 28 Jun 2023 14:45:12 +0000 (16:45 +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/ObjectNames.php
gui/baculum/protected/API/openapi_baculum.json

index f3b45a507d30e534a744daff9816bbae540ad38d..1b0146fb028d86eea4b860a9be30c5d2c757c5c0 100644 (file)
@@ -732,10 +732,11 @@ JOIN Job USING (JobId) '
        /**
         * Get existing object names.
         *
+        * @param array $criteria SQL criteria in nested array format (@see  Databaes::getWhere)
         * @param integer $limit_val maximum number of elements to return
         * @return array object names
         */
-       public function getObjectNames($limit_val = null) {
+       public function getObjectNames($criteria = [], $limit_val = null) {
                $limit = '';
                if(is_int($limit_val) && $limit_val > 0) {
                        $limit = sprintf(
@@ -743,10 +744,12 @@ JOIN Job USING (JobId) '
                                $limit_val
                        );
                }
+               $where = Database::getWhere($criteria);
                $sql = 'SELECT DISTINCT ObjectName as objectname
                        FROM Object
+                       ' . $where['where'] . ' 
                        ORDER BY ObjectName ' . $limit;
-               $statement = Database::runQuery($sql);
+               $statement = Database::runQuery($sql, $where['params']);
                $result = $statement->fetchAll(\PDO::FETCH_GROUP);
                $values = array_keys($result);
                return $values;
index eb81e20ca0c98a55b9d309b085dd5fc49a82f9a4..af95d2e96991c89fb5faa2fb59f7fc72d16c96ff 100644 (file)
@@ -33,9 +33,22 @@ use Baculum\Common\Modules\Errors\ObjectError;
 class ObjectNames extends BaculumAPIServer {
 
        public function get() {
+               $misc = $this->getModule('misc');
                $limit = $this->Request->contains('limit') ? (int)$this->Request['limit'] : null;
+               $objecttype = $this->Request->contains('objecttype') && $misc->isValidName($this->Request['objecttype']) ? $this->Request['objecttype'] : null;
 
-               $this->output = $this->getModule('object')->getObjectNames($limit);
+               $params = [];
+               if (!empty($objecttype)) {
+                       $params['Object.ObjectType'] = [];
+                       $params['Object.ObjectType'][] = [
+                               'vals' => $objecttype
+                       ];
+               }
+
+               $this->output = $this->getModule('object')->getObjectNames(
+                       $params,
+                       $limit
+               );
                $this->error = ObjectError::ERROR_NO_ERRORS;
        }
 }
index 6f5d05a89de0f0eb452b0462527fe58d04078a63..d3ed43572aad046691253e672c91146bd14650cb 100644 (file)
                                "parameters": [
                                        {
                                                "$ref": "#/components/parameters/Limit"
+                                       },
+                                       {
+                                               "name": "objecttype",
+                                               "in": "query",
+                                               "required": false,
+                                               "description": "Object type, ex. 'm365' or 'PostgreSQL'",
+                                               "schema": {
+                                                       "type": "string"
+                                               }
                                        }
                                ]
                        }