summaryrefslogtreecommitdiffstats
path: root/lib/api/kolab_api_service_resources.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/kolab_api_service_resources.php')
-rw-r--r--lib/api/kolab_api_service_resources.php147
1 files changed, 147 insertions, 0 deletions
diff --git a/lib/api/kolab_api_service_resources.php b/lib/api/kolab_api_service_resources.php
new file mode 100644
index 0000000..6bcc7e3
--- /dev/null
+++ b/lib/api/kolab_api_service_resources.php
@@ -0,0 +1,147 @@
+<?php
+/*
+ +--------------------------------------------------------------------------+
+ | This file is part of the Kolab Web Admin Panel |
+ | |
+ | Copyright (C) 2011-2012, Kolab Systems AG |
+ | |
+ | 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/> |
+ +--------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <machniak@kolabsys.com> |
+ | Author: Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> |
+ +--------------------------------------------------------------------------+
+*/
+
+/**
+ * Service providing resources listing
+ */
+class kolab_api_service_resources extends kolab_api_service
+{
+ public $list_attribs = array(
+ 'alias',
+ 'cn',
+ 'entrydn',
+ 'mail',
+ 'objectclass',
+ );
+
+
+ /**
+ * Returns service capabilities.
+ *
+ * @param string $domain Domain name
+ *
+ * @return array Capabilities list
+ */
+ public function capabilities($domain)
+ {
+ return array(
+ 'list' => 'r',
+ );
+ }
+
+ /**
+ * Users listing (with searching).
+ *
+ * @param array $get GET parameters
+ * @param array $post POST parameters
+ *
+ * @return array List result with 'list' and 'count' items
+ */
+ public function resources_list($get, $post)
+ {
+ $auth = Auth::get_instance();
+
+ // returned attributes
+ if (!empty($post['attributes']) && is_array($post['attributes'])) {
+ // get only supported attributes
+ $attributes = array_intersect($this->list_attribs, $post['attributes']);
+ // need to fix array keys
+ $attributes = array_values($attributes);
+ }
+ if (empty($attributes)) {
+ $attributes = (array)$this->list_attribs[0];
+ }
+
+ $search = array();
+ $params = array();
+
+ // searching
+ if (!empty($post['search']) && is_array($post['search'])) {
+ $params = $post['search'];
+
+ foreach ($params as $idx => $param) {
+ // get only supported attributes
+ if (!in_array($idx, $this->list_attribs)) {
+ unset($params[$idx]);
+ continue;
+ }
+
+ // search string
+ if (empty($param['value'])) {
+ unset($params[$idx]);
+ continue;
+ }
+ }
+
+ $search['params'] = $params;
+ if (!empty($post['search_operator'])) {
+ $search['operator'] = $post['search_operator'];
+ }
+ }
+
+ if (!empty($post['sort_by'])) {
+ if (is_array($post['sort_by'])) {
+ $params['sort_by'] = Array();
+ foreach ($post['sort_by'] as $attrib) {
+ if (in_array($attrib, $this->list_attribs)) {
+ $params['sort_by'][] = $attrib;
+ }
+ }
+ } else {
+ // check if sort attribute is supported
+ if (in_array($post['sort_by'], $this->list_attribs)) {
+ $params['sort_by'] = $post['sort_by'];
+ }
+ }
+ }
+
+ if (!empty($post['sort_order'])) {
+ $params['sort_order'] = $post['sort_order'] == 'DESC' ? 'DESC' : 'ASC';
+ }
+
+ $resources = $auth->list_resources(null, $attributes, $search, $params);
+ $count = count($resources);
+
+ // pagination
+ if (!empty($post['page_size']) && $count) {
+ $size = (int) $post['page_size'];
+ $page = !empty($post['page']) ? $post['page'] : 1;
+ $page = max(1, (int) $page);
+ $offset = ($page - 1) * $size;
+
+ $resources = array_slice($resources, $offset, $size, true);
+ }
+
+ $result = array(
+ 'list' => $resources,
+ 'count' => $count,
+ );
+
+ //console($result);
+
+ return $result;
+ }
+
+}