changeset 7446:2583ab8d9411

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.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Wed, 05 Dec 2018 21:21:39 +0100
parents a33d1337db05
children cd6c577ade97
files kallithea/config/routing.py kallithea/controllers/admin/notifications.py kallithea/public/js/base.js kallithea/templates/admin/notifications/notifications.html kallithea/templates/admin/notifications/notifications_data.html kallithea/templates/admin/notifications/show_notification.html
diffstat 6 files changed, 0 insertions(+), 318 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/config/routing.py	Wed Dec 05 07:40:00 2018 +0100
+++ b/kallithea/config/routing.py	Wed Dec 05 21:21:39 2018 +0100
@@ -361,24 +361,6 @@
         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:
--- a/kallithea/controllers/admin/notifications.py	Wed Dec 05 07:40:00 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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')
--- a/kallithea/public/js/base.js	Wed Dec 05 07:40:00 2018 +0100
+++ b/kallithea/public/js/base.js	Wed Dec 05 21:21:39 2018 +0100
@@ -980,34 +980,6 @@
     }
 };
 
-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
  */
--- a/kallithea/templates/admin/notifications/notifications.html	Wed Dec 05 07:40:00 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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>
--- a/kallithea/templates/admin/notifications/notifications_data.html	Wed Dec 05 07:40:00 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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
--- a/kallithea/templates/admin/notifications/show_notification.html	Wed Dec 05 07:40:00 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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'))}
-    &raquo;
-    ${_('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>