xref: /plugin/publish/action/mail.php (revision 12699d357ad032bd483ad907ad7e4d9bda88b394)
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    function getLastApproved() {
108        $data = pageinfo();
109        if (!$data['meta']['approval']) {
110            return '';
111        }
112        $allapproved = array_keys($data['meta']['approval']);
113        dbglog('$allapproved: ' . $allapproved);
114        rsort($allapproved);
115
116        $latestapproved = $allapproved[0];
117        dbglog('$latest_rev: ' . $latestapproved);
118
119        return $latestapproved;
120    }
121
122    /**
123     * erzeugt den Link auf die edit-Seite
124     *
125     * @param $id
126     * @param $rev
127     * @return mixed|string
128     */
129    function apprejlink($id, $rev) {
130        $data = pageinfo();
131
132        $options = array(
133             'rev'=> $rev,
134             'do'=>'edit',
135             'suggestfrom' => $data['userinfo']['mail'],
136        );
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     * erzeugt den Diff-Link
146     */
147    function difflink($id, $rev1, $rev2) {
148        $data = pageinfo();
149
150        if ($rev1 == $rev2) {
151//            return '';
152        }
153        $options = array(
154            'do' => 'diff',
155            'rev2[0]' => 'lastappr',
156            'rev2[1]' => $rev2,
157            'suggestfrom' => $data['userinfo']['mail'],
158        );
159
160//        $difflink = DOKU_URL . wl($id, '&rev2[]=' . $rev1 . '&rev2[]=' . $rev2 . '&do[diff]=1&suggestfrom=' . $data['userinfo']['mail'], '', false, '&');
161        $difflink = wl($id, $options,true, '&');
162        //$difflink = str_replace('//', '/', $difflink);
163        //$difflink = str_replace('http:/', 'http://', $difflink);
164
165        return $difflink;
166    }
167
168}
169