Mercurial > public > src > rhodecode
changeset 1876:2aee0dc1784e beta
mark all read button for notifications
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 19 Dec 2011 02:31:22 +0200 |
parents | f551007ce085 |
children | 2afa6b8c2ade |
files | rhodecode/config/routing.py rhodecode/controllers/admin/notifications.py rhodecode/model/notification.py rhodecode/templates/admin/notifications/notifications.html rhodecode/templates/admin/notifications/notifications_data.html rhodecode/templates/base/base.html |
diffstat | 6 files changed, 65 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/config/routing.py Mon Dec 19 00:12:50 2011 +0200 +++ b/rhodecode/config/routing.py Mon Dec 19 02:31:22 2011 +0200 @@ -26,7 +26,7 @@ def check_repo(environ, match_dict): """ check for valid repository for proper 404 handling - + :param environ: :param match_dict: """ @@ -37,7 +37,7 @@ def check_group(environ, match_dict): """ check for valid repositories group for proper 404 handling - + :param environ: :param match_dict: """ @@ -45,7 +45,6 @@ return is_valid_repos_group(repos_group_name, config['base_path']) - def check_int(environ, match_dict): return match_dict.get('id').isdigit() @@ -274,7 +273,6 @@ m.connect("admin_settings_create_repository", "/create_repository", action="create_repository", conditions=dict(method=["GET"])) - #NOTIFICATION REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/notifications') as m: @@ -282,6 +280,8 @@ action="create", conditions=dict(method=["POST"])) m.connect("notifications", "/notifications", action="index", conditions=dict(method=["GET"])) + m.connect("notifications_mark_all_read", "/notifications/mark_all_read", + action="mark_all_read", conditions=dict(method=["GET"])) m.connect("formatted_notifications", "/notifications.{format}", action="index", conditions=dict(method=["GET"])) m.connect("new_notification", "/notifications/new",
--- a/rhodecode/controllers/admin/notifications.py Mon Dec 19 00:12:50 2011 +0200 +++ b/rhodecode/controllers/admin/notifications.py Mon Dec 19 02:31:22 2011 +0200 @@ -1,6 +1,7 @@ import logging import traceback +from pylons import request from pylons import tmpl_context as c, url from pylons.controllers.util import redirect @@ -15,6 +16,7 @@ log = logging.getLogger(__name__) + class NotificationsController(BaseController): """REST Controller styled on the Atom Publishing Protocol""" # To properly map this controller, ensure your config/routing.py @@ -27,7 +29,6 @@ def __before__(self): super(NotificationsController, self).__before__() - def index(self, format='html'): """GET /_admin/notifications: All items in the collection""" # url('notifications') @@ -36,6 +37,16 @@ .get_for_user(self.rhodecode_user.user_id) return render('admin/notifications/notifications.html') + def mark_all_read(self): + if request.environ.get('HTTP_X_PARTIAL_XHR'): + nm = NotificationModel() + # mark all read + nm.mark_all_read_for_user(self.rhodecode_user.user_id) + Session.commit() + c.user = self.rhodecode_user + c.notifications = nm.get_for_user(self.rhodecode_user.user_id) + return render('admin/notifications/notifications_data.html') + def create(self): """POST /_admin/notifications: Create a new item""" # url('notifications')
--- a/rhodecode/model/notification.py Mon Dec 19 00:12:50 2011 +0200 +++ b/rhodecode/model/notification.py Mon Dec 19 02:31:22 2011 +0200 @@ -134,6 +134,12 @@ user = self.__get_user(user) return user.notifications + def mark_all_read_for_user(self, user): + user = self.__get_user(user) + UserNotification.query()\ + .filter(UserNotification.read==False)\ + .update({'read': True}) + def get_unread_cnt_for_user(self, user): user = self.__get_user(user) return UserNotification.query()\
--- a/rhodecode/templates/admin/notifications/notifications.html Mon Dec 19 00:12:50 2011 +0200 +++ b/rhodecode/templates/admin/notifications/notifications.html Mon Dec 19 02:31:22 2011 +0200 @@ -24,39 +24,22 @@ </li> </ul> </div> - % if c.notifications: - <% - unread = lambda n:{False:'unread'}.get(n) - %> - <div class="table"> - <div class="notification-list"> - %for notification in c.notifications: - <div id="notification_${notification.notification.notification_id}" class="container ${unread(notification.read)}"> - <div class="notification-header"> - <div class="gravatar"> - <img alt="gravatar" src="${h.gravatar_url(h.email(notification.notification.created_by_user.email),24)}"/> - </div> - <div class="desc ${unread(notification.read)}"> - <a href="${url('notification', notification_id=notification.notification.notification_id)}">${notification.notification.description}</a> - </div> - <div class="delete-notifications"> - <span id="${notification.notification.notification_id}" class="delete-notification delete_icon action"></span> - </div> - </div> - <div class="notification-subject">${h.literal(notification.notification.subject)}</div> - </div> - %endfor - </div> - </div> - %else: - <div class="table">${_('No notifications here yet')}</div> - %endif + <div style="padding:10px 15px;text-align: right"> + <span id='mark_all_read' class="ui-btn">${_('Mark all read')}</span> + </div> + <div id='notification_data'> + <%include file='notifications_data.html'/> + </div> </div> <script type="text/javascript"> var url = "${url('notification', notification_id='__NOTIFICATION_ID__')}"; - YUE.on(YUQ('.delete-notification'),'click',function(e){ - var notification_id = e.currentTarget.id; - deleteNotification(url,notification_id) - }) +YUE.on(YUQ('.delete-notification'),'click',function(e){ + var notification_id = e.currentTarget.id; + deleteNotification(url,notification_id) +}) + YUE.on('mark_all_read','click',function(e){ + var url = "${h.url('notifications_mark_all_read')}"; + ypjax(url,'notification_data',function(){YUD.get('notification_counter').innerHTML=0}); + }) </script> </%def>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/templates/admin/notifications/notifications_data.html Mon Dec 19 02:31:22 2011 +0200 @@ -0,0 +1,28 @@ + +% if c.notifications: +<% +unread = lambda n:{False:'unread'}.get(n) +%> +<div class="table"> + <div class="notification-list"> + %for notification in c.notifications: + <div id="notification_${notification.notification.notification_id}" class="container ${unread(notification.read)}"> + <div class="notification-header"> + <div class="gravatar"> + <img alt="gravatar" src="${h.gravatar_url(h.email(notification.notification.created_by_user.email),24)}"/> + </div> + <div class="desc ${unread(notification.read)}"> + <a href="${url('notification', notification_id=notification.notification.notification_id)}">${notification.notification.description}</a> + </div> + <div class="delete-notifications"> + <span id="${notification.notification.notification_id}" class="delete-notification delete_icon action"></span> + </div> + </div> + <div class="notification-subject">${h.literal(notification.notification.subject)}</div> + </div> + %endfor + </div> +</div> +%else: + <div class="table">${_('No notifications here yet')}</div> +%endif \ No newline at end of file
--- a/rhodecode/templates/base/base.html Mon Dec 19 00:12:50 2011 +0200 +++ b/rhodecode/templates/base/base.html Mon Dec 19 02:31:22 2011 +0200 @@ -53,7 +53,7 @@ ${h.link_to(c.rhodecode_user.username,h.url('admin_settings_my_account'),title='%s %s'%(c.rhodecode_user.name,c.rhodecode_user.lastname))} </div> <div class="notifications"> - <a href="${h.url('notifications')}">${c.unread_notifications}</a> + <a id="notification_counter" href="${h.url('notifications')}">${c.unread_notifications}</a> </div> %endif </div>