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