12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?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
- );
- }
- }
|