xref: /plugin/recommend/action.php (revision 4654e4de2ae97e90622a3154e25a1d51dd328e91)
1<?php
2require_once DOKU_PLUGIN . 'action.php';
3
4class action_plugin_recommend extends DokuWiki_Action_Plugin {
5    function getInfo(){
6        return confToHash(dirname(__FILE__).'/INFO.txt');
7    }
8
9    function register($controller) {
10        foreach(array('ACTION_ACT_PREPROCESS', 'TPL_ACT_UNKNOWN') as $event) {
11            $controller->register_hook($event, 'BEFORE', $this, '_handle');
12        }
13    }
14
15    function _handle($event, $param) {
16        global $INFO;
17        if($event->data != 'recommend' || !isset($INFO['userinfo'])) {
18            return;
19        }
20
21        $event->preventDefault();
22
23        if ($event->name === 'ACTION_ACT_PREPROCESS') {
24            return;
25        }
26
27        $event->stopPropagation();
28
29        if($_SERVER['REQUEST_METHOD'] == 'POST' && $this->_handle_post()) {
30            return;
31        }
32        $this->_show_form();
33    }
34
35    function _show_form() {
36        global $ID;
37        $name    = isset($_REQUEST['r_name']) ? $_REQUEST['r_name'] : '';
38        $mail    = isset($_REQUEST['r_email']) ? $_REQUEST['r_email'] : '';
39        $comment = isset($_REQUEST['comment']) ? $_REQUEST['r_comment'] : '';
40
41        $form = new Doku_Form('recommend_plugin', '?do=recommend');
42        $form->addHidden('id', $ID);
43        $form->startFieldset('Recommend page “' . hsc($ID). '”');
44        $form->addElement(form_makeTextField('r_name',$name,'Recipient name'));
45        $form->addElement(form_makeTextField('r_email',$mail,'Recipient email address'));
46        $form->addElement('<label><span>'.hsc('Additional comment').'</span>'.
47                          '<textarea name="comment" rows="3" cols="10" class="edit">' .
48                          $comment . '</textarea></label>');
49        $form->addElement(form_makeButton('submit','', 'Send recommendation'));
50        $form->printForm();
51    }
52
53    function _handle_post() {
54        if(!isset($_POST['r_email']) || !mail_isvalid($_POST['r_email'])) {
55            msg('Invalid email address submitted', -1);
56            return false;
57        }
58        $email = $_POST['r_email'];
59
60        if(!isset($_POST['id']) || !page_exists($_POST['id'])) {
61            msg('Invalid page submitted', -1);
62            return false;
63        }
64        $page = $_POST['id'];
65
66        if(!isset($_POST['r_name']) || trim($_POST['r_name']) === '') {
67            msg('Invalid name submitted', -1);
68            return false;
69        }
70        $name = $_POST['r_name'];
71
72        $comment = isset($_POST['comment']) ? $_POST['comment'] : null;
73
74        $mailtext = file_get_contents(dirname(__FILE__).'/template.txt');
75
76        global $conf;
77        global $USERINFO;
78        foreach(array('NAME' => $name,
79                      'PAGE' => $page,
80                      'SITE' => $conf['title'],
81                      'URL'  => wl($page, '', true),
82                      'COMMENT' => $comment,
83                      'AUTHOR' => $USERINFO['name']) as $var => $val) {
84            $mailtext = str_replace('@' . $var . '@', $val, $mailtext);
85        }
86        $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext);
87
88        mail_send($email, 'Page recommendation', $mailtext);
89
90        echo 'Thanks for recommending our site.';
91        return true;
92    }
93
94}
95