Ticket #725: notification.patch

File notification.patch, 11.1 kB (added by imme, 2 years ago)
  • 0.10/tracdiscussion/api.py

    old new  
    11# -*- coding: utf8 -*- 
    2  
     2from tracdiscussion.notification import DiscussionNotifyEmail 
    33from trac.core import * 
    44from trac.web.chrome import add_stylesheet 
    55from trac.wiki import wiki_to_html, wiki_to_oneliner 
     
    735735        sql = "UPDATE forum_group SET name = %s, description = %s WHERE id = %s" 
    736736        self.log.debug(sql % (name, description, group)) 
    737737        cursor.execute(sql, (name, description, group)) 
     738        self._get_notifier().notify('group_edited', group, name,  
     739                                    description=description) 
    738740 
    739741    def edit_forum(self, cursor, forum, name, subject, description, moderators, 
    740742      group): 
     
    747749          group, forum)) 
    748750        cursor.execute(sql, (name, subject, description, moderators, group, 
    749751          forum)) 
     752        self._get_notifier().notify('forum_edited', forum, name, subject=subject,  
     753                description=description, moderators=moderators, group=group, 
     754                cursor=cursor) 
    750755 
     756 
    751757    def edit_topic(self, cursor, topic, forum, subject, body): 
    752758        sql = "UPDATE topic SET forum = %s, subject = %s, body = %s WHERE id" \ 
    753759          " = %s" 
    754760        self.log.debug(sql % (forum, subject, body, topic)) 
    755761        cursor.execute(sql, (forum, subject, body, topic)) 
     762        self._get_notifier().notify('topic_edited', topic, subject=subject, 
     763                                    body=body, forum=forum, cursor=cursor) 
    756764 
    757765    def edit_message(self, cursor, message, forum, topic, replyto, body): 
    758766        sql = "UPDATE message SET forum = %s, topic = %s, replyto = %s, body" \ 
    759767          " = %s WHERE id = %s" 
    760768        self.log.debug(sql % (forum, topic, replyto, body, message)) 
    761769        cursor.execute(sql, (forum, topic, replyto, body, message)) 
     770        self._get_notifier().notify('message_edited', message, topic=topic, 
     771                    body=body, forum=forum, replyto=replyto, cursor=cursor) 
    762772 
    763773    # Get list functions 
    764774 
     
    919929        sql = "INSERT INTO forum_group (name, description) VALUES (%s, %s)" 
    920930        self.log.debug(sql % (name, description)) 
    921931        cursor.execute(sql, (name, description)) 
     932        id = self._get_db().get_last_id(cursor, 'forum_group') 
     933        self._get_notifier().notify('group_added', id, name,  
     934                                    description=description) 
    922935 
    923936    def add_forum(self, cursor, name, author, subject, description, moderators, 
    924937      group): 
     
    931944          subject, description, group)) 
    932945        cursor.execute(sql, (name, author, str(int(time.time())), moderators, 
    933946          subject, description, group)) 
     947        id = self._get_db().get_last_id(cursor, 'forum') 
     948        self._get_notifier().notify('forum_added', id, name, author,  
     949                subject, description, moderators, group, cursor) 
    934950 
    935951    def add_topic(self, cursor, forum, subject, author, body): 
    936952        sql = "INSERT INTO topic (forum, time, author, subject, body) VALUES" \ 
    937953          " (%s, %s, %s, %s, %s)" 
    938954        self.log.debug(sql % (forum, int(time.time()), author, subject, body)) 
    939955        cursor.execute(sql, (forum, int(time.time()), author, subject, body)) 
     956        id = self._get_db().get_last_id(cursor, 'topic') 
     957        self._get_notifier().notify('topic_added', id, subject=subject, 
     958                        author=author, body=body, forum=forum, cursor=cursor) 
    940959 
    941960    def add_message(self, cursor, forum, topic, replyto, author, body): 
    942961        sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 
     
    945964          author, body)) 
    946965        cursor.execute(sql, (forum, topic, replyto, int(time.time()), 
    947966          author, body)) 
     967        id = self._get_db().get_last_id(cursor, 'message') 
     968        self._get_notifier().notify('message_added', id, topic=topic, 
     969                                    author=author, body=body, forum=forum, 
     970                                    replyto=replyto, cursor=cursor) 
    948971 
    949972    # Delete items functions 
    950973 
    951974    def delete_group(self, cursor, group): 
     975        self._get_notifier().notify('group_deleted', group, cursor=cursor) 
    952976        sql = "DELETE FROM forum_group WHERE id = %s" 
    953977        self.log.debug(sql % (group,)) 
    954978        cursor.execute(sql, (group,)) 
     
    957981        cursor.execute(sql, (group,)) 
    958982 
    959983    def delete_forum(self, cursor, forum): 
     984        self._get_notifier().notify('forum_deleted', forum, cursor=cursor) 
    960985        sql = "DELETE FROM message WHERE forum = %s" 
    961986        self.log.debug(sql % (forum,)) 
    962987        cursor.execute(sql, (forum,)) 
     
    971996        sql = "DELETE FROM message WHERE topic = %s" 
    972997        self.log.debug(sql % (topic,)) 
    973998        cursor.execute(sql, (topic,)) 
     999        self._get_notifier().notify('topic_deleted', topic, cursor=cursor) 
    9741000        sql = "DELETE FROM topic WHERE id = %s" 
    9751001        self.log.debug(sql % (topic,)) 
    9761002        cursor.execute(sql, (topic,)) 
     
    9811007        self.log.debug(sql % (message,)) 
    9821008        cursor.execute(sql, (message,)) 
    9831009        replies = [] 
     1010         
    9841011        for row in cursor: 
    9851012            replies.append(row[0]) 
    9861013 
     
    9891016            self.delete_message(cursor, reply) 
    9901017 
    9911018        # Delete message itself 
     1019        self._get_notifier().notify('message_deleted', message, cursor=cursor) 
    9921020        sql = "DELETE FROM message WHERE id = %s" 
    9931021        self.log.debug(sql % (message,)) 
    9941022        cursor.execute(sql, (message,)) 
     1023 
     1024    def _get_db(self): 
     1025        return self.env.get_db_cnx() 
     1026 
     1027    def _get_notifier(self): 
     1028        return DiscussionNotifyEmail(self) 
     1029     
  • 0.10/tracdiscussion/notification.py

    old new  
     1from trac.notification import NotifyEmail 
     2 
     3class DiscussionNotifyEmail(NotifyEmail): 
     4    template_name = "notification-body.cs" 
     5    href = None 
     6    discussion_api = None 
     7     
     8    def __init__(self, discussion_api): 
     9        NotifyEmail.__init__(self, discussion_api.env) 
     10        self.href = discussion_api.env.abs_href 
     11        self.discussion_api = discussion_api 
     12    def get_db_cnx(self): 
     13        if self.db_cnx == None: 
     14            self.db_cnx = self.env.get_db_cnx() 
     15        return self.db_cnx 
     16             
     17    def notify(self, action, id=None, name=None, author=None, subject=None,  
     18               description=None, moderators=None, group=None, cursor=None, 
     19               body=None, forum=None,replyto=None, topic=None): 
     20        item_type, action_type = action.split('_') 
     21        if item_type == 'forum': 
     22            if action_type == 'deleted': 
     23                name = self.discussion_api.get_forum(cursor, id)['name'] 
     24            else: 
     25                self.hdf.set_unescaped('forum_url', self.href.discussion(id)) 
     26                if not group == '0': 
     27                    self.hdf.set_unescaped('group_name',  
     28                       self.discussion_api.get_group(cursor, group)['name']) 
     29        elif action == 'group_deleted': 
     30            name = self.discussion_api.get_group(cursor, id)['name'] 
     31        elif item_type == 'topic': 
     32            if action_type == 'deleted': 
     33                topic_obj = self.discussion_api.get_topic(cursor, id) 
     34                subject = topic_obj['subject'] 
     35                forum = topic_obj['forum'] 
     36                body = topic_obj['body'] 
     37            else: 
     38                self.hdf.set_unescaped('topic_url',  
     39                       self.href.discussion(`forum` + '/' + `id`)) 
     40            name = subject 
     41        elif item_type == 'message': 
     42            if action_type == 'deleted': 
     43                message_obj = self.discussion_api.get_message(cursor, id) 
     44                forum = message_obj['forum'] 
     45                topic = message_obj['topic'] 
     46                body = message_obj['body'] 
     47            else: 
     48                self.hdf.setValue('message_url', 
     49                       self.href.discussion(`forum` + '/' + `topic` + '/'  
     50                                            + `id`) + '#' + `id`) 
     51            self.hdf.set_unescaped('topic_subject', 
     52                       self.discussion_api.get_topic(cursor, topic)['subject']) 
     53        if item_type == 'topic' or item_type == 'message': 
     54            self.hdf.set_unescaped('forum_name', 
     55                       self.discussion_api.get_forum(cursor, forum)['name']) 
     56             
     57        # Set remaining template data 
     58        self.hdf.set_unescaped('author', author) 
     59        self.hdf.set_unescaped('subject', subject) 
     60        self.hdf.set_unescaped('description', description) 
     61        self.hdf.set_unescaped('discussion_url', self.href.discussion()) 
     62        self.hdf.set_unescaped('body', body) 
     63        self.hdf.set_unescaped('forum', forum) 
     64        self.hdf.set_unescaped('group', group) 
     65        self.hdf.set_unescaped('topic', topic) 
     66        if moderators and len(moderators) > 0: 
     67            self.hdf.set_unescaped('moderators', moderators) 
     68        self.hdf.set_unescaped('action', action_type) 
     69        self.hdf.set_unescaped('name', name) 
     70        self.hdf.set_unescaped('id', id) 
     71        self.hdf.set_unescaped('item_type', item_type.capitalize()) 
     72         
     73        # Render subject and start notification 
     74        subject = self.hdf.render('notification-subject.cs') 
     75        NotifyEmail.notify(self, id, subject) 
     76 
     77    def get_recipients(self, resid): 
     78        return ([], []) 
  • 0.10/tracdiscussion/templates/notification-body.cs

    old new  
     1<?cs var:item_type ?> #<?cs var:id ?> <?cs var:action ?><?cs if:author ?> by <?cs var:author ?><?cs /if ?> 
     2 
     3<?cs if:(name && item_type != 'Topic') ?>Name: <?cs var:name ?> 
     4<?cs /if ?><?cs if:subject ?>Subject: <?cs var:subject ?> 
     5<?cs /if ?><?cs if:forum_name ?>Forum: <?cs var:forum_name ?> 
     6<?cs /if ?><?cs if:topic_subject ?>Topic: <?cs var:topic_subject ?> 
     7<?cs /if ?><?cs if:description ?>Description: <?cs var:description ?> 
     8<?cs /if ?><?cs if:moderators ?>Moderators: <?cs var:moderators ?> 
     9<?cs /if ?><?cs if:group_name ?>Group: <?cs var:group_name ?> 
     10<?cs /if ?><?cs if:forum_url ?>Forum URL: <<?cs var:forum_url ?>> 
     11<?cs /if ?><?cs if:topic_url ?>Topic URL: <<?cs var:topic_url ?>> 
     12<?cs /if ?><?cs if:message_url ?>Message URL: <<?cs var:message_url ?>> 
     13<?cs /if ?><?cs if:body ?>Body:  
     14 
     15<?cs var:body ?> 
     16<?cs /if ?> 
     17--  
     18Discussion URL: <<?cs var:discussion_url ?>> 
     19<?cs var:project.name ?> <<?cs var:project.url ?>> 
     20<?cs var:project.descr ?> 
  • 0.10/tracdiscussion/templates/notification-subject.cs

    old new