xref: /plugin/publish/action/mail.php (revision 0428c87bac7feabca455b0b21af47f36af16fc79)
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
114        /** @var DokuWiki_Auth_Plugin $auth */
115        global $auth;
116        global $conf;
117        $data = pageinfo();
118
119        if ($ACT != 'save') {
120           // return true;
121        }
122
123        // get mail receiver
124        $changelog = new PageChangelog($ID);
125        $revinfo = $changelog->getRevisionInfo($REV);
126        $userinfo = $auth->getUserData($revinfo['user']);
127        $receiver = $userinfo['mail'];
128        dbglog('$receiver: ' . $receiver);
129        // get mail sender
130        $sender = $data['userinfo']['mail'];
131        dbglog('$sender: ' . $sender);
132        // get mail subject
133        $subject = $this->getLang('apr_mail_app_subject');
134        dbglog('$subject: ' . $subject);
135        // get mail text
136        $body = $this->getLang('apr_approvemail_text');
137        $body = str_replace('@DOKUWIKIURL@', DOKU_URL, $body);
138        $body = str_replace('@FULLNAME@', $data['userinfo']['name'], $body);
139        $body = str_replace('@TITLE@', $conf['title'], $body);
140
141        $url = wl($ID, array('rev'=>$this->hlp->getLatestApprovedRevision($ID)), true, '&');
142        $url = '"' . $url . '"';
143        $body = str_replace('@URL@', $url, $body);
144        dbglog('$body: ' . $body);
145
146        return mail_send($receiver, $subject, $body, $sender);
147    }
148
149    /**
150     * erzeugt den Link auf die edit-Seite
151     *
152     * @param $id
153     * @param $rev
154     * @return string
155     */
156    function apprejlink($id, $rev) {
157
158        $options = array(
159             'rev'=> $rev,
160        );
161        $apprejlink = wl($id, $options, true, '&');
162
163        return $apprejlink;
164    }
165
166}
167