xref: /plugin/recommend/action.php (revision e596e22bcda05faed2f8741d85ffbd96e92c6451)
14654e4deSAdrian Lang<?php
24654e4deSAdrian Langrequire_once DOKU_PLUGIN . 'action.php';
370f4a435SAdrian Langrequire_once DOKU_INC . 'inc/form.php';
4cbc3cee5SAdrian Langrequire_once dirname(__FILE__) . '/log.php';
54654e4deSAdrian Lang
64654e4deSAdrian Langclass action_plugin_recommend extends DokuWiki_Action_Plugin {
74654e4deSAdrian Lang    function getInfo(){
84654e4deSAdrian Lang        return confToHash(dirname(__FILE__).'/INFO.txt');
94654e4deSAdrian Lang    }
104654e4deSAdrian Lang
1185a03255SAdrian Lang    function register(&$controller) {
1270f4a435SAdrian Lang        foreach (array('ACTION_ACT_PREPROCESS', 'AJAX_CALL_UNKNOWN',
1370f4a435SAdrian Lang                       'TPL_ACT_UNKNOWN') as $event) {
144654e4deSAdrian Lang            $controller->register_hook($event, 'BEFORE', $this, '_handle');
154654e4deSAdrian Lang        }
164654e4deSAdrian Lang    }
174654e4deSAdrian Lang
1885a03255SAdrian Lang    function _handle(&$event, $param) {
19*e596e22bSAdrian Lang        if (!in_array($event->data, array('recommend', 'plugin_recommend'))) {
204654e4deSAdrian Lang            return;
214654e4deSAdrian Lang        }
224654e4deSAdrian Lang
234654e4deSAdrian Lang        $event->preventDefault();
244654e4deSAdrian Lang
254654e4deSAdrian Lang        if ($event->name === 'ACTION_ACT_PREPROCESS') {
264654e4deSAdrian Lang            return;
274654e4deSAdrian Lang        }
284654e4deSAdrian Lang
294654e4deSAdrian Lang        $event->stopPropagation();
304654e4deSAdrian Lang
3170f4a435SAdrian Lang        if ($_SERVER['REQUEST_METHOD'] == 'POST' &&
3270f4a435SAdrian Lang            isset($_POST['sectok']) &&
3370f4a435SAdrian Lang            !($err = $this->_handle_post())) {
3470f4a435SAdrian Lang            if ($event->name === 'AJAX_CALL_UNKNOWN') {
3570f4a435SAdrian Lang                /* To signal success to AJAX. */
3670f4a435SAdrian Lang                header('HTTP/1.1 204 No Content');
374654e4deSAdrian Lang                return;
384654e4deSAdrian Lang            }
3970f4a435SAdrian Lang            echo 'Thanks for recommending our site.';
4070f4a435SAdrian Lang            return;
4170f4a435SAdrian Lang        }
4270f4a435SAdrian Lang        /* To display msgs even via AJAX. */
4370f4a435SAdrian Lang        echo ' ';
4470f4a435SAdrian Lang        if (isset($err)) {
4570f4a435SAdrian Lang            msg($err, -1);
4670f4a435SAdrian Lang        }
474654e4deSAdrian Lang        $this->_show_form();
484654e4deSAdrian Lang    }
494654e4deSAdrian Lang
504654e4deSAdrian Lang    function _show_form() {
51*e596e22bSAdrian Lang        $r_name  = isset($_REQUEST['r_name']) ? $_REQUEST['r_name'] : '';
52*e596e22bSAdrian Lang        $r_email = isset($_REQUEST['r_email']) ? $_REQUEST['r_email'] : '';
53*e596e22bSAdrian Lang        $s_name  = isset($_REQUEST['s_name']) ? $_REQUEST['s_name'] : '';
54*e596e22bSAdrian Lang        $s_email = isset($_REQUEST['s_email']) ? $_REQUEST['s_email'] : '';
554654e4deSAdrian Lang        $comment = isset($_REQUEST['comment']) ? $_REQUEST['r_comment'] : '';
5670f4a435SAdrian Lang        if (isset($_REQUEST['id'])) {
5770f4a435SAdrian Lang            $id  = $_REQUEST['id'];
5870f4a435SAdrian Lang        } else {
5970f4a435SAdrian Lang            global $ID;
6070f4a435SAdrian Lang            if (!isset($ID)) {
6185a03255SAdrian Lang                msg('Unknown page', -1);
6285a03255SAdrian Lang                return;
6370f4a435SAdrian Lang            }
6470f4a435SAdrian Lang            $id  = $ID;
6570f4a435SAdrian Lang        }
664654e4deSAdrian Lang        $form = new Doku_Form('recommend_plugin', '?do=recommend');
6770f4a435SAdrian Lang        $form->addHidden('id', $id);
6870f4a435SAdrian Lang        $form->startFieldset('Recommend page “' . hsc($id). '”');
69*e596e22bSAdrian Lang        if (isset($_SERVER['REMOTE_USER'])) {
70*e596e22bSAdrian Lang            global $USERINFO;
71*e596e22bSAdrian Lang            $form->addHidden('s_name', $USERINFO['name']);
72*e596e22bSAdrian Lang            $form->addHidden('s_email', $USERINFO['mail']);
73*e596e22bSAdrian Lang        } else {
74*e596e22bSAdrian Lang            $form->addElement(form_makeTextField('s_name', $s_name, 'Your name'));
75*e596e22bSAdrian Lang            $form->addElement(form_makeTextField('s_email', $s_email,
76*e596e22bSAdrian Lang                                                 'Your email address'));
77*e596e22bSAdrian Lang        }
78*e596e22bSAdrian Lang        $form->addElement(form_makeTextField('r_name', $r_name, 'Recipient name'));
79*e596e22bSAdrian Lang        $form->addElement(form_makeTextField('r_email', $r_email,
8070f4a435SAdrian Lang                                             'Recipient email address'));
814654e4deSAdrian Lang        $form->addElement('<label><span>'.hsc('Additional comment').'</span>'.
8270f4a435SAdrian Lang                          '<textarea name="comment" rows="3" cols="10" ' .
8370f4a435SAdrian Lang                          'class="edit">' . $comment . '</textarea></label>');
84*e596e22bSAdrian Lang        $helper = null;
85*e596e22bSAdrian Lang        if(@is_dir(DOKU_PLUGIN.'captcha')) $helper = plugin_load('helper','captcha');
86*e596e22bSAdrian Lang        if(!is_null($helper) && $helper->isEnabled()){
87*e596e22bSAdrian Lang            $form->addElement($helper->getHTML());
88*e596e22bSAdrian Lang        }
89*e596e22bSAdrian Lang
904654e4deSAdrian Lang        $form->addElement(form_makeButton('submit', '', 'Send recommendation'));
91869ed47dSAdrian Lang        $form->addElement(form_makeButton('submit', 'cancel', 'Cancel'));
924654e4deSAdrian Lang        $form->printForm();
934654e4deSAdrian Lang    }
944654e4deSAdrian Lang
954654e4deSAdrian Lang    function _handle_post() {
96*e596e22bSAdrian Lang        $helper = null;
97*e596e22bSAdrian Lang        if(@is_dir(DOKU_PLUGIN.'captcha')) $helper = plugin_load('helper','captcha');
98*e596e22bSAdrian Lang        if(!is_null($helper) && $helper->isEnabled() && !$helper->check()) {
99*e596e22bSAdrian Lang            return 'Wrong captcha';
100*e596e22bSAdrian Lang        }
101*e596e22bSAdrian Lang
1022cdbf48fSAdrian Lang        /* Validate input. */
1034654e4deSAdrian Lang        if (!isset($_POST['r_email']) || !mail_isvalid($_POST['r_email'])) {
104*e596e22bSAdrian Lang            return 'Invalid recipient email address submitted';
1054654e4deSAdrian Lang        }
106*e596e22bSAdrian Lang        $r_email = $_POST['r_email'];
107*e596e22bSAdrian Lang
108*e596e22bSAdrian Lang        if (!isset($_POST['s_email']) || !mail_isvalid($_POST['s_email'])) {
109*e596e22bSAdrian Lang            return 'Invalid sender email address submitted';
110*e596e22bSAdrian Lang        }
111*e596e22bSAdrian Lang        $s_email = $_POST['s_email'];
1124654e4deSAdrian Lang
1134654e4deSAdrian Lang        if (!isset($_POST['id']) || !page_exists($_POST['id'])) {
11470f4a435SAdrian Lang            return 'Invalid page submitted';
1154654e4deSAdrian Lang        }
1164654e4deSAdrian Lang        $page = $_POST['id'];
1174654e4deSAdrian Lang
1184654e4deSAdrian Lang        if (!isset($_POST['r_name']) || trim($_POST['r_name']) === '') {
119*e596e22bSAdrian Lang            return 'Invalid recipient name submitted';
1204654e4deSAdrian Lang        }
121*e596e22bSAdrian Lang        $r_name = $_POST['r_name'];
122*e596e22bSAdrian Lang
123*e596e22bSAdrian Lang        if (!isset($_POST['s_name']) || trim($_POST['s_name']) === '') {
124*e596e22bSAdrian Lang            return 'Invalid sender name submitted';
125*e596e22bSAdrian Lang        }
126*e596e22bSAdrian Lang        $s_name = $_POST['s_name'];
1274654e4deSAdrian Lang
1284654e4deSAdrian Lang        $comment = isset($_POST['comment']) ? $_POST['comment'] : null;
1294654e4deSAdrian Lang
1302cdbf48fSAdrian Lang        /* Prepare mail text. */
1314654e4deSAdrian Lang        $mailtext = file_get_contents(dirname(__FILE__).'/template.txt');
1324654e4deSAdrian Lang
1334654e4deSAdrian Lang        global $conf;
1344654e4deSAdrian Lang        global $USERINFO;
135*e596e22bSAdrian Lang        foreach (array('NAME' => $r_name,
1364654e4deSAdrian Lang                       'PAGE' => $page,
1374654e4deSAdrian Lang                       'SITE' => $conf['title'],
1384654e4deSAdrian Lang                       'URL'  => wl($page, '', true),
1394654e4deSAdrian Lang                       'COMMENT' => $comment,
140*e596e22bSAdrian Lang                       'AUTHOR' => "$s_name <$s_email>") as $var => $val) {
1414654e4deSAdrian Lang            $mailtext = str_replace('@' . $var . '@', $val, $mailtext);
1424654e4deSAdrian Lang        }
1432cdbf48fSAdrian Lang        /* Limit to two empty lines. */
1444654e4deSAdrian Lang        $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext);
1454654e4deSAdrian Lang
1462cdbf48fSAdrian Lang        /* Perform stuff. */
147*e596e22bSAdrian Lang        mail_send($r_email, 'Page recommendation', $mailtext);
148cbc3cee5SAdrian Lang        $log = new Plugin_Recommend_Log(date('Y-m'));
149*e596e22bSAdrian Lang        $log->writeEntry($page, "$s_name <$s_email>", "$r_name <$r_email>");
15070f4a435SAdrian Lang        return false;
1514654e4deSAdrian Lang    }
1524654e4deSAdrian Lang}
153