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