# HG changeset patch # User Thomas De Schampheleire # Date 2018-12-05 21:21:39 # Node ID 2583ab8d941126348e27507c6388aedde028f51f # Parent a33d1337db054cea707fe8159093ce57817ee894 controllers/templates: remove UI notification feature This commit is part of the removal of the UI notification feature from Kallithea, which is not deemed useful in its current form. Only email notifications are preserved. 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 -
-
-
-
-
- -