##// END OF EJS Templates
further cleanup of UsersGroup...
further cleanup of UsersGroup Renaming some names ... but trying not to change API or database scheme.

File last commit:

r3141:a45191e7 beta
r3417:fa6ba672 beta
Show More
notifications.py
172 lines | 6.8 KiB | text/x-python | PythonLexer
2012 copyrights
r1824 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.admin.notifications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
notifications controller for RhodeCode
:created_on: Nov 23, 2010
:author: marcink
:copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
"""
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
Notification system improvements...
r1712 import logging
Tests updates, Session refactoring
r1713 import traceback
Notification system improvements...
r1712
mark all read button for notifications
r1791 from pylons import request
Tests updates, Session refactoring
r1713 from pylons import tmpl_context as c, url
- refactoring to overcome poor usage of global pylons config...
r1723 from pylons.controllers.util import redirect
Notification system improvements...
r1712
notification inbox improvements...
r2190 from webhelpers.paginate import Page
Notification system improvements...
r1712 from rhodecode.lib.base import BaseController, render
from rhodecode.model.db import Notification
from rhodecode.model.notification import NotificationModel
forbid notifications view for anonymous users
r1739 from rhodecode.lib.auth import LoginRequired, NotAnonymous
Notification system improvements...
r1712 from rhodecode.lib import helpers as h
Tests updates, Session refactoring
r1713 from rhodecode.model.meta import Session
failsafe the GET `page` argument
r2845 from rhodecode.lib.utils2 import safe_int
- refactoring to overcome poor usage of global pylons config...
r1723
Notification system improvements...
r1712
log = logging.getLogger(__name__)
mark all read button for notifications
r1791
Notification system improvements...
r1712 class NotificationsController(BaseController):
"""REST Controller styled on the Atom Publishing Protocol"""
# To properly map this controller, ensure your config/routing.py
# file has a resource setup:
auto white-space removal
r1818 # map.resource('notification', 'notifications', controller='_admin/notifications',
Notification system improvements...
r1712 # path_prefix='/_admin', name_prefix='_admin_')
@LoginRequired()
forbid notifications view for anonymous users
r1739 @NotAnonymous()
Notification system improvements...
r1712 def __before__(self):
super(NotificationsController, self).__before__()
def index(self, format='html'):
"""GET /_admin/notifications: All items in the collection"""
# url('notifications')
c.user = self.rhodecode_user
Added pull requests filter into notification inbox....
r2433 notif = NotificationModel().get_for_user(self.rhodecode_user.user_id,
Added filtering on inbox by comments
r2503 filter_=request.GET.getall('type'))
failsafe the GET `page` argument
r2845
p = safe_int(request.params.get('page', 1), 1)
notification inbox improvements...
r2190 c.notifications = Page(notif, page=p, items_per_page=10)
Added pull requests filter into notification inbox....
r2433 c.pull_request_type = Notification.TYPE_PULL_REQUEST
Added filtering on inbox by comments
r2503 c.comment_type = [Notification.TYPE_CHANGESET_COMMENT,
Notification.TYPE_PULL_REQUEST_COMMENT]
add highlight of current filter in notifications
r2519
_current_filter = request.GET.getall('type')
c.current_filter = 'all'
if _current_filter == [c.pull_request_type]:
c.current_filter = 'pull_request'
elif _current_filter == c.comment_type:
c.current_filter = 'comment'
Notification system improvements...
r1712 return render('admin/notifications/notifications.html')
mark all read button for notifications
r1791 def mark_all_read(self):
if request.environ.get('HTTP_X_PARTIAL_XHR'):
nm = NotificationModel()
# mark all read
Added pull requests filter into notification inbox....
r2433 nm.mark_all_read_for_user(self.rhodecode_user.user_id,
Added filtering on inbox by comments
r2503 filter_=request.GET.getall('type'))
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
mark all read button for notifications
r1791 c.user = self.rhodecode_user
Added pull requests filter into notification inbox....
r2433 notif = nm.get_for_user(self.rhodecode_user.user_id,
Added filtering on inbox by comments
r2503 filter_=request.GET.getall('type'))
notification inbox improvements...
r2190 c.notifications = Page(notif, page=1, items_per_page=10)
mark all read button for notifications
r1791 return render('admin/notifications/notifications_data.html')
Notification system improvements...
r1712 def create(self):
"""POST /_admin/notifications: Create a new item"""
# url('notifications')
def new(self, format='html'):
"""GET /_admin/notifications/new: Form to create a new item"""
# url('new_notification')
def update(self, notification_id):
"""PUT /_admin/notifications/id: Update an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
# h.form(url('notification', notification_id=ID),
# method='put')
# url('notification', notification_id=ID)
added mark as read for single notifications
r2610 try:
no = Notification.get(notification_id)
Mads Kiilerich
access control: fix owner checks - they were always true...
r3141 owner = all(un.user.user_id == c.rhodecode_user.user_id
for un in no.notifications_to_users)
added mark as read for single notifications
r2610 if h.HasPermissionAny('hg.admin')() or owner:
NotificationModel().mark_read(c.rhodecode_user.user_id, no)
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
added mark as read for single notifications
r2610 return 'ok'
except Exception:
Session.rollback()
log.error(traceback.format_exc())
return 'fail'
Notification system improvements...
r1712
def delete(self, notification_id):
"""DELETE /_admin/notifications/id: Delete an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="DELETE" />
# Or using helpers:
# h.form(url('notification', notification_id=ID),
# method='delete')
# url('notification', notification_id=ID)
Tests updates, Session refactoring
r1713 try:
no = Notification.get(notification_id)
Mads Kiilerich
access control: fix owner checks - they were always true...
r3141 owner = all(un.user.user_id == c.rhodecode_user.user_id
for un in no.notifications_to_users)
added mark as read for single notifications
r2610 if h.HasPermissionAny('hg.admin')() or owner:
Tests updates, Session refactoring
r1713 NotificationModel().delete(c.rhodecode_user.user_id, no)
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
Tests updates, Session refactoring
r1713 return 'ok'
except Exception:
Session.rollback()
log.error(traceback.format_exc())
Notification system improvements...
r1712 return 'fail'
def show(self, notification_id, format='html'):
"""GET /_admin/notifications/id: Show a specific item"""
# url('notification', notification_id=ID)
c.user = self.rhodecode_user
Tests updates, Session refactoring
r1713 no = Notification.get(notification_id)
Mads Kiilerich
access control: fix owner checks - they were always true...
r3141 owner = all(un.user.user_id == c.rhodecode_user.user_id
for un in no.notifications_to_users)
Tests updates, Session refactoring
r1713 if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner):
unotification = NotificationModel()\
.get_user_notification(c.user.user_id, no)
Notification system improvements...
r1712
Tests updates, Session refactoring
r1713 # if this association to user is not valid, we don't want to show
# this message
if unotification:
if unotification.read is False:
unotification.mark_as_read()
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
Tests updates, Session refactoring
r1713 c.notification = no
Notification system improvements...
r1712
Tests updates, Session refactoring
r1713 return render('admin/notifications/show_notification.html')
Notification system improvements...
r1712
Tests updates, Session refactoring
r1713 return redirect(url('notifications'))
Notification system improvements...
r1712
def edit(self, notification_id, format='html'):
"""GET /_admin/notifications/id/edit: Form to edit an existing item"""
# url('edit_notification', notification_id=ID)