diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-01-27 04:15:53 +0100 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-01-27 04:15:53 +0100 |
commit | ae7393db3d99a7ac223ae917129cccd9f49888e3 (patch) | |
tree | 7f54b72b0d01c38afd1378365a67e4f192922423 /controllers/news.controller.php | |
parent | 483784caa38bd6131405ac474347a215584e30a5 (diff) |
merged the angularjs branch
Diffstat (limited to 'controllers/news.controller.php')
-rw-r--r-- | controllers/news.controller.php | 231 |
1 files changed, 70 insertions, 161 deletions
diff --git a/controllers/news.controller.php b/controllers/news.controller.php index daa84d13f..d12783205 100644 --- a/controllers/news.controller.php +++ b/controllers/news.controller.php @@ -12,169 +12,78 @@ namespace OCA\News; + class NewsController extends Controller { - /** - * Decides wether to show the feedpage or the firstrun page - */ - public function index(){ - $feedMapper = new FeedMapper($this->userId); - - if($feedMapper->feedCount() > 0){ - $this->feedPage(); - } else { - $this->firstRun(); - } - } - - - public function firstRun(){ - $this->addScript('news'); - $this->addScript('firstrun'); - $this->addStyle('firstrun'); - $this->render('firstrun'); - } - - - public function feedPage(){ - $this->addScript('main'); - $this->addScript('news'); - $this->addScript('menu'); - $this->addScript('items'); - - $this->addStyle('news'); - $this->addStyle('settings'); - - $folderMapper = new FolderMapper($this->userId); - $feedMapper = new FeedMapper($this->userId); - $itemMapper = new ItemMapper($this->userId); - - // if no feed id is passed as parameter, then show the last viewed feed on reload - $lastViewedFeedId = isset( $_GET['feedid'] ) ? $_GET['feedid'] : (int)$this->getUserValue('lastViewedFeed'); - $lastViewedFeedType = isset( $_GET['feedid'] ) ? FeedType::FEED : (int)$this->getUserValue('lastViewedFeedType'); - - $showAll = $this->getUserValue('showAll'); - - if( $lastViewedFeedId === null || $lastViewedFeedType === null) { - $lastViewedFeedId = $feedMapper->mostRecent(); - } else { - // check if the last selected feed or folder exists - if( ( - $lastViewedFeedType === FeedType::FEED && - $feedMapper->findById($lastViewedFeedId) === null - ) || - ( - $lastViewedFeedType === FeedType::FOLDER && - $folderMapper->findById($lastViewedFeedId) === null - ) ){ - $lastViewedFeedId = $feedMapper->mostRecent(); - } - } - - $feeds = $folderMapper->childrenOfWithFeeds(0); - $folderForest = $folderMapper->childrenOf(0); //retrieve all the folders - $starredCount = $itemMapper->countEveryItemByStatus(StatusFlag::IMPORTANT); - $items = $this->getItems($lastViewedFeedType, $lastViewedFeedId, $showAll); - - $params = array( - 'allfeeds' => $feeds, - 'folderforest' => $folderForest, - 'showAll' => $showAll, - 'lastViewedFeedId' => $lastViewedFeedId, - 'lastViewedFeedType' => $lastViewedFeedType, - 'starredCount' => $starredCount, - 'items' => $items - ); - - $this->render('main', $params, array('items' => true)); - } - - - /** - * Returns all items - * @param $feedType the type of the feed - * @param $feedId the id of the feed or folder - * @param $showAll if true, it will also include unread items - * @return an array with all items - */ - public function getItems($feedType, $feedId, $showAll){ - $items = array(); - $itemMapper = new ItemMapper($this->userId); - - // starred or subscriptions - if ($feedType === FeedType::STARRED || $feedType === FeedType::SUBSCRIPTIONS) { - - if($feedType === FeedType::STARRED){ - $statusFlag = StatusFlag::IMPORTANT; - } - - if($feedType === FeedType::SUBSCRIPTIONS){ - $statusFlag = StatusFlag::UNREAD; - } - - $items = $itemMapper->findEveryItemByStatus($statusFlag); - - // feed - } elseif ($feedType === FeedType::FEED){ - - if($showAll) { - $items = $itemMapper->findByFeedId($feedId); - } else { - $items = $itemMapper->findAllStatus($feedId, StatusFlag::UNREAD); - } - - // folder - } elseif ($feedType === FeedType::FOLDER){ - $feedMapper = new FeedMapper($this->userId); - $feeds = $feedMapper->findByFolderId($feedId); - - foreach($feeds as $feed){ - if($showAll) { - $items = array_merge($items, $itemMapper->findByFeedId($feed->getId())); - } else { - $items = array_merge($items, - $itemMapper->findAllStatus($feed->getId(), StatusFlag::UNREAD)); - } - } - } - return $items; - } - - - /** - * Returns the unread count - * @param $feedType the type of the feed - * @param $feedId the id of the feed or folder - * @return the unread count - */ - public function getItemUnreadCount($feedType, $feedId){ - $unreadCount = 0; - $itemMapper = new ItemMapper($this->userId); - - switch ($feedType) { - case FeedType::STARRED: - $unreadCount = $itemMapper->countEveryItemByStatus(StatusFlag::IMPORTANT); - break; - - case FeedType::SUBSCRIPTIONS: - $unreadCount = $itemMapper->countEveryItemByStatus(StatusFlag::UNREAD); - break; - - case FeedType::FOLDER: - $feedMapper = new FeedMapper($this->userId); - $feeds = $feedMapper->findByFolderId($feedId); - foreach($feeds as $feed){ - $unreadCount += $itemMapper->countAllStatus($feed->getId(), StatusFlag::UNREAD); - } - break; - - case FeedType::FEED: - $unreadCount = $itemMapper->countAllStatus($feedId, StatusFlag::UNREAD); - break; - } - - return $unreadCount; - } + private $feedMapper; + private $folderMapper; + + /** + * @param Request $request: the object with the request instance + * @param string $api: an instance of the api wrapper object + * @param FolderMapper $folderMapper: an instance of the folder mapper + * @param FeedMapper $feedMapper: an instance of the feed mapper + */ + public function __construct($request, $api, $feedMapper, $folderMapper){ + parent::__construct($request, $api); + $this->feedMapper = $feedMapper; + $this->folderMapper = $folderMapper; + $this->api->activateNavigationEntry(); + } + + + /** + * OPML export download page + */ + public function exportOPML($urlParams=array()){ + $opmlExporter = new OPMLExporter($this->api); + + $allFeeds = $this->folderMapper->childrenOfWithFeeds(0); + $opml = $opmlExporter->buildOPML($allFeeds); + + $fileName = 'ownCloud ' . $this->trans->t('News') . ' ' . $this->userId . '.opml'; + $contentType = 'application/x.opml+xml'; + $response = new TextDownloadResponse($opml, $fileName, $contentType); + + return $response; + } + + + /** + * Decides wether to show the feedpage or the firstrun page + */ + public function index($urlParams=array()){ + $this->api->add3rdPartyScript('angular-1.0.2/angular.min'); + $this->api->add3rdPartyScript('moment.min'); + $this->api->addScript('app'); + $this->api->addStyle('news'); + + + if($urlParams['feedid']){ + $this->api->setUserValue('lastViewedFeed', $urlParams['feedid']); + $this->api->setUserValue('lastViewedFeedType', FeedType::FEED); + } + + $lastViewedFeedId = $this->api->getUserValue('lastViewedFeed'); + $lastViewedFeedType = $this->api->getUserValue('lastViewedFeedType'); + + if( $lastViewedFeedId === null || $lastViewedFeedType === null) { + $this->api->setUserValue('lastViewedFeed', $this->feedMapper->mostRecent());; + $this->api->setUserValue('lastViewedFeedType', FeedType::FEED); + + } else { + // check if the last selected feed or folder exists + if(($lastViewedFeedType === FeedType::FEED && + $this->feedMapper->findById($lastViewedFeedId) === null) || + ($lastViewedFeedType === FeedType::FOLDER && + $this->folderMapper->findById($lastViewedFeedId) === null)){ + $this->api->setUserValue('lastViewedFeed', $this->feedMapper->mostRecent());; + $this->api->setUserValue('lastViewedFeedType', FeedType::FEED); + } + } + + return $this->render('main'); + } } |