From c3b00963fe22479e87998c82bc83827a54c8d972 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 22 Dec 2016 14:36:45 +0100 Subject: REST API: implement getLinks service See http://shaarli.github.io/api-documentation/#links-links-collection-get --- application/api/controllers/Links.php | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 application/api/controllers/Links.php (limited to 'application/api/controllers/Links.php') diff --git a/application/api/controllers/Links.php b/application/api/controllers/Links.php new file mode 100644 index 00000000..1c7b41cd --- /dev/null +++ b/application/api/controllers/Links.php @@ -0,0 +1,86 @@ +getParam('private'); + $links = $this->linkDb->filterSearch( + [ + 'searchtags' => $request->getParam('searchtags', ''), + 'searchterm' => $request->getParam('searchterm', ''), + ], + false, + $private === 'true' || $private === '1' + ); + + // Return links from the {offset}th link, starting from 0. + $offset = $request->getParam('offset'); + if (! empty($offset) && ! ctype_digit($offset)) { + throw new ApiBadParametersException('Invalid offset'); + } + $offset = ! empty($offset) ? intval($offset) : 0; + if ($offset > count($links)) { + return $response->withJson([], 200, $this->jsonStyle); + } + + // limit parameter is either a number of links or 'all' for everything. + $limit = $request->getParam('limit'); + if (empty($limit)) { + $limit = self::$DEFAULT_LIMIT; + } + else if (ctype_digit($limit)) { + $limit = intval($limit); + } else if ($limit === 'all') { + $limit = count($links); + } else { + throw new ApiBadParametersException('Invalid limit'); + } + + // 'environment' is set by Slim and encapsulate $_SERVER. + $index = index_url($this->ci['environment']); + + $out = []; + $cpt = 0; + foreach ($links as $link) { + if (count($out) >= $limit) { + break; + } + if ($cpt++ >= $offset) { + $out[] = ApiUtils::formatLink($link, $index); + } + } + + return $response->withJson($out, 200, $this->jsonStyle); + } +} -- cgit v1.2.3