| | 353 | |
| | 354 | |
| | 355 | class 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 | |