summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Saurino <davide.saurino@alcacoop.it>2013-11-12 10:46:31 +0100
committerDavide Saurino <davide.saurino@alcacoop.it>2013-11-12 10:46:31 +0100
commitbe253cdc1ba255cecb0dba910e1fc7b08b7707eb (patch)
tree303460a33d239874c341e02f89584c0ace9e2462
parentd6fdba30fba1e7f905be23478831a091b71ddbde (diff)
Make feed title editable (FIX #242)
-rw-r--r--appinfo/routes.php6
-rw-r--r--businesslayer/feedbusinesslayer.php14
-rw-r--r--controller/feedcontroller.php17
-rw-r--r--css/feeds.css12
-rw-r--r--css/owncloud6.css4
-rw-r--r--js/app/services/businesslayer/feedbusinesslayer.coffee8
-rw-r--r--js/app/services/persistence.coffee13
-rw-r--r--templates/part.listfeed.php17
8 files changed, 91 insertions, 0 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php
index bc1b7ad7d..6e21bf5f3 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -134,6 +134,12 @@ $this->create('news_feeds_move', '/feeds/{feedId}/move')->post()->action(
}
);
+$this->create('news_feeds_rename', '/feeds/{feedId}/rename')->post()->action(
+ function($params){
+ App::main('FeedController', 'rename', $params, new DIContainer());
+ }
+);
+
$this->create('news_feeds_read', '/feeds/{feedId}/read')->post()->action(
function($params){
App::main('FeedController', 'read', $params, new DIContainer());
diff --git a/businesslayer/feedbusinesslayer.php b/businesslayer/feedbusinesslayer.php
index b7ad5987a..58a4ed578 100644
--- a/businesslayer/feedbusinesslayer.php
+++ b/businesslayer/feedbusinesslayer.php
@@ -226,6 +226,20 @@ class FeedBusinessLayer extends BusinessLayer {
/**
+ * Rename a feed
+ * @param int $feedId the id of the feed that should be moved
+ * @param string $feedTitle the new title of the feed
+ * @param string $userId the name of the user whose feed should be renamed
+ * @throws BusinessLayerException if the feed does not exist
+ */
+ public function rename($feedId, $feedTitle, $userId) {
+ $feed = $this->find($feedId, $userId);
+ $feed->setTitle($feedTitle);
+ $this->mapper->update($feed);
+ }
+
+
+ /**
* Import articles
* @param array $json the array with json
* @param string userId the username
diff --git a/controller/feedcontroller.php b/controller/feedcontroller.php
index 762859627..e9561cf32 100644
--- a/controller/feedcontroller.php
+++ b/controller/feedcontroller.php
@@ -221,6 +221,23 @@ class FeedController extends Controller {
}
}
+ /**
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ * @Ajax
+ */
+ public function rename() {
+ $feedId = (int) $this->params('feedId');
+ $feedTitle = $this->params('feedTitle');
+ $userId = $this->api->getUserId();
+
+ try {
+ $this->feedBusinessLayer->rename($feedId, $feedTitle, $userId);
+ return $this->renderJSON();
+ } catch(BusinessLayerException $ex) {
+ return $this->renderJSON(array(), $ex->getMessage());
+ }
+ }
/**
* @IsAdminExemption
diff --git a/css/feeds.css b/css/feeds.css
index b31a7c9aa..bdc314250 100644
--- a/css/feeds.css
+++ b/css/feeds.css
@@ -182,10 +182,22 @@ button.action:hover {
padding-left: 0;
}
+#app-navigation .rename-feed > input{
+ height: 30px;
+}
+
+#app-navigation .rename-feed > a {
+ padding-left: 5px;
+}
+
.delete-icon {
background-image: url('%webroot%/core/img/actions/delete.svg');
}
+.rename-feed-icon {
+ background-image: url('%webroot%/core/img/actions/rename.svg');
+}
+
.mark-read-icon {
background-image: url('%appswebroot%/news/img/mark_read.svg');
}
diff --git a/css/owncloud6.css b/css/owncloud6.css
index d59dab6a8..0615bae6d 100644
--- a/css/owncloud6.css
+++ b/css/owncloud6.css
@@ -14,6 +14,10 @@
line-height: 44px;
}
+#app-navigation .rename-feed-icon {
+ padding-right: 40px;
+}
+
#app-navigation .mark-read-icon {
padding-right: 40px;
}
diff --git a/js/app/services/businesslayer/feedbusinesslayer.coffee b/js/app/services/businesslayer/feedbusinesslayer.coffee
index fd92209ab..4905014eb 100644
--- a/js/app/services/businesslayer/feedbusinesslayer.coffee
+++ b/js/app/services/businesslayer/feedbusinesslayer.coffee
@@ -66,6 +66,14 @@ FeedModel, NewLoading, _ExistsError, Utils, $rootScope, NewestItem)->
@_persistence.deleteFeed(feedId)
+ renameFeed: (feedId, feedTitle) ->
+ feed = @_feedModel.getById(feedId)
+ feed.editing = false
+
+ if angular.isDefined(feed) and feedTitle !== ""
+ @_persistence.renameFeed(feedId, feedTitle)
+
+
markRead: (feedId) ->
feed = @_feedModel.getById(feedId)
newestItemId = @_newestItem.getId()
diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee
index d51c7acb1..bfca4ccaa 100644
--- a/js/app/services/persistence.coffee
+++ b/js/app/services/persistence.coffee
@@ -243,6 +243,19 @@ $rootScope, $q) ->
@_request.post 'news_feeds_move', params
+ renameFeed: (feedId, feedTitle) ->
+ ###
+ rename a feed
+ ###
+ params =
+ routeParams:
+ feedId: feedId
+ data:
+ feedTitle: feedTitle
+
+ @_request.post 'news_feeds_rename', params
+
+
setFeedRead: (feedId, highestItemId) ->
###
sets all items of a feed as read
diff --git a/templates/part.listfeed.php b/templates/part.listfeed.php
index ca49823f6..1273d2317 100644
--- a/templates/part.listfeed.php
+++ b/templates/part.listfeed.php
@@ -16,12 +16,19 @@
scroll: true,
revert: true
}">
+
+ <div ng-show="feed.editing" class="rename-feed">
+ <input type="text" ng-model="feed.title">
+ <a href="#" ng-click="feedBusinessLayer.renameFeed(feed.id, feed.title)">Save</a>
+ </div>
+
<a ng-style="{ backgroundImage: feed.faviconLink }"
ng-click="feedBusinessLayer.load(feed.id)"
ng-class="{
'progress-icon': !feed.id,
'problem-icon': feed.error
}"
+ ng-hide="feed.editing"
href="#"
class="title"
title="{{ feed.title }}"
@@ -33,17 +40,26 @@
<span class="utils">
<button ng-click="feedBusinessLayer.delete(feed.id)"
+ ng-hide="feed.editing"
class="svg action delete-icon delete-button"
title="<?php p($l->t('Delete website')); ?>"
ng-show="feed.id"
oc-tooltip></button>
<span class="unread-counter"
+ ng-hide="feed.editing"
ng-show="feed.id && feedBusinessLayer.getUnreadCount(feed.id) > 0">
{{ unreadCountFormatter(feedBusinessLayer.getUnreadCount(feed.id)) }}
</span>
+ <button class="svg action rename-feed-icon"
+ ng-hide="feed.editing"
+ ng-click="feed.editing = true"
+ title="<?php p($l->t('Rename feed')); ?>"
+ oc-tooltip></button>
+
<button class="svg action mark-read-icon"
+ ng-hide="feed.editing"
ng-show="feedBusinessLayer.getUnreadCount(feed.id) > 0 && feed.id"
ng-click="feedBusinessLayer.markRead(feed.id)"
title="<?php p($l->t('Mark read')); ?>"
@@ -51,6 +67,7 @@
<button class="svg action delete-icon"
+ ng-hide="feed.editing"
ng-click="feedBusinessLayer.markErrorRead(feed.url)"
title="<?php p($l->t('Delete website')); ?>"
ng-show="feed.error"