diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2016-07-23 21:24:54 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2016-07-23 21:24:54 +0200 |
commit | 004fcbbcc7609ca83807f2e38967ef54f469bf72 (patch) | |
tree | 49eb99b4ea92b2045793fc567f719b31ec7f9042 /lib/Controller/ItemController.php | |
parent | 60abc0ed4438c9b6fda245b0dc33cb483bc2aeaf (diff) |
Move to new directory structure
Diffstat (limited to 'lib/Controller/ItemController.php')
-rw-r--r-- | lib/Controller/ItemController.php | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/lib/Controller/ItemController.php b/lib/Controller/ItemController.php new file mode 100644 index 000000000..ac838f1bf --- /dev/null +++ b/lib/Controller/ItemController.php @@ -0,0 +1,218 @@ +<?php +/** + * ownCloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Alessandro Cosentino <cosenal@gmail.com> + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @copyright Alessandro Cosentino 2012 + * @copyright Bernhard Posselt 2012, 2014 + */ + +namespace OCA\News\Controller; + +use \OCP\IRequest; +use \OCP\IConfig; +use \OCP\AppFramework\Controller; +use \OCP\AppFramework\Http; + +use \OCA\News\Service\ServiceException; +use \OCA\News\Service\ServiceNotFoundException; +use \OCA\News\Service\ItemService; +use \OCA\News\Service\FeedService; + + +class ItemController extends Controller { + + use JSONHttpError; + + private $itemService; + private $feedService; + private $userId; + private $settings; + + public function __construct($AppName, + IRequest $request, + FeedService $feedService, + ItemService $itemService, + IConfig $settings, + $UserId){ + parent::__construct($AppName, $request); + $this->itemService = $itemService; + $this->feedService = $feedService; + $this->userId = $UserId; + $this->settings = $settings; + } + + + /** + * @NoAdminRequired + * + * @param int $type + * @param int $id + * @param int $limit + * @param int $offset + * @param bool $showAll + * @param bool $oldestFirst + * @param string $search + * @return array + */ + public function index($type=3, $id=0, $limit=50, $offset=0, $showAll=null, + $oldestFirst=null, $search='') { + + // in case this is called directly and not from the website use the + // internal state + if ($showAll === null) { + $showAll = $this->settings->getUserValue( + $this->userId, $this->appName,'showAll' + ) === '1'; + } + + if ($oldestFirst === null) { + $oldestFirst = $this->settings->getUserValue( + $this->userId, $this->appName, 'oldestFirst' + ) === '1'; + } + + $this->settings->setUserValue($this->userId, $this->appName, + 'lastViewedFeedId', $id); + $this->settings->setUserValue($this->userId, $this->appName, + 'lastViewedFeedType', $type); + + $params = []; + + // split search parameter on url space + $search = trim(urldecode($search)); + $search = preg_replace('/\s+/', ' ', $search); // remove multiple ws + if ($search === '') { + $search = []; + } else { + $search = explode(' ', $search); + } + + try { + + // the offset is 0 if the user clicks on a new feed + // we need to pass the newest feeds to not let the unread count get + // out of sync + if($offset === 0) { + $params['newestItemId'] = + $this->itemService->getNewestItemId($this->userId); + $params['feeds'] = $this->feedService->findAll($this->userId); + $params['starred'] = + $this->itemService->starredCount($this->userId); + } + + $params['items'] = $this->itemService->findAll( + $id, $type, $limit, $offset, $showAll, $oldestFirst, + $this->userId, $search + ); + + // this gets thrown if there are no items + // in that case just return an empty array + } catch(ServiceException $ex) {} + + return $params; + } + + + /** + * @NoAdminRequired + * + * @param int $type + * @param int $id + * @param int $lastModified + * @return array + */ + public function newItems($type, $id, $lastModified=0) { + $showAll = $this->settings->getUserValue($this->userId, $this->appName, + 'showAll') === '1'; + + $params = []; + + try { + $params['newestItemId'] = + $this->itemService->getNewestItemId($this->userId); + $params['feeds'] = $this->feedService->findAll($this->userId); + $params['starred'] = + $this->itemService->starredCount($this->userId); + $params['items'] = $this->itemService->findAllNew($id, $type, + $lastModified, $showAll, $this->userId); + + // this gets thrown if there are no items + // in that case just return an empty array + } catch(ServiceException $ex) {} + + return $params; + } + + + /** + * @NoAdminRequired + * + * @param int $feedId + * @param string $guidHash + * @param bool $isStarred + * @return array|\OCP\AppFramework\Http\JSONResponse + */ + public function star($feedId, $guidHash, $isStarred){ + try { + $this->itemService->star($feedId, $guidHash, $isStarred, + $this->userId); + } catch(ServiceException $ex) { + return $this->error($ex, Http::STATUS_NOT_FOUND); + } + + return []; + } + + + /** + * @NoAdminRequired + * + * @param int $itemId + * @param bool $isRead + * @return array|\OCP\AppFramework\Http\JSONResponse + */ + public function read($itemId, $isRead=true){ + try { + $this->itemService->read($itemId, $isRead, $this->userId); + } catch(ServiceException $ex) { + return $this->error($ex, Http::STATUS_NOT_FOUND); + } + + return []; + } + + + /** + * @NoAdminRequired + * + * @param int $highestItemId + * @return array + */ + public function readAll($highestItemId){ + $this->itemService->readAll($highestItemId, $this->userId); + return ['feeds' => $this->feedService->findAll($this->userId)]; + } + + + /** + * @NoAdminRequired + * + * @param int[] item ids + */ + public function readMultiple($itemIds) { + foreach($itemIds as $id) { + try { + $this->itemService->read($id, true, $this->userId); + } catch(ServiceNotFoundException $ex) { + continue; + } + } + } + + +} |