Edgewall Software

Ticket #1660: wikimail-patch-against-0.10.diff

File wikimail-patch-against-0.10.diff, 4.0 KB (added by jason@…, 6 years ago)

Updated patch which applies to trac 0.10

  • templates/wiki_notify_email.cs

    old new  
     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 ?> 
  • trac/notification.py

    old new  
    2424from trac.web.chrome import Chrome 
    2525from trac.web.clearsilver import HDFWrapper 
    2626from trac.web.main import populate_hdf 
     27from trac.core import * 
     28from trac.wiki.api import IWikiChangeListener 
     29from trac.wiki.model import WikiPage 
     30from trac.versioncontrol.diff import unified_diff 
    2731 
    2832MAXHEADERLEN = 76 
    2933 
     
    8589    use_tls = BoolOption('notification', 'use_tls', 'false', 
    8690        """Use SSL/TLS to send notifications (''since 0.10'').""") 
    8791 
     92    wiki_notify_email = Option('notification', 'wiki_notify_email', '', 
     93        """Comma-separated list of email addresses which should receive wiki notifications.""") 
    8894 
    8995class Notify(object): 
    9096    """Generic notification class for Trac. 
     
    369375                pass 
    370376        else: 
    371377            self.server.quit() 
     378 
     379 
     380class WikiNotifyEmail(Component): 
     381    """Notification of wiki changes.""" 
     382    
     383    implements(IWikiChangeListener) 
     384     
     385    # IWikiChangeListener methods 
     386    def wiki_page_added(self, page): 
     387        wn = self.Notifier(page.env) 
     388        wn.notify(page,"add") 
     389         
     390    def wiki_page_changed(self, page, version, t, comment, author, ipnr): 
     391        wn = self.Notifier(page.env) 
     392        wn.hdf["comment"] = comment 
     393        wn.hdf["author"] = author 
     394        wn.hdf["ip"] = ipnr 
     395        wn.notify(page,"mod") 
     396 
     397    def wiki_page_deleted(self, page): 
     398        wn = self.Notifier(page.env) 
     399        wn.notify(page,"del") 
     400 
     401     
     402    #Send mail class 
     403    class Notifier(NotifyEmail): 
     404        template_name = "wiki_notify_email.cs" 
     405        from_email = 'trac+wiki@localhost' 
     406         
     407        def __init__(self, env): 
     408            NotifyEmail.__init__(self, env) 
     409            self.env = env 
     410     
     411        def notify(self, page, action): 
     412            self.hdf["name"] = page.name 
     413            self.hdf["text"] = page.text 
     414            self.hdf["version"] = "%i" % page.version 
     415 
     416            #self.hdf["new"] = (page.version == 0) and '1' or '0' 
     417            self.hdf["action"] = action 
     418            self.hdf["link"] = self.env.abs_href.wiki(page.name) 
     419            self.hdf["linkdiff"] = "%s?action=diff&version=%i" % (self.env.abs_href.wiki(page.name), page.version) 
     420            
     421            if page.version > 0: 
     422                oldpage = WikiPage(self.env, page.name, page.version - 1) 
     423                self.hdf["oldversion"] = "%i" % oldpage.version 
     424                self.hdf["oldtext"] = oldpage.text 
     425                 
     426                diff = ""  
     427                for line in unified_diff(oldpage.text.splitlines(),page.text.splitlines(), context=3): 
     428                    diff = diff + "%s\n" % line 
     429                self.hdf["diff"] = diff                 
     430             
     431            projname = self.config.get('project', 'name') 
     432            subject = '[%s] wiki:%s' % (projname, page.name) 
     433             
     434            NotifyEmail.notify(self, None, subject) 
     435         
     436        def get_recipients(self, tktid): 
     437            val = self.config.get('notification', 'wiki_notify_email').split(',') 
     438            self.env.log.debug("wiki notification recipients: %r" % val) 
     439            if val is not None and len(val)>0: 
     440                return val, [] 
     441            else: 
     442                return [], []