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