summaryrefslogtreecommitdiffstats
path: root/controllers
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2012-10-13 04:47:35 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2012-10-13 04:47:35 +0200
commit4b5f94b435b4756e3aa9e1a3fad3820ce1389ba8 (patch)
tree88b016195f4dbcf2deb6993d6ec029df7a05db8c /controllers
parent523f5304be09223b3b57a9df0452123e90f627e3 (diff)
selecting folders works
Diffstat (limited to 'controllers')
-rw-r--r--controllers/controller.php15
-rw-r--r--controllers/news.controller.php95
2 files changed, 104 insertions, 6 deletions
diff --git a/controllers/controller.php b/controllers/controller.php
index 06234e8f4..82f60df76 100644
--- a/controllers/controller.php
+++ b/controllers/controller.php
@@ -16,11 +16,12 @@ class Controller {
protected $userId;
protected $trans;
-
+
public function __construct(){
$this->userId = \OCP\USER::getUser();
$this->trans = \OC_L10N::get('news');
+ $this->safeParams = array();
}
@@ -68,10 +69,12 @@ class Controller {
* The following values are always assigned: userId, trans
* @param $arguments an array with arguments in $templateVar => $content
* @param $template the name of the template
+ * @param $safeParams template parameters which should not be escaped
* @param $fullPage if true, it will render a full page, otherwise only a part
* defaults to true
*/
- protected function render($template, $arguments=array(), $fullPage=true){
+ protected function render($template, $arguments=array(), $safeParams=array(),
+ $fullPage=true){
if($fullPage){
$template = new \OCP\Template('news', $template, 'user');
@@ -80,7 +83,12 @@ class Controller {
}
foreach($arguments as $key => $value){
- $template->assign($key, $value);
+ if(array_key_exists($key, $safeParams)) {
+ $template->assign($key, $value, false);
+ } else {
+ $template->assign($key, $value, false);
+ }
+
}
$template->assign('userId', $this->userId);
@@ -88,6 +96,7 @@ class Controller {
$template->printPage();
}
+
}
?> \ No newline at end of file
diff --git a/controllers/news.controller.php b/controllers/news.controller.php
index 9695e85d1..ba3005b01 100644
--- a/controllers/news.controller.php
+++ b/controllers/news.controller.php
@@ -61,8 +61,8 @@ class NewsController extends Controller {
$itemMapper = new ItemMapper($this->userId);
// always show the last viewed feed on reload
- $lastViewedFeedId = $this->getUserValue('lastViewedFeed');
- $lastViewedFeedType = $this->getUserValue('lastViewedFeedType');
+ $lastViewedFeedId = (int)$this->getUserValue('lastViewedFeed');
+ $lastViewedFeedType = (int)$this->getUserValue('lastViewedFeedType');
$showAll = $this->getUserValue('showAll');
if( $lastViewedFeedId === null || $lastViewedFeedType === null) {
@@ -84,6 +84,7 @@ class NewsController extends Controller {
$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,
@@ -92,12 +93,100 @@ class NewsController extends Controller {
'lastViewedFeedId' => $lastViewedFeedId,
'lastViewedFeedType' => $lastViewedFeedType,
'starredCount' => $starredCount,
+ 'items' => $items
);
- $this->render('main', $params);
+ $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 || $feedId == FeedType::SUBSCRIPTIONS) {
+
+ if($feedType === FeedType::STARRED){
+ $statusFlag = StatusFlag::IMPORTANT;
+ }
+
+ if($feedType === FeedType::SUBSCRIPTIONS){
+ $statusFlag = StatusFlag::UNREAD;
+ }
+
+ $items = $itemMapper->findEveryItemByStatus($status);
+
+ // 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->countAllStatus($feedId, 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;
+ }
+
public function javascriptTests(){
$this->add3rdPartyScript('jasmine-1.2.0/jasmine.js');
$this->add3rdPartyStyle('jasmine-1.2.0/jasmine.css');