. * */ namespace OCA\News\BusinessLayer; use \OCA\AppFramework\Utility\TimeFactory; use \OCA\AppFramework\Db\DoesNotExistException; use \OCA\News\Db\Item; use \OCA\News\Db\ItemMapper; use \OCA\News\Db\StatusFlag; use \OCA\News\Db\FeedType; class ItemBusinessLayer extends BusinessLayer { private $statusFlag; private $autoPurgeCount; private $timeFactory; public function __construct(ItemMapper $itemMapper, StatusFlag $statusFlag, TimeFactory $timeFactory, $autoPurgeCount=0){ parent::__construct($itemMapper); $this->statusFlag = $statusFlag; $this->autoPurgeCount = $autoPurgeCount; $this->timeFactory = $timeFactory; } public function findAllNew($id, $type, $updatedSince, $showAll, $userId){ $status = $this->statusFlag->typeToStatus($type, $showAll); switch($type){ case FeedType::FEED: $items = $this->mapper->findAllNewFeed($id, $updatedSince, $status, $userId); break; case FeedType::FOLDER: $items = $this->mapper->findAllNewFolder($id, $updatedSince, $status, $userId); break; default: $items = $this->mapper->findAllNew($updatedSince, $status, $userId); } return $items; } public function findAll($id, $type, $limit, $offset, $showAll, $userId){ $status = $this->statusFlag->typeToStatus($type, $showAll); switch($type){ case FeedType::FEED: $items = $this->mapper->findAllFeed($id, $limit, $offset, $status, $userId); break; case FeedType::FOLDER: $items = $this->mapper->findAllFolder($id, $limit, $offset, $status, $userId); break; default: $items = $this->mapper->findAll($limit, $offset, $status, $userId); } return $items; } /** * @throws BusinessLayerException if the item does not exist */ public function star($feedId, $guidHash, $isStarred, $userId){ try { $item = $this->mapper->findByGuidHash($guidHash, $feedId, $userId); $item->setLastModified($this->timeFactory->getTime()); if($isStarred){ $item->setStarred(); } else { $item->setUnstarred(); } $this->mapper->update($item); } catch(DoesNotExistException $ex) { throw new BusinessLayerException($ex->getMessage()); } } /** * @throws BusinessLayerException if the item does not exist */ public function read($itemId, $isRead, $userId){ $item = $this->find($itemId, $userId); $item->setLastModified($this->timeFactory->getTime()); if($isRead){ $item->setRead(); } else { $item->setUnread(); } $this->mapper->update($item); } public function readAll($highestItemId, $userId){ $this->mapper->readAll($highestItemId, $userId); } public function readFolder($folderId, $highestItemId, $userId){ $this->mapper->readFolder($folderId, $highestItemId, $userId); } public function readFeed($feedId, $highestItemId, $userId){ $this->mapper->readFeed($feedId, $highestItemId, $userId); } /** * This method deletes all unread feeds that are not starred and over the * count of $this->autoPurgeCount starting by the oldest. This is to clean * up the database so that old entries dont spam your db. As criteria for * old, the id is taken */ public function autoPurgeOld(){ $this->mapper->deleteReadOlderThanThreshold($this->autoPurgeCount); } /** * @throws BusinessLayerException if there is no newest item */ public function getNewestItemId($userId) { try { return $this->mapper->getNewestItemId($userId); } catch(DoesNotExistException $ex) { throw new BusinessLayerException($ex->getMessage()); } } public function starredCount($userId){ return $this->mapper->starredCount($userId); } }