Mercurial > kallithea
annotate rhodecode/controllers/admin/notifications.py @ 4095:b59568e929ef
fixed password refill in login form when wrong password was given
It's better to not refill the passwords on wrong credentials given.
Standard behaviour on all pages are making the password blank
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 22 Jul 2013 16:01:07 +0200 |
parents | 13241a4075e9 |
children | ffd45b185016 |
rev | line source |
---|---|
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
1 # -*- coding: utf-8 -*- |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
2 """ |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
3 rhodecode.controllers.admin.notifications |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
5 |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
6 notifications controller for RhodeCode |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
7 |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
8 :created_on: Nov 23, 2010 |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
9 :author: marcink |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
12 """ |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
13 # This program is free software: you can redistribute it and/or modify |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
14 # it under the terms of the GNU General Public License as published by |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
15 # the Free Software Foundation, either version 3 of the License, or |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
16 # (at your option) any later version. |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
17 # |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
18 # This program is distributed in the hope that it will be useful, |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
21 # GNU General Public License for more details. |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
22 # |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
23 # You should have received a copy of the GNU General Public License |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
25 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
26 import logging |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
27 import traceback |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
28 |
1791
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
29 from pylons import request |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
30 from pylons import tmpl_context as c, url |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
31 from pylons.controllers.util import redirect, abort |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
32 |
3776
13241a4075e9
Unified the paginators for pylons and YUI.
Marcin Kuzminski <marcin@python-works.com>
parents:
3748
diff
changeset
|
33 from rhodecode.model.db import Notification |
13241a4075e9
Unified the paginators for pylons and YUI.
Marcin Kuzminski <marcin@python-works.com>
parents:
3748
diff
changeset
|
34 from rhodecode.model.notification import NotificationModel |
13241a4075e9
Unified the paginators for pylons and YUI.
Marcin Kuzminski <marcin@python-works.com>
parents:
3748
diff
changeset
|
35 from rhodecode.model.meta import Session |
13241a4075e9
Unified the paginators for pylons and YUI.
Marcin Kuzminski <marcin@python-works.com>
parents:
3748
diff
changeset
|
36 from rhodecode.lib.auth import LoginRequired, NotAnonymous |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
37 from rhodecode.lib.base import BaseController, render |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
38 from rhodecode.lib import helpers as h |
3776
13241a4075e9
Unified the paginators for pylons and YUI.
Marcin Kuzminski <marcin@python-works.com>
parents:
3748
diff
changeset
|
39 from rhodecode.lib.helpers import Page |
2845
6b176c679896
failsafe the GET `page` argument
Marcin Kuzminski <marcin@python-works.com>
parents:
2662
diff
changeset
|
40 from rhodecode.lib.utils2 import safe_int |
1723
64e91067b996
- refactoring to overcome poor usage of global pylons config
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
41 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
42 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
43 log = logging.getLogger(__name__) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
44 |
1791
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
45 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
46 class NotificationsController(BaseController): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
47 """REST Controller styled on the Atom Publishing Protocol""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
48 # To properly map this controller, ensure your config/routing.py |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
49 # file has a resource setup: |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1791
diff
changeset
|
50 # map.resource('notification', 'notifications', controller='_admin/notifications', |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
51 # path_prefix='/_admin', name_prefix='_admin_') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
52 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
53 @LoginRequired() |
1739
4a5b93b3bcdd
forbid notifications view for anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents:
1723
diff
changeset
|
54 @NotAnonymous() |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
55 def __before__(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
56 super(NotificationsController, self).__before__() |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
57 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
58 def index(self, format='html'): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
59 """GET /_admin/notifications: All items in the collection""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
60 # url('notifications') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
61 c.user = self.rhodecode_user |
2433
74f2910f7ad9
Added pull requests filter into notification inbox.
Marcin Kuzminski <marcin@python-works.com>
parents:
2190
diff
changeset
|
62 notif = NotificationModel().get_for_user(self.rhodecode_user.user_id, |
2503
d04243e932cc
Added filtering on inbox by comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2433
diff
changeset
|
63 filter_=request.GET.getall('type')) |
2845
6b176c679896
failsafe the GET `page` argument
Marcin Kuzminski <marcin@python-works.com>
parents:
2662
diff
changeset
|
64 |
3748
9d743ca9cede
usage of request.GET is now more consistent
Marcin Kuzminski <marcin@python-works.com>
parents:
3625
diff
changeset
|
65 p = safe_int(request.GET.get('page', 1), 1) |
2190
64f7cf8f6a33
notification inbox improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
66 c.notifications = Page(notif, page=p, items_per_page=10) |
2433
74f2910f7ad9
Added pull requests filter into notification inbox.
Marcin Kuzminski <marcin@python-works.com>
parents:
2190
diff
changeset
|
67 c.pull_request_type = Notification.TYPE_PULL_REQUEST |
2503
d04243e932cc
Added filtering on inbox by comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2433
diff
changeset
|
68 c.comment_type = [Notification.TYPE_CHANGESET_COMMENT, |
d04243e932cc
Added filtering on inbox by comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2433
diff
changeset
|
69 Notification.TYPE_PULL_REQUEST_COMMENT] |
2519
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
70 |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
71 _current_filter = request.GET.getall('type') |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
72 c.current_filter = 'all' |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
73 if _current_filter == [c.pull_request_type]: |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
74 c.current_filter = 'pull_request' |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
75 elif _current_filter == c.comment_type: |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
76 c.current_filter = 'comment' |
f8742e1acf08
add highlight of current filter in notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2503
diff
changeset
|
77 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
78 return render('admin/notifications/notifications.html') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
79 |
1791
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
80 def mark_all_read(self): |
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
81 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
82 nm = NotificationModel() |
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
83 # mark all read |
2433
74f2910f7ad9
Added pull requests filter into notification inbox.
Marcin Kuzminski <marcin@python-works.com>
parents:
2190
diff
changeset
|
84 nm.mark_all_read_for_user(self.rhodecode_user.user_id, |
2503
d04243e932cc
Added filtering on inbox by comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2433
diff
changeset
|
85 filter_=request.GET.getall('type')) |
2662
91c442a489bb
sqlalchemy sessions cleanup in admin
Marcin Kuzminski <marcin@python-works.com>
parents:
2610
diff
changeset
|
86 Session().commit() |
1791
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
87 c.user = self.rhodecode_user |
2433
74f2910f7ad9
Added pull requests filter into notification inbox.
Marcin Kuzminski <marcin@python-works.com>
parents:
2190
diff
changeset
|
88 notif = nm.get_for_user(self.rhodecode_user.user_id, |
2503
d04243e932cc
Added filtering on inbox by comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2433
diff
changeset
|
89 filter_=request.GET.getall('type')) |
2190
64f7cf8f6a33
notification inbox improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
90 c.notifications = Page(notif, page=1, items_per_page=10) |
1791
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
91 return render('admin/notifications/notifications_data.html') |
2aee0dc1784e
mark all read button for notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
1739
diff
changeset
|
92 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
93 def create(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
94 """POST /_admin/notifications: Create a new item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
95 # url('notifications') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
96 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
97 def new(self, format='html'): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
98 """GET /_admin/notifications/new: Form to create a new item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
99 # url('new_notification') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
100 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
101 def update(self, notification_id): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
102 """PUT /_admin/notifications/id: Update an existing item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
103 # Forms posted to this method should contain a hidden field: |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
104 # <input type="hidden" name="_method" value="PUT" /> |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
105 # Or using helpers: |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
106 # h.form(url('notification', notification_id=ID), |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
107 # method='put') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
108 # url('notification', notification_id=ID) |
2610
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
109 try: |
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
110 no = Notification.get(notification_id) |
3141
a45191e7c7bb
access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents:
2845
diff
changeset
|
111 owner = all(un.user.user_id == c.rhodecode_user.user_id |
a45191e7c7bb
access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents:
2845
diff
changeset
|
112 for un in no.notifications_to_users) |
2610
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
113 if h.HasPermissionAny('hg.admin')() or owner: |
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
114 NotificationModel().mark_read(c.rhodecode_user.user_id, no) |
2662
91c442a489bb
sqlalchemy sessions cleanup in admin
Marcin Kuzminski <marcin@python-works.com>
parents:
2610
diff
changeset
|
115 Session().commit() |
2610
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
116 return 'ok' |
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
117 except Exception: |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
118 Session().rollback() |
2610
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
119 log.error(traceback.format_exc()) |
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
120 return 'fail' |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
121 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
122 def delete(self, notification_id): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
123 """DELETE /_admin/notifications/id: Delete an existing item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
124 # Forms posted to this method should contain a hidden field: |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
125 # <input type="hidden" name="_method" value="DELETE" /> |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
126 # Or using helpers: |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
127 # h.form(url('notification', notification_id=ID), |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
128 # method='delete') |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
129 # url('notification', notification_id=ID) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
130 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
131 try: |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
132 no = Notification.get(notification_id) |
3141
a45191e7c7bb
access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents:
2845
diff
changeset
|
133 owner = all(un.user.user_id == c.rhodecode_user.user_id |
a45191e7c7bb
access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents:
2845
diff
changeset
|
134 for un in no.notifications_to_users) |
2610
3fdf7c3be2c9
added mark as read for single notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2519
diff
changeset
|
135 if h.HasPermissionAny('hg.admin')() or owner: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
136 NotificationModel().delete(c.rhodecode_user.user_id, no) |
2662
91c442a489bb
sqlalchemy sessions cleanup in admin
Marcin Kuzminski <marcin@python-works.com>
parents:
2610
diff
changeset
|
137 Session().commit() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
138 return 'ok' |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
139 except Exception: |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
140 Session().rollback() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
141 log.error(traceback.format_exc()) |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
142 return 'fail' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
143 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
144 def show(self, notification_id, format='html'): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
145 """GET /_admin/notifications/id: Show a specific item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
146 # url('notification', notification_id=ID) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
147 c.user = self.rhodecode_user |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
148 no = Notification.get(notification_id) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
149 |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
150 owner = any(un.user.user_id == c.rhodecode_user.user_id |
3141
a45191e7c7bb
access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents:
2845
diff
changeset
|
151 for un in no.notifications_to_users) |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
152 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
153 if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner): |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
154 unotification = NotificationModel()\ |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
155 .get_user_notification(c.user.user_id, no) |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
156 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
157 # if this association to user is not valid, we don't want to show |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
158 # this message |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
159 if unotification: |
3625
260a7a01b054
follow Python conventions for boolean values
Mads Kiilerich <madski@unity3d.com>
parents:
3428
diff
changeset
|
160 if not unotification.read: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
161 unotification.mark_as_read() |
2662
91c442a489bb
sqlalchemy sessions cleanup in admin
Marcin Kuzminski <marcin@python-works.com>
parents:
2610
diff
changeset
|
162 Session().commit() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
163 c.notification = no |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
164 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
165 return render('admin/notifications/show_notification.html') |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
166 |
3428
edb9a42def31
fix to strict permission check on notification messages
Marcin Kuzminski <marcin@python-works.com>
parents:
3141
diff
changeset
|
167 return abort(403) |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
168 |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
169 def edit(self, notification_id, format='html'): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
170 """GET /_admin/notifications/id/edit: Form to edit an existing item""" |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
171 # url('edit_notification', notification_id=ID) |