summaryrefslogtreecommitdiffstats
path: root/controllers/news.controller.php
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-01-27 04:15:53 +0100
committerBernhard Posselt <nukeawhale@gmail.com>2013-01-27 04:15:53 +0100
commitae7393db3d99a7ac223ae917129cccd9f49888e3 (patch)
tree7f54b72b0d01c38afd1378365a67e4f192922423 /controllers/news.controller.php
parent483784caa38bd6131405ac474347a215584e30a5 (diff)
merged the angularjs branch
Diffstat (limited to 'controllers/news.controller.php')
-rw-r--r--controllers/news.controller.php231
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');
+ }
}