1*6b13307fSandi<?php 2*6b13307fSandi/** 3*6b13307fSandi * DokuWiki Actions 4*6b13307fSandi * 5*6b13307fSandi * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 7*6b13307fSandi */ 8*6b13307fSandi 9*6b13307fSandi if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/'); 10*6b13307fSandi require_once(DOKU_INC.'inc/template.php'); 11*6b13307fSandi 12*6b13307fSandi/** 13*6b13307fSandi * Call the needed action handlers 14*6b13307fSandi * 15*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 16*6b13307fSandi */ 17*6b13307fSandifunction act_dispatch(){ 18*6b13307fSandi global $INFO; 19*6b13307fSandi global $ACT; 20*6b13307fSandi global $ID; 21*6b13307fSandi global $QUERY; 22*6b13307fSandi global $lang; 23*6b13307fSandi global $conf; 24*6b13307fSandi 25*6b13307fSandi //check permissions 26*6b13307fSandi $ACT = act_permcheck($ACT); 27*6b13307fSandi 28*6b13307fSandi //login stuff 29*6b13307fSandi if(in_array($ACT,array('login','logout','register'))) 30*6b13307fSandi $ACT = act_login($ACT); 31*6b13307fSandi 32*6b13307fSandi //save 33*6b13307fSandi if($ACT == 'save') 34*6b13307fSandi $ACT = act_save($ACT); 35*6b13307fSandi 36*6b13307fSandi //edit 37*6b13307fSandi if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){ 38*6b13307fSandi $ACT = act_save($ACT); 39*6b13307fSandi }else{ 40*6b13307fSandi unlock($ID); //try to unlock 41*6b13307fSandi } 42*6b13307fSandi 43*6b13307fSandi //handle export 44*6b13307fSandi if(substr($ACT,0,6) == 'export') 45*6b13307fSandi $ACT = act_export($ACT); 46*6b13307fSandi 47*6b13307fSandi //display some infos 48*6b13307fSandi if($ACT == 'check'){ 49*6b13307fSandi check(); 50*6b13307fSandi $ACT = 'show'; 51*6b13307fSandi } 52*6b13307fSandi 53*6b13307fSandi //check if searchword was given - else just show 54*6b13307fSandi if($ACT == 'search' && empty($QUERY)){ 55*6b13307fSandi $ACT = 'show'; 56*6b13307fSandi } 57*6b13307fSandi 58*6b13307fSandi //fixme sanitize $ACT 59*6b13307fSandi 60*6b13307fSandi //call template FIXME: all needed vars available? 61*6b13307fSandi header('Content-Type: text/html; charset=utf-8'); 62*6b13307fSandi include(DOKU_INC.'tpl/'.$conf['template'].'/main.php'); 63*6b13307fSandi} 64*6b13307fSandi 65*6b13307fSandi/** 66*6b13307fSandi * Run permissionchecks 67*6b13307fSandi * 68*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 69*6b13307fSandi */ 70*6b13307fSandifunction act_permcheck($act){ 71*6b13307fSandi if(in_array($act,array('save','preview','edit'))){ 72*6b13307fSandi if($INFO['exists']){ 73*6b13307fSandi $permneed = AUTH_EDIT; 74*6b13307fSandi }else{ 75*6b13307fSandi $permneed = AUTH_CREATE; 76*6b13307fSandi } 77*6b13307fSandi }elseif(in_array($act,array('login','register','search','recent'))){ 78*6b13307fSandi $permneed = AUTH_NONE; 79*6b13307fSandi }else{ 80*6b13307fSandi $permneed = AUTH_READ; 81*6b13307fSandi } 82*6b13307fSandi if(! auth_quickaclcheck($ID) >= $permneed){ 83*6b13307fSandi return 'denied'; 84*6b13307fSandi } 85*6b13307fSandi 86*6b13307fSandi return $act; 87*6b13307fSandi} 88*6b13307fSandi 89*6b13307fSandi/** 90*6b13307fSandi * Handle 'save' 91*6b13307fSandi * 92*6b13307fSandi * Checks for spam and conflicts and saves the page. 93*6b13307fSandi * Does a redirect to show the page afterwards or 94*6b13307fSandi * returns a new action. 95*6b13307fSandi * 96*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 97*6b13307fSandi */ 98*6b13307fSandifunction act_save($act){ 99*6b13307fSandi global $ID; 100*6b13307fSandi global $DATE; 101*6b13307fSandi global $PRE; 102*6b13307fSandi global $TEXT; 103*6b13307fSandi global $SUF; 104*6b13307fSandi global $SUM; 105*6b13307fSandi 106*6b13307fSandi //spam check 107*6b13307fSandi if(checkwordblock()) 108*6b13307fSandi return 'wordblock'; 109*6b13307fSandi //conflict check //FIXME use INFO 110*6b13307fSandi if($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ) 111*6b13307fSandi return 'conflict'; 112*6b13307fSandi 113*6b13307fSandi //save it 114*6b13307fSandi saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con 115*6b13307fSandi //unlock it 116*6b13307fSandi unlock($ID); 117*6b13307fSandi 118*6b13307fSandi //show it 119*6b13307fSandi session_write_close(); 120*6b13307fSandi header("Location: ".wl($ID,'',true)); 121*6b13307fSandi exit(); 122*6b13307fSandi} 123*6b13307fSandi 124*6b13307fSandi/** 125*6b13307fSandi * Handle 'login', 'logout', 'register' 126*6b13307fSandi * 127*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 128*6b13307fSandi */ 129*6b13307fSandifunction act_auth($act){ 130*6b13307fSandi //already logged in? 131*6b13307fSandi if($_SERVER['REMOTE_USER'] && $act=='login') 132*6b13307fSandi return 'show'; 133*6b13307fSandi 134*6b13307fSandi //handle logout 135*6b13307fSandi if($act=='logout'){ 136*6b13307fSandi auth_logoff(); 137*6b13307fSandi return 'login'; 138*6b13307fSandi } 139*6b13307fSandi 140*6b13307fSandi //handle register 141*6b13307fSandi if($act=='register' && register()){ 142*6b13307fSandi $act='login'; 143*6b13307fSandi } 144*6b13307fSandi 145*6b13307fSandi return $act; 146*6b13307fSandi} 147*6b13307fSandi 148*6b13307fSandi/** 149*6b13307fSandi * Handle 'edit', 'preview' 150*6b13307fSandi * 151*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 152*6b13307fSandi */ 153*6b13307fSandifunction act_edit($act){ 154*6b13307fSandi //check if locked by anyone - if not lock for my self 155*6b13307fSandi $lockedby = checklock($ID); 156*6b13307fSandi if($lockedby) return 'locked'; 157*6b13307fSandi 158*6b13307fSandi lock($ID); 159*6b13307fSandi return $act; 160*6b13307fSandi} 161*6b13307fSandi 162*6b13307fSandi/** 163*6b13307fSandi * Handle 'edit', 'preview' 164*6b13307fSandi * 165*6b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 166*6b13307fSandi */ 167*6b13307fSandifunction act_export($act){ 168*6b13307fSandi global $ID; 169*6b13307fSandi global $REV; 170*6b13307fSandi 171*6b13307fSandi if($act == 'export_html'){ 172*6b13307fSandi header('Content-Type: text/html; charset=utf-8'); 173*6b13307fSandi ptln('<html>'); 174*6b13307fSandi ptln('<head>'); 175*6b13307fSandi tpl_metaheaders(); 176*6b13307fSandi ptln('</head>'); 177*6b13307fSandi ptln('<body>'); 178*6b13307fSandi print parsedWiki($ID,$REV,false); 179*6b13307fSandi ptln('</body>'); 180*6b13307fSandi ptln('</html>'); 181*6b13307fSandi exit; 182*6b13307fSandi } 183*6b13307fSandi 184*6b13307fSandi if($act == 'export_raw'){ 185*6b13307fSandi header('Content-Type: text/plain; charset=utf-8'); 186*6b13307fSandi print rawWiki($ID,$REV); 187*6b13307fSandi exit; 188*6b13307fSandi } 189*6b13307fSandi 190*6b13307fSandi return 'show'; 191*6b13307fSandi} 192*6b13307fSandi?> 193