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