[PATCH 6 of 9] controllers/templates: remove UI notification feature

Thomas De Schampheleire patrickdepinguin at gmail.com
Thu Dec 6 08:14:26 UTC 2018


# HG changeset patch
# User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
# Date 1544041299 -3600
#      Wed Dec 05 21:21:39 2018 +0100
# Node ID 3ececf31e315c414f49a19ed0c5f7544d5c305bb
# Parent  c88888c333e621e32f8f6f09fb45ce43cc57c38a
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 <http://www.gnu.org/licenses/>.
-"""
-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}
-</%block>
-
-<%def name="breadcrumbs_links()">
-    ${_('My Notifications')}
-</%def>
-
-<%block name="header_menu">
-    ${self.menu('admin')}
-</%block>
-
-<%def name="main()">
-<div class="panel panel-primary">
-    <div class="panel-heading clearfix">
-        ${self.breadcrumbs()}
-    </div>
-
-    <div class="panel-body">
-      <div class="pull-left">
-            <a class="btn btn-default btn-sm" href="${h.url.current()}">${_('All')}</a>
-            <a class="btn btn-default btn-sm" href="${h.url.current(type=c.comment_type)}">${_('Comments')}</a>
-            <a class="btn btn-default btn-sm" href="${h.url.current(type=c.pull_request_type)}">${_('Pull Requests')}</a>
-      </div>
-      %if c.notifications:
-        <button type="button" id='mark_all_read' class="btn btn-default btn-sm pull-right">${_('Mark All Read')}</button>
-      %endif
-    </div>
-    <div id="notification_data" class="panel-body">
-        <%include file='notifications_data.html'/>
-    </div>
-</div>
-<script type="text/javascript">
-var url_delete = ${h.js(url('notification_delete', notification_id='__NOTIFICATION_ID__'))};
-var url_read = ${h.js(url('notification_update', notification_id='__NOTIFICATION_ID__'))};
-var run = function(){
-  $('.delete-notification').click(function(e){
-    var notification_id = e.currentTarget.id;
-    deleteNotification(url_delete,notification_id);
-  });
-  $('.read-notification').click(function(e){
-    var notification_id = e.currentTarget.id;
-    readNotification(url_read,notification_id);
-  });
-}
-run();
-$('#mark_all_read').click(function(){
-    var url = ${h.js(h.url('notifications_mark_all_read', **request.GET.mixed()))};
-    asynchtml(url, $('#notification_data'), function(){run();});
-});
-
-var current_filter = ${h.js(c.current_filter)};
-$('#'+current_filter).addClass('active');
-</script>
-</%def>
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:
-
-<div class="list-group">
-%for notification in c.notifications:
-  <div id="notification_${notification.notification.notification_id}" class="list-group-item ${'' if notification.read else 'list-group-item-warning'} clearfix">
-      <span class="pull-left">
-        ${h.gravatar_div(notification.notification.created_by_user.email, size=24)}
-        <a href="${url('notification', notification_id=notification.notification.notification_id)}">${notification.notification.description}</a>
-      </span>
-      <span class="pull-right">
-        %if not notification.read:
-          <button type="button" id="${notification.notification.notification_id}" class="btn btn-default btn-xs read-notification"><i class="icon-ok"></i>${_('Mark as read')}</button>
-        %endif
-        <button type="button" id="${notification.notification.notification_id}" class="btn btn-default btn-xs delete-notification"><i class="icon-trashcan"></i>${_('Delete')}</button>
-      </span>
-  </div>
-%endfor
-</div>
-${c.notifications.pager(controller='admin/notifications', **request.GET.mixed())}
-%else:
-    <div>${_('No notifications here yet')}</div>
-%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}
-</%block>
-
-<%def name="breadcrumbs_links()">
-    ${h.link_to(_('Notifications'),h.url('notifications'))}
-    »
-    ${_('Show Notification')}
-</%def>
-
-<%block name="header_menu">
-    ${self.menu('admin')}
-</%block>
-
-<%def name="main()">
-<div class="panel panel-primary">
-    <div class="panel-heading clearfix">
-        ${self.breadcrumbs()}
-    </div>
-    <div class="panel-body">
-      <div id="notification_${c.notification.notification_id}">
-        <div class="clearfix">
-          ${h.gravatar_div(c.notification.created_by_user.email, size=24)}
-          <span class="pull-left">
-              ${c.notification.description}
-          </span>
-          <button type="button" id="${c.notification.notification_id}" class="delete-notification btn btn-default pull-right"><i class="icon-trashcan"></i>${_('Delete')}</button>
-        </div>
-        <div>
-            %if c.notification.subject:
-                <div class="h4">${h.literal(c.notification.subject)}</div>
-            %endif
-            <div class="well">
-            %if c.notification.body:
-                ${h.render_w_mentions(c.notification.body)}
-            %endif
-            </div>
-        </div>
-      </div>
-    </div>
-</div>
-<script type="text/javascript">
-var url = ${h.js(url('notification_delete', notification_id='__NOTIFICATION_ID__'))};
-var main = ${h.js(url('notifications'))};
-   $('.delete-notification').click(function(e){
-       var notification_id = e.currentTarget.id;
-       deleteNotification(url,notification_id,[function(){window.location=main}]);
-   });
-</script>
-</%def>


More information about the kallithea-general mailing list