89 lines
2.6 KiB
PHP
89 lines
2.6 KiB
PHP
|
<?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
|
||
|
);
|
||
|
}
|
||
|
|
||
|
}
|