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