1f3f0262cSandi<?php 215fae107Sandi/** 315fae107Sandi * DokuWiki mainscript 415fae107Sandi * 515fae107Sandi * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 615fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 715fae107Sandi */ 815fae107Sandi 9ed7b5f09Sandi if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__)).'/'); 10ed7b5f09Sandi require_once(DOKU_INC.'inc/init.php'); 11ed7b5f09Sandi require_once(DOKU_INC.'inc/common.php'); 12ed7b5f09Sandi require_once(DOKU_INC.'inc/html.php'); 13ed7b5f09Sandi require_once(DOKU_INC.'inc/parser.php'); 14ed7b5f09Sandi require_once(DOKU_INC.'lang/en/lang.php'); 15ed7b5f09Sandi require_once(DOKU_INC.'lang/'.$conf['lang'].'/lang.php'); 16ed7b5f09Sandi require_once(DOKU_INC.'inc/auth.php'); 17f3f0262cSandi 18f3f0262cSandi //import variables 19f3f0262cSandi $QUERY = trim($_REQUEST['id']); 20f3f0262cSandi $ID = cleanID($_REQUEST['id']); 21f3f0262cSandi $REV = $_REQUEST['rev']; 22f3f0262cSandi $ACT = $_REQUEST['do']; 23f3f0262cSandi $IDX = $_REQUEST['idx']; 24f3f0262cSandi $DATE = $_REQUEST['date']; 25f3f0262cSandi $RANGE = $_REQUEST['lines']; 26f3f0262cSandi $HIGH = $_REQUEST['s']; 27f3f0262cSandi if(empty($HIGH)) $HIGH = getGoogleQuery(); 28f3f0262cSandi 2910a76f6fSfrank# $ACL_USER = urldecode($_REQUEST['acl_user']); 3010a76f6fSfrank# $ACL_SCOPE = urldecode($_REQUEST['acl_scope']); 3110a76f6fSfrank# $ACL_LEVEL = $_REQUEST['acl_level']; 3210a76f6fSfrank# $ACL_CHECKBOX = $_REQUEST['acl_checkbox']; 3310a76f6fSfrank 34f3f0262cSandi $TEXT = cleanText($_POST['wikitext']); 35f3f0262cSandi $PRE = cleanText($_POST['prefix']); 36f3f0262cSandi $SUF = cleanText($_POST['suffix']); 37f3f0262cSandi $SUM = $_REQUEST['summary']; 38f3f0262cSandi 39*258641c6Sandi //sanitize revision 40*258641c6Sandi $REV = preg_replace('/[^0-9]/','',$REV); 41*258641c6Sandi 42f3f0262cSandi //we accept the do param as HTTP header, too: 43f3f0262cSandi if(!empty($_SERVER['HTTP_X_DOKUWIKI_DO'])){ 44f3f0262cSandi $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO'])); 45f3f0262cSandi } 46f3f0262cSandi 47f3f0262cSandi if(!empty($IDX)) $ACT='index'; 48f3f0262cSandi //set defaults 49f3f0262cSandi if(empty($ID)) $ID = $conf['start']; 50f3f0262cSandi if(empty($ACT)) $ACT = 'show'; 51f3f0262cSandi 52f3f0262cSandi 53f3f0262cSandi if($ACT == 'debug'){ 54f3f0262cSandi html_debug(); 55f3f0262cSandi exit; 56f3f0262cSandi } 57f3f0262cSandi 5879b608ceSandi //make infos about the selected page available 5979b608ceSandi $INFO = pageinfo(); 6079b608ceSandi 61f3f0262cSandi //already logged in? 62f3f0262cSandi if($_SERVER['REMOTE_USER'] && $ACT=='login') $ACT='show'; 63f3f0262cSandi //handle logout 64f3f0262cSandi if($ACT=='logout'){ 65f3f0262cSandi auth_logoff(); 66f3f0262cSandi $ACT='login'; 67f3f0262cSandi } 68f3f0262cSandi 69f3f0262cSandi //handle register 70f3f0262cSandi if($ACT=='register' && register()){ 71f3f0262cSandi $ACT='login'; 72f3f0262cSandi } 73f3f0262cSandi 7410a76f6fSfrank/* 7510a76f6fSfrank //handle acl_admin stuff, add acl entry 7610a76f6fSfrank if( ($ACT=='acl_admin_add') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 7710a76f6fSfrank acl_admin_change($ACL_SCOPE, $ACL_USER, "", $ACL_CHECKBOX); 7810a76f6fSfrank # reload ACL into a global array 7910a76f6fSfrank //$AUTH_ACL = file('conf/acl.auth'); 8010a76f6fSfrank $AUTH_ACL = load_acl_config(); 8110a76f6fSfrank $ACT='acl_admin'; 8210a76f6fSfrank } 8310a76f6fSfrank 8410a76f6fSfrank //handle acl_admin stuff, change acl entry 8510a76f6fSfrank if( ($ACT=='acl_admin_change') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 8610a76f6fSfrank acl_admin_change($ACL_SCOPE, $ACL_USER, $ACL_LEVEL, $ACL_CHECKBOX); 8710a76f6fSfrank # reload ACL into a global array 8810a76f6fSfrank $AUTH_ACL = load_acl_config(); 8910a76f6fSfrank $ACT='acl_admin'; 9010a76f6fSfrank } 9110a76f6fSfrank 9210a76f6fSfrank //handle acl_admin_del stuff, remove acl entry 9310a76f6fSfrank if( ($ACT=='acl_admin_del') && (auth_quickaclcheck($ID) == AUTH_GRANT)) { 9410a76f6fSfrank acl_admin_del($ACL_SCOPE, $ACL_USER, $ACL_LEVEL); 9510a76f6fSfrank # reload ACL into a global array 9610a76f6fSfrank $AUTH_ACL = load_acl_config(); 9710a76f6fSfrank $ACT='acl_admin'; 9810a76f6fSfrank } 9910a76f6fSfrank*/ 10010a76f6fSfrank 101f3f0262cSandi //do saving after spam- and conflictcheck 102f3f0262cSandi if($ACT == $lang['btn_save'] && auth_quickaclcheck($ID)){ 103f3f0262cSandi if(checkwordblock()){ 104f3f0262cSandi //spam detected 105f3f0262cSandi $ACT = 'wordblock'; 106f3f0262cSandi }elseif($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ){ 107f3f0262cSandi //newer version available -> ask what to do 108f3f0262cSandi $ACT = 'conflict'; 109f3f0262cSandi }else{ 110f3f0262cSandi //save it 111f3f0262cSandi saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con 112f3f0262cSandi //unlock it 113f3f0262cSandi unlock($id); 114f3f0262cSandi //show it 115ed7b5f09Sandi header("Location: ".wl($ID,'',true)); 116f3f0262cSandi exit(); 117f3f0262cSandi } 118f3f0262cSandi } 119f3f0262cSandi 120f3f0262cSandi //Editing: check if locked by anyone - if not lock for my self 1214721e2caSandi if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){ 122f3f0262cSandi $lockedby = checklock($ID); 123f3f0262cSandi if($lockedby){ 124f3f0262cSandi $ACT = 'locked'; 125f3f0262cSandi }else{ 126f3f0262cSandi lock($ID); 127f3f0262cSandi } 128f3f0262cSandi }else{ 129f3f0262cSandi //try to unlock 130f3f0262cSandi unlock($ID); 131f3f0262cSandi } 132f3f0262cSandi 133f3f0262cSandi 134f3f0262cSandi //display some infos 135f3f0262cSandi if($ACT == 'check'){ 136f3f0262cSandi check(); 137f3f0262cSandi $ACT = 'show'; 138f3f0262cSandi } 139f3f0262cSandi 14070787824Sandi //check if searchword was given - else just show 14170787824Sandi if($ACT == 'search' && empty($QUERY)){ 14270787824Sandi $ACT = 'show'; 14370787824Sandi } 14470787824Sandi 145f3f0262cSandi //check which permission is needed 146f3f0262cSandi if(in_array($ACT,array('preview','wordblock','conflict','lockedby'))){ 147f3f0262cSandi if($INFO['exists']){ 148f3f0262cSandi $permneed = AUTH_EDIT; 149f3f0262cSandi }else{ 150f3f0262cSandi $permneed = AUTH_CREATE; 151f3f0262cSandi } 152e647351cSandi }elseif(in_array($ACT,array('login','register','search','recent'))){ 153f3f0262cSandi $permneed = AUTH_NONE; 154e647351cSandi }else{ 155e647351cSandi $permneed = AUTH_READ; 156f3f0262cSandi } 157f3f0262cSandi 158f3f0262cSandi //start output 159907ac107Sandi header('Content-Type: text/html; charset='.$lang['encoding']); 160f3f0262cSandi if(substr($ACT,0,6) != 'export') html_header(); 161f3f0262cSandi if(html_acl($permneed)){ 162f3f0262cSandi if($ACT == 'edit'){ 163f3f0262cSandi html_edit(); 164f3f0262cSandi }elseif($ACT == $lang['btn_preview']){ 165f3f0262cSandi html_edit($TEXT); 166f3f0262cSandi html_show($TEXT); 167f3f0262cSandi }elseif($ACT == 'wordblock'){ 168f3f0262cSandi html_edit($TEXT,'wordblock'); 16970787824Sandi }elseif($ACT == 'search'){ 170f3f0262cSandi html_search(); 171f3f0262cSandi }elseif($ACT == 'revisions'){ 172f3f0262cSandi html_revisions(); 173f3f0262cSandi }elseif($ACT == 'diff'){ 174f3f0262cSandi html_diff(); 175f3f0262cSandi }elseif($ACT == 'recent'){ 176f3f0262cSandi html_recent(); 177f3f0262cSandi }elseif($ACT == 'index'){ 178f3f0262cSandi html_index($IDX); 179f3f0262cSandi }elseif($ACT == 'backlink'){ 180f3f0262cSandi html_backlinks(); 181f3f0262cSandi }elseif($ACT == 'conflict'){ 182f3f0262cSandi html_conflict(con($PRE,$TEXT,$SUF),$SUM); 183f3f0262cSandi html_diff(con($PRE,$TEXT,$SUF),false); 184f3f0262cSandi }elseif($ACT == 'locked'){ 185f3f0262cSandi html_locked($lockedby); 18610a76f6fSfrank# }elseif( ($ACT == 'acl_admin') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 18710a76f6fSfrank# html_acl_admin(); 188f3f0262cSandi }elseif($ACT == 'login'){ 189f3f0262cSandi html_login(); 190f3f0262cSandi }elseif($ACT == 'register' && $conf['openregister']){ 191f3f0262cSandi html_register(); 192f3f0262cSandi }elseif($ACT == 'export_html'){ 193f3f0262cSandi html_head(); 194f3f0262cSandi print "<body>\n"; 195f3f0262cSandi print parsedWiki($ID,$REV,false); 196f3f0262cSandi print "</body>\n</html>\n"; 197f3f0262cSandi }elseif($ACT == 'export_raw'){ 198f3f0262cSandi header("Content-Type: text/plain"); 199f3f0262cSandi print rawWiki($ID,$REV); 200f3f0262cSandi }else{ 201f3f0262cSandi $ACT='show'; 202f3f0262cSandi html_show(); 203f3f0262cSandi } 204f3f0262cSandi } 205f3f0262cSandi if(substr($ACT,0,6) != 'export') html_footer(); 206f3f0262cSandi 207b3222a5cSandi 208b3222a5cSandi //restore old umask 209b3222a5cSandi umask($conf['oldumask']); 210f3f0262cSandi?> 211