<?php
require_once DOKU_PLUGIN . 'action.php';

class action_plugin_recommend extends DokuWiki_Action_Plugin {
    function getInfo(){
        return confToHash(dirname(__FILE__).'/INFO.txt');
    }

    function register($controller) {
        foreach(array('ACTION_ACT_PREPROCESS', 'TPL_ACT_UNKNOWN') as $event) {
            $controller->register_hook($event, 'BEFORE', $this, '_handle');
        }
    }
 
    function _handle($event, $param) {
        global $INFO;
        if($event->data != 'recommend' || !isset($INFO['userinfo'])) {
            return;
        }

        $event->preventDefault();

        if ($event->name === 'ACTION_ACT_PREPROCESS') {
            return;
        }

        $event->stopPropagation();

        if($_SERVER['REQUEST_METHOD'] == 'POST' && $this->_handle_post()) {
            return;
        }
        $this->_show_form();
    }

    function _show_form() {
        global $ID;
        $name    = isset($_REQUEST['r_name']) ? $_REQUEST['r_name'] : '';
        $mail    = isset($_REQUEST['r_email']) ? $_REQUEST['r_email'] : '';
        $comment = isset($_REQUEST['comment']) ? $_REQUEST['r_comment'] : '';

        $form = new Doku_Form('recommend_plugin', '?do=recommend');
        $form->addHidden('id', $ID);
        $form->startFieldset('Recommend page “' . hsc($ID). '”');
        $form->addElement(form_makeTextField('r_name',$name,'Recipient name'));
        $form->addElement(form_makeTextField('r_email',$mail,'Recipient email address'));
        $form->addElement('<label><span>'.hsc('Additional comment').'</span>'.
                          '<textarea name="comment" rows="3" cols="10" class="edit">' .
                          $comment . '</textarea></label>');
        $form->addElement(form_makeButton('submit','', 'Send recommendation'));
        $form->printForm();
    }

    function _handle_post() {
        if(!isset($_POST['r_email']) || !mail_isvalid($_POST['r_email'])) {
            msg('Invalid email address submitted', -1);
            return false;
        }
        $email = $_POST['r_email'];

        if(!isset($_POST['id']) || !page_exists($_POST['id'])) {
            msg('Invalid page submitted', -1);
            return false;
        }
        $page = $_POST['id'];

        if(!isset($_POST['r_name']) || trim($_POST['r_name']) === '') {
            msg('Invalid name submitted', -1);
            return false;
        }
        $name = $_POST['r_name'];

        $comment = isset($_POST['comment']) ? $_POST['comment'] : null;

        $mailtext = file_get_contents(dirname(__FILE__).'/template.txt');

        global $conf;
        global $USERINFO;
        foreach(array('NAME' => $name,
                      'PAGE' => $page,
                      'SITE' => $conf['title'],
                      'URL'  => wl($page, '', true),
                      'COMMENT' => $comment,
                      'AUTHOR' => $USERINFO['name']) as $var => $val) {
            $mailtext = str_replace('@' . $var . '@', $val, $mailtext);
        }
        $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext);

        mail_send($email, 'Page recommendation', $mailtext);

        echo 'Thanks for recommending our site.';
        return true;
    }

}
