]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add name and sort parameters to filesets filter
authorMarcin Haba <marcin.haba@bacula.pl>
Thu, 28 Mar 2024 11:51:50 +0000 (12:51 +0100)
committerMarcin Haba <marcin.haba@bacula.pl>
Thu, 28 Mar 2024 12:02:39 +0000 (13:02 +0100)
gui/baculum/protected/API/Modules/FileSetManager.php
gui/baculum/protected/API/Pages/API/FileSets.php

index 98884ec02d68169b1e438c89076b1db2c8367074..628518a3b1564c59fc88dece847efd7386f7bd1a 100644 (file)
@@ -33,7 +33,11 @@ use PDO;
  */
 class FileSetManager extends APIModule {
 
-       public function getFileSets($criteria, $limit_val = 0, $offset_val = 0, $unique_vals = false) {
+       public function getFileSets($criteria, $limit_val = 0, $offset_val = 0, $sort = [['FileSet', 'ASC']], $unique_vals = false) {
+               $order = '';
+               if (count($sort) == 1) {
+                       $order = Database::getOrder($sort);
+               }
                $limit = '';
                if (is_int($limit_val) && $limit_val > 0) {
                        $limit = ' LIMIT ' . $limit_val;
@@ -63,7 +67,7 @@ WHERE fs.pos=1 '
                } else {
                        $sql = 'SELECT FileSet.* 
 FROM FileSet '
- . $where['where'] . $limit . $offset;
+ . $where['where'] . $order . $limit . $offset;
                }
 
                $statement = Database::runQuery($sql, $where['params']);
index a53c4399ac87f0684abecc0642a588d1050a2810..813fa2f25dd9186e08563a59ee4ec7d41861bd64 100644 (file)
@@ -34,17 +34,27 @@ class FileSets extends BaculumAPIServer {
 
        public function get() {
                $misc = $this->getModule('misc');
+               $fileset = $this->Request->contains('name') && $misc->isValidName($this->Request['name']) ? $this->Request['name'] : '';
                $content = $this->Request->contains('content') && $misc->isValidNameList($this->Request['content']) ? $this->Request['content'] : '';
                $limit = $this->Request->contains('limit') && $misc->isValidInteger($this->Request['limit']) ? (int)$this->Request['limit'] : 0;
                $offset = $this->Request->contains('offset') && $misc->isValidInteger($this->Request['offset']) ? (int)$this->Request['offset'] : 0;
+               $order_by = $this->Request->contains('order_by') && $misc->isValidColumn($this->Request['order_by']) ? $this->Request['order_by']: null;
+               $order_direction = $this->Request->contains('order_direction') && $misc->isValidOrderDirection($this->Request['order_direction']) ? $this->Request['order_direction']: null;
                $unique_filesets = $this->Request->contains('unique_filesets') && $misc->isValidBooleanTrue($this->Request['unique_filesets']) ? true : false;
                $result = $this->getModule('bconsole')->bconsoleCommand(
                        $this->director,
-                       ['.fileset']
+                       ['.fileset'],
+                       null,
+                       true
                );
                if ($result->exitcode === 0) {
-                       array_shift($result->output);
-                       $vals = array_filter($result->output);
+                       $vals = [];
+                       if (!empty($fileset)) {
+                               $vals = [$fileset];
+                       } else {
+                               $vals = array_filter($result->output);
+                       }
+
                        if (count($vals) == 0) {
                                // no $vals criteria means that user has no fileset resource assigned.
                                $this->output = [];
@@ -58,6 +68,26 @@ class FileSets extends BaculumAPIServer {
                                'vals' => $vals
                        ];
 
+                       $sort = [];
+                       if (!is_null($order_by)) {
+                               if (is_null($order_direction)) {
+                                       $order_direction = 'ASC';
+                               }
+                               $cr = new \ReflectionClass('Baculum\API\Modules\FileSetRecord');
+                               $sort_cols = $cr->getProperties();
+                               $order_by_lc = strtolower($order_by);
+                               $columns = [];
+                               foreach ($sort_cols as $cols) {
+                                       $columns[] = $cols->getName();
+                               }
+                               if (!in_array($order_by_lc, $columns)) {
+                                       $this->output = FileSetError::MSG_ERROR_INVALID_PROPERTY;
+                                       $this->error = FileSetError::ERROR_INVALID_PROPERTY;
+                                       return;
+                               }
+                               $sort = [[$order_by_lc, $order_direction]];
+                       }
+
                        if (!empty($content)) {
                                $cnts = explode(',', $content);
                                $cb = function ($item) {
@@ -74,6 +104,7 @@ class FileSets extends BaculumAPIServer {
                                $params,
                                $limit,
                                $offset,
+                               $sort,
                                $unique_filesets
                        );
                        $this->output = $filesets;