1<?php 2/** 3 * @license GNU General Public License, version 2 4 */ 5 6 7if (!defined('DOKU_INC')) die(); 8 9 10/** 11 * Class action_plugin_publish_mail 12 * 13 * @author Michael Große <grosse@cosmocode.de> 14 */ 15class action_plugin_publish_mail extends DokuWiki_Action_Plugin { 16 17 /** 18 * @var helper_plugin_publish 19 */ 20 private $hlp; 21 22 function __construct() { 23 $this->hlp = plugin_load('helper','publish'); 24 } 25 26 public function register(Doku_Event_Handler $controller) { 27 28 $controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'send_change_mail', array()); 29 } 30 31 // Funktion versendet eine Änderungsmail 32 function send_change_mail(&$event, $param) { 33 global $ID; 34 global $ACT; 35 global $REV; 36 global $INFO; 37 global $conf; 38 $data = pageinfo(); 39 40 if ($ACT != 'save') { 41 return true; 42 } 43 if (!$event->data[3]) { 44 return true; 45 } 46 47 // get mail receiver 48 //$receiver = 'grosse@cosmocode.de';// 49 $receiver = $this->getConf('apr_mail_receiver'); 50 51 // get mail sender 52 $sender = $data['userinfo']['mail']; 53 54 if ($sender == $receiver) { 55 dbglog('Mail not send. Sender and receiver are identical.'); 56// return true; 57 } 58 59 if ($INFO['isadmin'] == '1') { 60 dbglog('Mail not send. Sender is admin.'); 61// return true; 62 } 63 64 // get mail subject 65 //$timestamp = time(); //$data['meta']['date']['modified']; 66 $timestamp = $data['lastmod']; 67// date_default_timezone_set("Europe/Paris"); 68 $datum = date("d.m.Y",$timestamp); 69 $uhrzeit = date("H:i",$timestamp); 70 $subject = $this->getLang('apr_mail_subject') . ': ' . $ID . ' - ' . $datum . ' ' . $uhrzeit; 71 dbglog($subject); 72 73 // get mail text 74 //$body = 'apr_changemail_text'; 75 $body = $this->getLang('apr_changemail_text'); 76 $body = str_replace('@DOKUWIKIURL@', DOKU_URL, $body); 77 $body = str_replace('@FULLNAME@', $data['userinfo']['name'], $body); 78 $body = str_replace('@TITLE@', $conf['title'], $body); 79 80// dbglog(pageinfo()); 81 $difflink = $this->difflink($ID, $this->getLastApproved(), $data['lastmod']); 82 $difflink = '"' . $difflink . '"'; 83 $body = str_replace('@CHANGES@', $difflink, $body); 84 $apprejlink = $this->apprejlink($ID, $data['lastmod']); 85 $apprejlink = '"' . $apprejlink . '"'; 86 $body = str_replace('@APPREJ@', $apprejlink, $body); 87 88 dbglog('mail_send'); 89 return mail_send($receiver, $subject, $body, $sender); 90 } 91 92 function getLastApproved() { 93 $data = pageinfo(); 94 if (!$data['meta']['approval']) { 95 return ''; 96 } 97 $allapproved = array_keys($data['meta']['approval']); 98 dbglog('$allapproved: ' . $allapproved); 99 rsort($allapproved); 100 101 $latestapproved = $allapproved[0]; 102 dbglog('$latest_rev: ' . $latestapproved); 103 104 return $latestapproved; 105 } 106 107 /** 108 * erzeugt den Link auf die edit-Seite 109 * 110 * @param $id 111 * @param $rev 112 * @return mixed|string 113 */ 114 function apprejlink($id, $rev) { 115 $data = pageinfo(); 116 117 $options = array( 118 'rev'=> $rev, 119 'do'=>'edit', 120 'suggestfrom' => $data['userinfo']['mail'], 121 ); 122 $difflink = wl($id, $options, true, '&'); 123// $difflink = str_replace('//', '/', $difflink); 124// $difflink = str_replace('http:/', 'http://', $difflink); 125 126 return $difflink; 127 } 128 129 /** 130 * erzeugt den Diff-Link 131 */ 132 function difflink($id, $rev1, $rev2) { 133 $data = pageinfo(); 134 135 if ($rev1 == $rev2) { 136// return ''; 137 } 138 $options = array( 139 'do' => 'diff', 140 'rev2[0]' => 'lastappr', 141 'rev2[1]' => $rev2, 142 'suggestfrom' => $data['userinfo']['mail'], 143 ); 144 145// $difflink = DOKU_URL . wl($id, '&rev2[]=' . $rev1 . '&rev2[]=' . $rev2 . '&do[diff]=1&suggestfrom=' . $data['userinfo']['mail'], '', false, '&'); 146 $difflink = wl($id, $options,true, '&'); 147 //$difflink = str_replace('//', '/', $difflink); 148 //$difflink = str_replace('http:/', 'http://', $difflink); 149 150 return $difflink; 151 } 152 153} 154