xref: /plugin/publish/action/mail.php (revision 698cf6562d7cb0df92c1ecdf8351bb86fcb93a62)
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