diff --git a/kallithea/config/routing.py b/kallithea/config/routing.py --- a/kallithea/config/routing.py +++ b/kallithea/config/routing.py @@ -361,24 +361,6 @@ def make_map(config): m.connect("my_account_api_keys_delete", "/my_account/api_keys/delete", action="my_account_api_keys_delete", conditions=dict(method=["POST"])) - # NOTIFICATION REST ROUTES - with rmap.submapper(path_prefix=ADMIN_PREFIX, - controller='admin/notifications') as m: - 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("notification_update", "/notifications/{notification_id}/update", - action="update", conditions=dict(method=["POST"])) - m.connect("notification_delete", "/notifications/{notification_id}/delete", - action="delete", conditions=dict(method=["POST"])) - m.connect("notification", "/notifications/{notification_id}", - action="show", conditions=dict(method=["GET"])) - m.connect("formatted_notification", "/notifications/{notification_id}.{format}", - action="show", conditions=dict(method=["GET"])) - # ADMIN GIST with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/gists') as m: diff --git a/kallithea/controllers/admin/notifications.py b/kallithea/controllers/admin/notifications.py deleted file mode 100644 --- a/kallithea/controllers/admin/notifications.py +++ /dev/null @@ -1,139 +0,0 @@ -# -*- coding: utf-8 -*- -# 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 . -""" -kallithea.controllers.admin.notifications -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -notifications controller for Kallithea - -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Nov 23, 2010 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. -:license: GPLv3, see LICENSE.md for more details. -""" - -import logging -import traceback - -from tg import request -from tg import tmpl_context as c -from webob.exc import HTTPBadRequest, HTTPForbidden - -from kallithea.model.db import Notification -from kallithea.model.notification import NotificationModel -from kallithea.model.meta import Session -from kallithea.lib.auth import LoginRequired -from kallithea.lib.base import BaseController, render -from kallithea.lib import helpers as h -from kallithea.lib.page import Page -from kallithea.lib.utils2 import safe_int - - -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 - # file has a resource setup: - # map.resource('notification', 'notifications', controller='_admin/notifications', - # path_prefix='/_admin', name_prefix='_admin_') - - @LoginRequired() - def _before(self, *args, **kwargs): - super(NotificationsController, self)._before(*args, **kwargs) - - def index(self, format='html'): - c.user = request.authuser - notif = NotificationModel().query_for_user(request.authuser.user_id, - filter_=request.GET.getall('type')) - - p = safe_int(request.GET.get('page'), 1) - c.notifications = Page(notif, page=p, items_per_page=10) - c.pull_request_type = Notification.TYPE_PULL_REQUEST - c.comment_type = [Notification.TYPE_CHANGESET_COMMENT, - Notification.TYPE_PULL_REQUEST_COMMENT] - - _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' - - 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(request.authuser.user_id, - filter_=request.GET.getall('type')) - Session().commit() - c.user = request.authuser - notif = nm.query_for_user(request.authuser.user_id, - filter_=request.GET.getall('type')) - c.notifications = Page(notif, page=1, items_per_page=10) - return render('admin/notifications/notifications_data.html') - - def update(self, notification_id): - try: - no = Notification.get(notification_id) - owner = all(un.user_id == request.authuser.user_id - for un in no.notifications_to_users) - if h.HasPermissionAny('hg.admin')() or owner: - # deletes only notification2user - NotificationModel().mark_read(request.authuser.user_id, no) - Session().commit() - return 'ok' - except Exception: - Session().rollback() - log.error(traceback.format_exc()) - raise HTTPBadRequest() - - def delete(self, notification_id): - try: - no = Notification.get(notification_id) - owner = any(un.user_id == request.authuser.user_id - for un in no.notifications_to_users) - if h.HasPermissionAny('hg.admin')() or owner: - # deletes only notification2user - NotificationModel().delete(request.authuser.user_id, no) - Session().commit() - return 'ok' - except Exception: - Session().rollback() - log.error(traceback.format_exc()) - raise HTTPBadRequest() - - def show(self, notification_id, format='html'): - notification = Notification.get_or_404(notification_id) - - unotification = NotificationModel() \ - .get_user_notification(request.authuser.user_id, notification) - - # if this association to user is not valid, we don't want to show - # this message - if unotification is None: - raise HTTPForbidden() - - if not unotification.read: - unotification.mark_as_read() - Session().commit() - - c.notification = notification - c.user = request.authuser - return render('admin/notifications/show_notification.html') diff --git a/kallithea/public/js/base.js b/kallithea/public/js/base.js --- a/kallithea/public/js/base.js +++ b/kallithea/public/js/base.js @@ -980,34 +980,6 @@ var getSelectionLink = function(e) { } }; -var deleteNotification = function(url, notification_id, callbacks){ - var success = function(o){ - $("#notification_"+notification_id).remove(); - _run_callbacks(callbacks); - }; - var failure = function(o){ - alert("deleteNotification failure"); - }; - var postData = {}; - var sUrl = url.replace('__NOTIFICATION_ID__',notification_id); - ajaxPOST(sUrl, postData, success, failure); -}; - -var readNotification = function(url, notification_id, callbacks){ - var success = function(o){ - var $obj = $("#notification_"+notification_id); - $obj.removeClass('list-group-item-warning'); - $obj.find('.read-notification').remove(); - _run_callbacks(callbacks); - }; - var failure = function(o){ - alert("readNotification failure"); - }; - var postData = {}; - var sUrl = url.replace('__NOTIFICATION_ID__',notification_id); - ajaxPOST(sUrl, postData, success, failure); -}; - /** * Autocomplete functionality */ diff --git a/kallithea/templates/admin/notifications/notifications.html b/kallithea/templates/admin/notifications/notifications.html deleted file mode 100644 --- a/kallithea/templates/admin/notifications/notifications.html +++ /dev/null @@ -1,58 +0,0 @@ -## -*- coding: utf-8 -*- -<%inherit file="/base/base.html"/> - -<%block name="title"> - ${_('My Notifications')} ${request.authuser.username} - - -<%def name="breadcrumbs_links()"> - ${_('My Notifications')} - - -<%block name="header_menu"> - ${self.menu('admin')} - - -<%def name="main()"> -
-
- ${self.breadcrumbs()} -
- -
- - %if c.notifications: - - %endif -
-
- <%include file='notifications_data.html'/> -
-
- - diff --git a/kallithea/templates/admin/notifications/notifications_data.html b/kallithea/templates/admin/notifications/notifications_data.html deleted file mode 100644 --- a/kallithea/templates/admin/notifications/notifications_data.html +++ /dev/null @@ -1,22 +0,0 @@ -%if c.notifications: - -
-%for notification in c.notifications: -
- - ${h.gravatar_div(notification.notification.created_by_user.email, size=24)} - ${notification.notification.description} - - - %if not notification.read: - - %endif - - -
-%endfor -
-${c.notifications.pager(controller='admin/notifications', **request.GET.mixed())} -%else: -
${_('No notifications here yet')}
-%endif diff --git a/kallithea/templates/admin/notifications/show_notification.html b/kallithea/templates/admin/notifications/show_notification.html deleted file mode 100644 --- a/kallithea/templates/admin/notifications/show_notification.html +++ /dev/null @@ -1,53 +0,0 @@ -## -*- coding: utf-8 -*- -<%inherit file="/base/base.html"/> - -<%block name="title"> - ${_('Show Notification')} ${request.authuser.username} - - -<%def name="breadcrumbs_links()"> - ${h.link_to(_('Notifications'),h.url('notifications'))} - » - ${_('Show Notification')} - - -<%block name="header_menu"> - ${self.menu('admin')} - - -<%def name="main()"> -
-
- ${self.breadcrumbs()} -
-
-
-
- ${h.gravatar_div(c.notification.created_by_user.email, size=24)} - - ${c.notification.description} - - -
-
- %if c.notification.subject: -
${h.literal(c.notification.subject)}
- %endif -
- %if c.notification.body: - ${h.render_w_mentions(c.notification.body)} - %endif -
-
-
-
-
- -