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