Mercurial > kallithea
changeset 2433:74f2910f7ad9 codereview
Added pull requests filter into notification inbox.
- Mark all read now also marks only filtered results
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 10 Jun 2012 00:08:29 +0200 |
parents | d3ac7491a5c8 |
children | f29469677319 |
files | rhodecode/controllers/admin/notifications.py rhodecode/model/notification.py rhodecode/templates/admin/notifications/notifications.html |
diffstat | 3 files changed, 44 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/notifications.py Sat Jun 09 20:23:48 2012 +0200 +++ b/rhodecode/controllers/admin/notifications.py Sun Jun 10 00:08:29 2012 +0200 @@ -60,19 +60,23 @@ """GET /_admin/notifications: All items in the collection""" # url('notifications') c.user = self.rhodecode_user - notif = NotificationModel().get_for_user(self.rhodecode_user.user_id) + notif = NotificationModel().get_for_user(self.rhodecode_user.user_id, + filter_=request.GET) p = int(request.params.get('page', 1)) c.notifications = Page(notif, page=p, items_per_page=10) + c.pull_request_type = Notification.TYPE_PULL_REQUEST 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) + nm.mark_all_read_for_user(self.rhodecode_user.user_id, + filter_=request.GET) Session.commit() c.user = self.rhodecode_user - notif = nm.get_for_user(self.rhodecode_user.user_id) + notif = nm.get_for_user(self.rhodecode_user.user_id, + filter_=request.GET) c.notifications = Page(notif, page=1, items_per_page=10) return render('admin/notifications/notifications_data.html')
--- a/rhodecode/model/notification.py Sat Jun 09 20:23:48 2012 +0200 +++ b/rhodecode/model/notification.py Sun Jun 10 00:08:29 2012 +0200 @@ -36,6 +36,7 @@ from rhodecode.lib import helpers as h from rhodecode.model import BaseModel from rhodecode.model.db import Notification, User, UserNotification +from sqlalchemy.orm import joinedload log = logging.getLogger(__name__) @@ -136,15 +137,41 @@ log.error(traceback.format_exc()) raise - def get_for_user(self, user): + def get_for_user(self, user, filter_=None): + """ + Get mentions for given user, filter them if filter dict is given + + :param user: + :type user: + :param filter: + """ user = self._get_user(user) - return user.notifications + + q = UserNotification.query()\ + .filter(UserNotification.user == user)\ + .join((Notification, UserNotification.notification_id == + Notification.notification_id)) + + if filter_: + q = q.filter(Notification.type_ == filter_.get('type')) - def mark_all_read_for_user(self, user): + return q.all() + + def mark_all_read_for_user(self, user, filter_=None): user = self._get_user(user) - UserNotification.query()\ + q = UserNotification.query()\ + .filter(UserNotification.user == user)\ .filter(UserNotification.read == False)\ - .update({'read': True}) + .join((Notification, UserNotification.notification_id == + Notification.notification_id)) + if filter_: + q = q.filter(Notification.type_ == filter_.get('type')) + + # this is a little inefficient but sqlalchemy doesn't support + # update on joined tables :( + for obj in q.all(): + obj.read = True + self.sa.add(obj) def get_unread_cnt_for_user(self, user): user = self._get_user(user) @@ -176,7 +203,8 @@ notification.TYPE_CHANGESET_COMMENT: _('commented on commit'), notification.TYPE_MESSAGE: _('sent message'), notification.TYPE_MENTION: _('mentioned you'), - notification.TYPE_REGISTRATION: _('registered in RhodeCode') + notification.TYPE_REGISTRATION: _('registered in RhodeCode'), + notification.TYPE_PULL_REQUEST: _('opened new pull request') } tmpl = "%(user)s %(action)s %(when)s"
--- a/rhodecode/templates/admin/notifications/notifications.html Sat Jun 09 20:23:48 2012 +0200 +++ b/rhodecode/templates/admin/notifications/notifications.html Sun Jun 10 00:08:29 2012 +0200 @@ -26,8 +26,8 @@ </div> %if c.notifications: <div style="padding:14px 18px;text-align: right;float:left"> - <span id='all' class="ui-btn">${_('All')}</span> - <span id='pull_request' class="ui-btn">${_('Pull requests')}</span> + <span id='all' class="ui-btn"><a href="${h.url.current()}">${_('All')}</a></span> + <span id='pull_request' class="ui-btn"><a href="${h.url.current(type=c.pull_request_type)}">${_('Pull requests')}</a></span> </div> <div style="padding:14px 18px;text-align: right;float:right"> <span id='mark_all_read' class="ui-btn">${_('Mark all read')}</span> @@ -44,7 +44,7 @@ deleteNotification(url_del,notification_id) }) YUE.on('mark_all_read','click',function(e){ - var url = "${h.url('notifications_mark_all_read')}"; + var url = "${h.url('notifications_mark_all_read', **request.GET)}"; ypjax(url,'notification_data',function(){ var notification_counter = YUD.get('notification_counter'); if(notification_counter){