diff options
-rw-r--r-- | appinfo/routes.php | 6 | ||||
-rw-r--r-- | businesslayer/feedbusinesslayer.php | 14 | ||||
-rw-r--r-- | controller/feedcontroller.php | 17 | ||||
-rw-r--r-- | css/feeds.css | 12 | ||||
-rw-r--r-- | css/owncloud6.css | 4 | ||||
-rw-r--r-- | js/app/services/businesslayer/feedbusinesslayer.coffee | 8 | ||||
-rw-r--r-- | js/app/services/persistence.coffee | 13 | ||||
-rw-r--r-- | templates/part.listfeed.php | 17 |
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" |