diff options
Diffstat (limited to 'platform/www/inc/Subscriptions/PageSubscriptionSender.php')
-rw-r--r-- | platform/www/inc/Subscriptions/PageSubscriptionSender.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/platform/www/inc/Subscriptions/PageSubscriptionSender.php b/platform/www/inc/Subscriptions/PageSubscriptionSender.php new file mode 100644 index 0000000..e5577c1 --- /dev/null +++ b/platform/www/inc/Subscriptions/PageSubscriptionSender.php @@ -0,0 +1,88 @@ +<?php + + +namespace dokuwiki\Subscriptions; + + +use Diff; +use InlineDiffFormatter; +use UnifiedDiffFormatter; + +class PageSubscriptionSender extends SubscriptionSender +{ + + /** + * Send the diff for some page change + * + * @param string $subscriber_mail The target mail address + * @param string $template Mail template ('subscr_digest', 'subscr_single', 'mailtext', ...) + * @param string $id Page for which the notification is + * @param int|null $rev Old revision if any + * @param string $summary Change summary if any + * @param int|null $current_rev New revision if any + * + * @return bool true if successfully sent + */ + public function sendPageDiff($subscriber_mail, $template, $id, $rev = null, $summary = '', $current_rev = null) + { + global $DIFF_INLINESTYLES; + + // prepare replacements (keys not set in hrep will be taken from trep) + $trep = [ + 'PAGE' => $id, + 'NEWPAGE' => wl($id, $current_rev?('rev='.$current_rev):'', true, '&'), + 'SUMMARY' => $summary, + 'SUBSCRIBE' => wl($id, ['do' => 'subscribe'], true, '&'), + ]; + $hrep = []; + + if ($rev) { + $subject = 'changed'; + $trep['OLDPAGE'] = wl($id, "rev=$rev", true, '&'); + + $old_content = rawWiki($id, $rev); + $new_content = rawWiki($id); + + $df = new Diff( + explode("\n", $old_content), + explode("\n", $new_content) + ); + $dformat = new UnifiedDiffFormatter(); + $tdiff = $dformat->format($df); + + $DIFF_INLINESTYLES = true; + $df = new Diff( + explode("\n", $old_content), + explode("\n", $new_content) + ); + $dformat = new InlineDiffFormatter(); + $hdiff = $dformat->format($df); + $hdiff = '<table>' . $hdiff . '</table>'; + $DIFF_INLINESTYLES = false; + } else { + $subject = 'newpage'; + $trep['OLDPAGE'] = '---'; + $tdiff = rawWiki($id); + $hdiff = nl2br(hsc($tdiff)); + } + + $trep['DIFF'] = $tdiff; + $hrep['DIFF'] = $hdiff; + + $headers = ['Message-Id' => $this->getMessageID($id)]; + if ($rev) { + $headers['In-Reply-To'] = $this->getMessageID($id, $rev); + } + + return $this->send( + $subscriber_mail, + $subject, + $id, + $template, + $trep, + $hrep, + $headers + ); + } + +} |