mirror of
https://codeberg.org/icewind/SearchDAV.git
synced 2026-08-02 20:24:49 +02:00
Seperate query classes from xml classes to allow specifying more information in the query
This commit is contained in:
parent
82bcf2cebb
commit
5ad4d24b89
17 changed files with 509 additions and 112 deletions
40
src/Query/Limit.php
Normal file
40
src/Query/Limit.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
|
||||
class Limit {
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* The maximum number of results to be returned
|
||||
*
|
||||
* If set to 0 then no limit should be imposed
|
||||
*/
|
||||
public $maxResults = 0;
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* The index of the first result to be returned (offset)
|
||||
*/
|
||||
public $firstResult = 0;
|
||||
}
|
||||
41
src/Query/Literal.php
Normal file
41
src/Query/Literal.php
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
|
||||
class Literal {
|
||||
/**
|
||||
* @var string|boolean|\DateTime|integer
|
||||
*
|
||||
* The value of the literal
|
||||
*/
|
||||
public $value;
|
||||
|
||||
/**
|
||||
* Literal constructor.
|
||||
*
|
||||
* @param bool|\DateTime|int|string $value
|
||||
*/
|
||||
public function __construct($value = '') {
|
||||
$this->value = $value;
|
||||
}
|
||||
}
|
||||
67
src/Query/Operator.php
Normal file
67
src/Query/Operator.php
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
class Operator {
|
||||
const OPERATION_AND = '{DAV:}and';
|
||||
const OPERATION_OR = '{DAV:}or';
|
||||
const OPERATION_NOT = '{DAV:}not';
|
||||
const OPERATION_EQUAL = '{DAV:}eq';
|
||||
const OPERATION_LESS_THAN = '{DAV:}lt';
|
||||
const OPERATION_LESS_OR_EQUAL_THAN = '{DAV:}lte';
|
||||
const OPERATION_GREATER_THAN = '{DAV:}gt';
|
||||
const OPERATION_GREATER_OR_EQUAL_THAN = '{DAV:}gte';
|
||||
const OPERATION_IS_COLLECTION = '{DAV:}is-collection';
|
||||
const OPERATION_IS_DEFINED = '{DAV:}is-defined';
|
||||
const OPERATION_IS_LIKE = '{DAV:}like';
|
||||
const OPERATION_CONTAINS = '{DAV:}contains';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* The type of operation, one of the Operator::OPERATION_* constants
|
||||
*/
|
||||
public $type;
|
||||
/**
|
||||
* @var (Literal|SearchPropDefinition|Operation)[]
|
||||
*
|
||||
* The list of arguments for the operation
|
||||
*
|
||||
* - SearchPropDefinition: property for comparison
|
||||
* - Literal: literal value for comparison
|
||||
* - Operation: nested operation for and/or/not operations
|
||||
*
|
||||
* Which type and what number of argument an Operator takes depends on the operator type.
|
||||
*/
|
||||
public $arguments;
|
||||
|
||||
/**
|
||||
* Operator constructor.
|
||||
*
|
||||
* @param string $type
|
||||
* @param array $arguments
|
||||
*/
|
||||
public function __construct($type = '', array $arguments = []) {
|
||||
$this->type = $type;
|
||||
$this->arguments = $arguments;
|
||||
}
|
||||
}
|
||||
53
src/Query/Order.php
Normal file
53
src/Query/Order.php
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
|
||||
use SearchDAV\Backend\SearchPropertyDefinition;
|
||||
|
||||
class Order {
|
||||
const ASC = 'ascending';
|
||||
const DESC = 'descending';
|
||||
|
||||
/**
|
||||
* @var SearchPropertyDefinition
|
||||
*
|
||||
* The property that should be sorted on.
|
||||
*/
|
||||
public $property;
|
||||
/**
|
||||
* @var string 'ascending' or 'descending'
|
||||
*
|
||||
* The sort direction
|
||||
*/
|
||||
public $order;
|
||||
|
||||
/**
|
||||
* Order constructor.
|
||||
* @param SearchPropertyDefinition $property
|
||||
* @param string $order
|
||||
*/
|
||||
public function __construct(SearchPropertyDefinition $property, $order) {
|
||||
$this->property = $property;
|
||||
$this->order = $order;
|
||||
}
|
||||
}
|
||||
79
src/Query/Query.php
Normal file
79
src/Query/Query.php
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
|
||||
use SearchDAV\Backend\SearchPropertyDefinition;
|
||||
|
||||
class Query {
|
||||
/**
|
||||
* @var SearchPropertyDefinition[]
|
||||
*
|
||||
* The list of properties to be selected
|
||||
*/
|
||||
public $select;
|
||||
/**
|
||||
* @var Scope[]
|
||||
*
|
||||
* The collections to perform the search in
|
||||
*/
|
||||
public $from;
|
||||
/**
|
||||
* @var Operator
|
||||
*
|
||||
* The search operator, either a comparison ('gt', 'eq', ...) or a boolean operator ('and', 'or', 'not')
|
||||
*/
|
||||
public $where;
|
||||
/**
|
||||
* @var Order[]
|
||||
*
|
||||
* The list of order operations that should be used to order the results.
|
||||
*
|
||||
* Each order operations consists of a property to sort on and a sort direction.
|
||||
* If more then one order operations are specified, the comparisons for ordering should
|
||||
* be applied in the order that the order operations are defined in with the earlier comparisons being
|
||||
* more significant.
|
||||
*/
|
||||
public $orderBy;
|
||||
/**
|
||||
* @var Limit
|
||||
*
|
||||
* The limit and offset for the search query
|
||||
*/
|
||||
public $limit;
|
||||
|
||||
/**
|
||||
* Query constructor.
|
||||
* @param SearchPropertyDefinition[] $select
|
||||
* @param Scope[] $from
|
||||
* @param Operator $where
|
||||
* @param Order[] $orderBy
|
||||
* @param Limit $limit
|
||||
*/
|
||||
public function __construct(array $select, array $from, Operator $where, array $orderBy, Limit $limit) {
|
||||
$this->select = $select;
|
||||
$this->from = $from;
|
||||
$this->where = $where;
|
||||
$this->orderBy = $orderBy;
|
||||
$this->limit = $limit;
|
||||
}
|
||||
}
|
||||
60
src/Query/Scope.php
Normal file
60
src/Query/Scope.php
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SearchDAV\Query;
|
||||
|
||||
|
||||
class Scope {
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* The scope of the search, either as absolute uri or as a path relative to the
|
||||
* search arbiter.
|
||||
*/
|
||||
public $href;
|
||||
|
||||
/**
|
||||
* @var string|int 0, 1 or 'infinite'
|
||||
*
|
||||
* How deep the search query should be with 0 being only the scope itself,
|
||||
* 1 being all direct child entries of the scope and infinite being all entries
|
||||
* in the scope collection at any depth.
|
||||
*/
|
||||
public $depth;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*
|
||||
* the path of the search scope relative to the dav server, or null if the scope is outside the dav server
|
||||
*/
|
||||
public $path;
|
||||
|
||||
/**
|
||||
* @param string $href
|
||||
* @param int|string $depth
|
||||
* @param string|null $path
|
||||
*/
|
||||
public function __construct($href = '', $depth = 1, $path = null) {
|
||||
$this->href = $href;
|
||||
$this->depth = $depth;
|
||||
$this->path = $path;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue