| | 378 | |
| | 379 | |
| | 380 | class 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 [], [] |