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 /** @var helper_plugin_publish $helper */ 81 $helper = plugin_load('helper','publish'); 82 $rev = $data['lastmod']; 83 84 /** 85 * todo it seems like the diff to the previous version is not that helpful after all. Check and remove. 86 $changelog = new PageChangelog($ID); 87 $difflinkPrev = $helper->getDifflink($ID, $changelog->getRelativeRevision($rev,-1), $rev); 88 $difflinkPrev = '"' . $difflinkPrev . '"'; 89 $body = str_replace('@CHANGESPREV@', $difflinkPrev, $body); 90 */ 91 92 $difflinkApr = $helper->getDifflink($ID, $helper->getLatestApprovedRevision($ID), $rev); 93 $difflinkApr = '"' . $difflinkApr . '"'; 94 $body = str_replace('@CHANGES@', $difflinkApr, $body); 95 96 $apprejlink = $this->apprejlink($ID, $data['lastmod']); 97 $apprejlink = '"' . $apprejlink . '"'; 98 $body = str_replace('@APPREJ@', $apprejlink, $body); 99 100 dbglog('mail_send?'); 101 $returnStatus = mail_send($receiver, $subject, $body, $sender); 102 dbglog($returnStatus); 103 dbglog($body); 104 return $returnStatus; 105 } 106 107 // Funktion versendet eine approve-Mail 108 public function send_approve_mail() { 109 dbglog('send_approve_mail()'); 110 global $ID; 111 global $ACT; 112 global $REV; 113 global $INFO; 114 global $conf; 115 $data = pageinfo(); 116 117 if ($ACT != 'save') { 118 // return true; 119 } 120 121 // get mail receiver 122 $receiver = $data['meta']['suggestfrom']; 123 dbglog('$receiver: ' . $receiver); 124 // get mail sender 125 $sender = $data['userinfo']['mail']; 126 dbglog('$sender: ' . $sender); 127 // get mail subject 128 $subject = $this->getLang('apr_mail_app_subject'); 129 dbglog('$subject: ' . $subject); 130 // get mail text 131 $body = $this->getLang('apr_approvemail_text'); 132 $body = str_replace('@DOKUWIKIURL@', DOKU_URL, $body); 133 $body = str_replace('@FULLNAME@', $data['userinfo']['name'], $body); 134 $body = str_replace('@TITLE@', $conf['title'], $body); 135 136 $url = wl($ID, array('rev'=>$this->hlp->getLatestApprovedRevision($ID)), true, '&'); 137 $url = '"' . $url . '"'; 138 $body = str_replace('@URL@', $url, $body); 139 dbglog('$body: ' . $body); 140 141 return mail_send($receiver, $subject, $body, $sender); 142 } 143 144 /** 145 * erzeugt den Link auf die edit-Seite 146 * 147 * @param $id 148 * @param $rev 149 * @return string 150 */ 151 function apprejlink($id, $rev) { 152 153 $options = array( 154 'rev'=> $rev, 155 ); 156 $apprejlink = wl($id, $options, true, '&'); 157 158 return $apprejlink; 159 } 160 161} 162