From 7b2b966474b02d1f2ca70ce0aa5ed2db1e637747 Mon Sep 17 00:00:00 2001 From: Mostafa Qanbaryan Date: Sun, 14 Nov 2021 15:02:31 +0330 Subject: [PATCH 1/3] Added: order_by in search function --- src/Resource/AbstractResource.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Resource/AbstractResource.php b/src/Resource/AbstractResource.php index c3fd35c..1b3dd44 100644 --- a/src/Resource/AbstractResource.php +++ b/src/Resource/AbstractResource.php @@ -387,7 +387,7 @@ private function allWithoutPagination() * @return mixed Returns array of ZammadAPIClient\Resource\... objects * or this object on failure. */ - public function search( $search_term, $page = null, $objects_per_page = null ) + public function search( $search_term, $page = null, $objects_per_page = null, $sort_by = null, $order_by = null ) { if ( !empty( $this->getValues() ) ) { throw new AlreadyFetchedObjectException('Object already contains values, search() not possible, use a new object'); @@ -407,7 +407,7 @@ public function search( $search_term, $page = null, $objects_per_page = null ) } if ( !isset($page) || !isset($objects_per_page) ) { - return $this->searchWithoutPagination($search_term); + return $this->searchWithoutPagination($search_term, $sort_by, $order_by); } $url_parameters = [ @@ -420,6 +420,13 @@ public function search( $search_term, $page = null, $objects_per_page = null ) $url_parameters['per_page'] = $objects_per_page; } + if ( isset($sort_by) ) { + $url_parameters['sort_by'] = $sort_by; + } + if ( isset($order_by) ) { + $url_parameters['order_by'] = $order_by; + } + $url = $this->getURL('search'); $response = $this->getClient()->get( $url, @@ -453,7 +460,7 @@ public function search( $search_term, $page = null, $objects_per_page = null ) * @return mixed Returns array of ZammadAPIClient\Resource\... objects * or this object on failure. */ - private function searchWithoutPagination($search_term) + private function searchWithoutPagination($search_term, $sort_by = null, $order_by = null) { $page = 1; $objects_per_page = 100; @@ -461,7 +468,7 @@ private function searchWithoutPagination($search_term) $objects_of_page = []; do { - $objects_of_page = $this->search( $search_term, $page, $objects_per_page ); + $objects_of_page = $this->search( $search_term, $page, $objects_per_page, $sort_by, $order_by ); if ( !is_array($objects_of_page) ) { return $this; } From 600a6d38c4bdc63b71631e739d216c4c298c3dee Mon Sep 17 00:00:00 2001 From: Rene Reimann Date: Tue, 9 Jun 2026 08:04:17 +0200 Subject: [PATCH 2/3] Improve: add PHPDoc and validation for search() sort_by / order_by parameters --- src/Resource/AbstractResource.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Resource/AbstractResource.php b/src/Resource/AbstractResource.php index 1b3dd44..60478f9 100644 --- a/src/Resource/AbstractResource.php +++ b/src/Resource/AbstractResource.php @@ -383,6 +383,8 @@ private function allWithoutPagination() * @param string $search_term Search term. * @param integer $page Page of objects, optional, if given, $objects_per_page must also be given. * @param integer $objects_per_page Number of objects per page, optional, if given, $page must also be given. + * @param string $sort_by Sort by field name, optional (e.g. 'created_at', 'title', 'number'). + * @param string $order_by Sort order, optional, must be 'asc' or 'desc'. * * @return mixed Returns array of ZammadAPIClient\Resource\... objects * or this object on failure. @@ -406,6 +408,10 @@ public function search( $search_term, $page = null, $objects_per_page = null, $s throw new \RuntimeException('Parameters page and objects_per_page must both be given'); } + if ( isset($order_by) && !in_array( mb_strtolower($order_by), [ 'asc', 'desc' ] ) ) { + throw new \RuntimeException('Parameter order_by must be "asc" or "desc"'); + } + if ( !isset($page) || !isset($objects_per_page) ) { return $this->searchWithoutPagination($search_term, $sort_by, $order_by); } @@ -457,6 +463,10 @@ public function search( $search_term, $page = null, $objects_per_page = null, $s * This method will be used internally and automatically by search() to automate pagination * to retrieve all available objects, ignoring the server side limit of fetchable objects. * + * @param string $search_term Search term. + * @param string $sort_by Sort by field name, optional. + * @param string $order_by Sort order, optional. + * * @return mixed Returns array of ZammadAPIClient\Resource\... objects * or this object on failure. */ From 34df5db9a9930d2eb914b6ec4d29e62aef3979b6 Mon Sep 17 00:00:00 2001 From: Rene Reimann Date: Tue, 9 Jun 2026 08:15:17 +0200 Subject: [PATCH 3/3] Fix: Tag::search() signature compatibility with parent class --- src/Resource/Tag.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resource/Tag.php b/src/Resource/Tag.php index de1d455..ab21f72 100644 --- a/src/Resource/Tag.php +++ b/src/Resource/Tag.php @@ -101,7 +101,7 @@ public function add($object_id, $tag, $object_type = 'Ticket') * @return mixed Returns array of ZammadAPIClient\Resource\... objects * or this object on failure. */ - public function search($search_term, $page = null, $objects_per_page = null) + public function search($search_term, $page = null, $objects_per_page = null, $sort_by = null, $order_by = null) { $this->clearError();