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