Edgewall Software

Ticket #1660: wikimail-patch-1.diff

File wikimail-patch-1.diff, 4.3 KB (added by pierre.palatin+trac@…, 7 years ago)

initial version of wiki changes email notification patch

  • trac/db_default.py

     
    453453  ('notification', 'always_notify_reporter', 'false'), 
    454454  ('notification', 'smtp_from', 'trac@localhost'), 
    455455  ('notification', 'smtp_replyto', 'trac@localhost'), 
     456  ('notification', 'wiki_notify_email', 'trac+wiki@localhost'), 
    456457  ('timeline', 'changeset_show_files', '0'), 
    457458) 
    458459 
  • trac/Notify.py

     
    2323from trac.util import CRLF, TRUE, FALSE, TracError, wrap 
    2424from trac.web.clearsilver import HDFWrapper 
    2525from trac.web.main import populate_hdf 
     26from trac.core import * 
     27from trac.wiki.api import IWikiChangeListener 
     28from trac.wiki.model import WikiPage 
     29from trac.versioncontrol.diff import unified_diff 
    2630 
    2731import md5 
    2832import sys 
     
    346350            hdrs['In-Reply-To'] = self.get_message_id(rcpt) 
    347351            hdrs['References'] = self.get_message_id(rcpt) 
    348352        NotifyEmail.send(self, rcpt, hdrs) 
     353 
     354 
     355class WikiNotifyEmail(Component): 
     356    """Notification of wiki changes.""" 
     357    
     358    implements(IWikiChangeListener) 
     359     
     360    # IWikiChangeListener methods 
     361    def wiki_page_added(self, page): 
     362        wn = self.Notifier(page.env) 
     363        wn.notify(page,"add") 
     364         
     365    def wiki_page_changed(self, page, version, t, author, comment, ipnr): 
     366        wn = self.Notifier(page.env) 
     367        wn.hdf["comment"] = comment 
     368        wn.hdf["author"] = author 
     369        wn.hdf["ip"] = ipnr 
     370        wn.notify(page,"mod") 
     371 
     372    def wiki_page_deleted(self, page): 
     373        wn = self.Notifier(page.env) 
     374        wn.notify(page,"del") 
     375 
     376     
     377    #Send mail class 
     378    class Notifier(NotifyEmail): 
     379        template_name = "wiki_notify_email.cs" 
     380        from_email = 'trac+wiki@localhost' 
     381         
     382        def __init__(self, env): 
     383            NotifyEmail.__init__(self, env) 
     384     
     385        def notify(self, page, action): 
     386            self.hdf["name"] = page.name 
     387            self.hdf["text"] = page.text 
     388            self.hdf["version"] = "%i" % page.version 
     389 
     390            #self.hdf["new"] = (page.version == 0) and '1' or '0' 
     391            self.hdf["action"] = action 
     392            self.hdf["link"] = self.env.abs_href.wiki(page.name) 
     393            self.hdf["linkdiff"] = "%s?action=diff&version=%i" % (self.env.abs_href.wiki(page.name), page.version) 
     394            
     395            if page.version > 0: 
     396                oldpage = WikiPage(self.env, page.name, page.version - 1) 
     397                self.hdf["oldversion"] = "%i" % oldpage.version 
     398                self.hdf["oldtext"] = oldpage.text 
     399                 
     400                diff = ""  
     401                for line in unified_diff(oldpage.text.splitlines(),page.text.splitlines(), context=3): 
     402                    diff = diff + "%s\n" % line 
     403                self.hdf["diff"] = diff                 
     404             
     405            projname = self.config.get('project', 'name') 
     406            subject = '[%s] wiki:%s' % (projname, page.name) 
     407             
     408            NotifyEmail.notify(self, None, subject) 
     409         
     410        def get_recipients(self, tktid): 
     411            val = self.config.get('notification', 'wiki_notify_email') 
     412            if val is not None and len(val)>0: 
     413                return [val] 
     414            else: 
     415                return [] 
     416 
     417 
     418     
  • templates/wiki_notify_email.cs

     
     1<?cs if:$action == 'add' ?> 
     2Added page "<?cs var:$name ?>" by <?cs var:$author ?> from <?cs var:$ip ?> 
     3Page URL: <<?cs var:$link ?>> 
     4Comment: <?cs var:$comment ?> 
     5Content: 
     6 
     7<?cs var:$text ?> 
     8 
     9<?cs elif:$action == 'mod' ?> 
     10 
     11Changed page "<?cs var:$name ?>" by <?cs var:$author ?> from <?cs var:$ip ?> 
     12Page URL: <<?cs var:$link ?>> 
     13Diff URL: <<?cs var:$linkdiff ?>> 
     14Revision <?cs var:$version ?>  
     15Comment: <?cs var:$comment ?> 
     16Changes: 
     17   
     18<?cs var:$diff ?> 
     19 
     20<?cs elif:$action == 'del' ?> 
     21Deleted page "<?cs var:$name ?>" by <?cs var:$author ?> from <?cs var:$ip ?> 
     22Comment: <?cs var:$comment ?> 
     23 
     24<?cs /if ?> 
     25--  
     26<?cs var:$project.name ?> <<?cs var:$project.url ?>> 
     27<?cs var:$project.descr ?>