xref: /plugin/recommend/action.php (revision 2cdbf48f9e663cb24008bb204fb0ce56837a4fc0)
14654e4deSAdrian Lang<?php
24654e4deSAdrian Langrequire_once DOKU_PLUGIN . 'action.php';
34654e4deSAdrian Lang
44654e4deSAdrian Langclass action_plugin_recommend extends DokuWiki_Action_Plugin {
54654e4deSAdrian Lang    function getInfo(){
64654e4deSAdrian Lang        return confToHash(dirname(__FILE__).'/INFO.txt');
74654e4deSAdrian Lang    }
84654e4deSAdrian Lang
94654e4deSAdrian Lang    function register($controller) {
104654e4deSAdrian Lang        foreach(array('ACTION_ACT_PREPROCESS', 'TPL_ACT_UNKNOWN') as $event) {
114654e4deSAdrian Lang            $controller->register_hook($event, 'BEFORE', $this, '_handle');
124654e4deSAdrian Lang        }
134654e4deSAdrian Lang    }
144654e4deSAdrian Lang
154654e4deSAdrian Lang    function _handle($event, $param) {
164654e4deSAdrian Lang        global $INFO;
174654e4deSAdrian Lang        if($event->data != 'recommend' || !isset($INFO['userinfo'])) {
184654e4deSAdrian Lang            return;
194654e4deSAdrian Lang        }
204654e4deSAdrian Lang
214654e4deSAdrian Lang        $event->preventDefault();
224654e4deSAdrian Lang
234654e4deSAdrian Lang        if ($event->name === 'ACTION_ACT_PREPROCESS') {
244654e4deSAdrian Lang            return;
254654e4deSAdrian Lang        }
264654e4deSAdrian Lang
274654e4deSAdrian Lang        $event->stopPropagation();
284654e4deSAdrian Lang
294654e4deSAdrian Lang        if($_SERVER['REQUEST_METHOD'] == 'POST' && $this->_handle_post()) {
304654e4deSAdrian Lang            return;
314654e4deSAdrian Lang        }
324654e4deSAdrian Lang        $this->_show_form();
334654e4deSAdrian Lang    }
344654e4deSAdrian Lang
354654e4deSAdrian Lang    function _show_form() {
364654e4deSAdrian Lang        global $ID;
374654e4deSAdrian Lang        $name    = isset($_REQUEST['r_name']) ? $_REQUEST['r_name'] : '';
384654e4deSAdrian Lang        $mail    = isset($_REQUEST['r_email']) ? $_REQUEST['r_email'] : '';
394654e4deSAdrian Lang        $comment = isset($_REQUEST['comment']) ? $_REQUEST['r_comment'] : '';
404654e4deSAdrian Lang
414654e4deSAdrian Lang        $form = new Doku_Form('recommend_plugin', '?do=recommend');
424654e4deSAdrian Lang        $form->addHidden('id', $ID);
434654e4deSAdrian Lang        $form->startFieldset('Recommend page “' . hsc($ID). '”');
444654e4deSAdrian Lang        $form->addElement(form_makeTextField('r_name',$name,'Recipient name'));
454654e4deSAdrian Lang        $form->addElement(form_makeTextField('r_email',$mail,'Recipient email address'));
464654e4deSAdrian Lang        $form->addElement('<label><span>'.hsc('Additional comment').'</span>'.
474654e4deSAdrian Lang                          '<textarea name="comment" rows="3" cols="10" class="edit">' .
484654e4deSAdrian Lang                          $comment . '</textarea></label>');
494654e4deSAdrian Lang        $form->addElement(form_makeButton('submit','', 'Send recommendation'));
504654e4deSAdrian Lang        $form->printForm();
514654e4deSAdrian Lang    }
524654e4deSAdrian Lang
534654e4deSAdrian Lang    function _handle_post() {
54*2cdbf48fSAdrian Lang        /* Validate input. */
554654e4deSAdrian Lang        if(!isset($_POST['r_email']) || !mail_isvalid($_POST['r_email'])) {
564654e4deSAdrian Lang            msg('Invalid email address submitted', -1);
574654e4deSAdrian Lang            return false;
584654e4deSAdrian Lang        }
594654e4deSAdrian Lang        $email = $_POST['r_email'];
604654e4deSAdrian Lang
614654e4deSAdrian Lang        if(!isset($_POST['id']) || !page_exists($_POST['id'])) {
624654e4deSAdrian Lang            msg('Invalid page submitted', -1);
634654e4deSAdrian Lang            return false;
644654e4deSAdrian Lang        }
654654e4deSAdrian Lang        $page = $_POST['id'];
664654e4deSAdrian Lang
674654e4deSAdrian Lang        if(!isset($_POST['r_name']) || trim($_POST['r_name']) === '') {
684654e4deSAdrian Lang            msg('Invalid name submitted', -1);
694654e4deSAdrian Lang            return false;
704654e4deSAdrian Lang        }
714654e4deSAdrian Lang        $name = $_POST['r_name'];
724654e4deSAdrian Lang
734654e4deSAdrian Lang        $comment = isset($_POST['comment']) ? $_POST['comment'] : null;
744654e4deSAdrian Lang
75*2cdbf48fSAdrian Lang        /* Prepare mail text. */
764654e4deSAdrian Lang        $mailtext = file_get_contents(dirname(__FILE__).'/template.txt');
774654e4deSAdrian Lang
784654e4deSAdrian Lang        global $conf;
794654e4deSAdrian Lang        global $USERINFO;
804654e4deSAdrian Lang        foreach(array('NAME' => $name,
814654e4deSAdrian Lang                      'PAGE' => $page,
824654e4deSAdrian Lang                      'SITE' => $conf['title'],
834654e4deSAdrian Lang                      'URL'  => wl($page, '', true),
844654e4deSAdrian Lang                      'COMMENT' => $comment,
854654e4deSAdrian Lang                      'AUTHOR' => $USERINFO['name']) as $var => $val) {
864654e4deSAdrian Lang            $mailtext = str_replace('@' . $var . '@', $val, $mailtext);
874654e4deSAdrian Lang        }
88*2cdbf48fSAdrian Lang        /* Limit to two empty lines. */
894654e4deSAdrian Lang        $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext);
904654e4deSAdrian Lang
91*2cdbf48fSAdrian Lang        /* Perform stuff. */
924654e4deSAdrian Lang        mail_send($email, 'Page recommendation', $mailtext);
93*2cdbf48fSAdrian Lang        $this->_log($USERINFO['mail'], $email);
944654e4deSAdrian Lang        echo 'Thanks for recommending our site.';
954654e4deSAdrian Lang        return true;
964654e4deSAdrian Lang    }
974654e4deSAdrian Lang
98*2cdbf48fSAdrian Lang    function _log($sender, $receiver) {
99*2cdbf48fSAdrian Lang        global $ID;
100*2cdbf48fSAdrian Lang        $path = DOKU_INC.'data/cache/recommend';
101*2cdbf48fSAdrian Lang        if (!file_exists($path)) {
102*2cdbf48fSAdrian Lang            mkdir($path);
103*2cdbf48fSAdrian Lang        }
104*2cdbf48fSAdrian Lang        file_put_contents($path . '/' . date('Y-m') . '.log', date('r') . ': ' .
105*2cdbf48fSAdrian Lang                          "“${sender}” recommended “${ID}” to “${receiver}”.",
106*2cdbf48fSAdrian Lang                          FILE_APPEND);
107*2cdbf48fSAdrian Lang    }
1084654e4deSAdrian Lang}
109