1<?php 2/** 3 * DokuWiki mainscript 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author Andreas Gohr <andi@splitbrain.org> 7 */ 8 9 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__)).'/'); 10 require_once(DOKU_INC.'inc/init.php'); 11 require_once(DOKU_INC.'inc/common.php'); 12 require_once(DOKU_INC.'inc/html.php'); 13 require_once(DOKU_INC.'inc/parser.php'); 14 require_once(DOKU_INC.'lang/en/lang.php'); 15 require_once(DOKU_INC.'lang/'.$conf['lang'].'/lang.php'); 16 require_once(DOKU_INC.'inc/auth.php'); 17 18 //import variables 19 $QUERY = trim($_REQUEST['id']); 20 $ID = cleanID($_REQUEST['id']); 21 $REV = $_REQUEST['rev']; 22 $ACT = $_REQUEST['do']; 23 $IDX = $_REQUEST['idx']; 24 $DATE = $_REQUEST['date']; 25 $RANGE = $_REQUEST['lines']; 26 $HIGH = $_REQUEST['s']; 27 if(empty($HIGH)) $HIGH = getGoogleQuery(); 28 29# $ACL_USER = urldecode($_REQUEST['acl_user']); 30# $ACL_SCOPE = urldecode($_REQUEST['acl_scope']); 31# $ACL_LEVEL = $_REQUEST['acl_level']; 32# $ACL_CHECKBOX = $_REQUEST['acl_checkbox']; 33 34 $TEXT = cleanText($_POST['wikitext']); 35 $PRE = cleanText($_POST['prefix']); 36 $SUF = cleanText($_POST['suffix']); 37 $SUM = $_REQUEST['summary']; 38 39 //we accept the do param as HTTP header, too: 40 if(!empty($_SERVER['HTTP_X_DOKUWIKI_DO'])){ 41 $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO'])); 42 } 43 44 if(!empty($IDX)) $ACT='index'; 45 //set defaults 46 if(empty($ID)) $ID = $conf['start']; 47 if(empty($ACT)) $ACT = 'show'; 48 49 50 if($ACT == 'debug'){ 51 html_debug(); 52 exit; 53 } 54 55 //already logged in? 56 if($_SERVER['REMOTE_USER'] && $ACT=='login') $ACT='show'; 57 //handle logout 58 if($ACT=='logout'){ 59 auth_logoff(); 60 $ACT='login'; 61 } 62 63 //handle register 64 if($ACT=='register' && register()){ 65 $ACT='login'; 66 } 67 68/* 69 //handle acl_admin stuff, add acl entry 70 if( ($ACT=='acl_admin_add') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 71 acl_admin_change($ACL_SCOPE, $ACL_USER, "", $ACL_CHECKBOX); 72 # reload ACL into a global array 73 //$AUTH_ACL = file('conf/acl.auth'); 74 $AUTH_ACL = load_acl_config(); 75 $ACT='acl_admin'; 76 } 77 78 //handle acl_admin stuff, change acl entry 79 if( ($ACT=='acl_admin_change') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 80 acl_admin_change($ACL_SCOPE, $ACL_USER, $ACL_LEVEL, $ACL_CHECKBOX); 81 # reload ACL into a global array 82 $AUTH_ACL = load_acl_config(); 83 $ACT='acl_admin'; 84 } 85 86 //handle acl_admin_del stuff, remove acl entry 87 if( ($ACT=='acl_admin_del') && (auth_quickaclcheck($ID) == AUTH_GRANT)) { 88 acl_admin_del($ACL_SCOPE, $ACL_USER, $ACL_LEVEL); 89 # reload ACL into a global array 90 $AUTH_ACL = load_acl_config(); 91 $ACT='acl_admin'; 92 } 93*/ 94 95 //do saving after spam- and conflictcheck 96 if($ACT == $lang['btn_save'] && auth_quickaclcheck($ID)){ 97 if(checkwordblock()){ 98 //spam detected 99 $ACT = 'wordblock'; 100 }elseif($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ){ 101 //newer version available -> ask what to do 102 $ACT = 'conflict'; 103 }else{ 104 //save it 105 saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con 106 //unlock it 107 unlock($id); 108 //show it 109 header("Location: ".wl($ID,'',true)); 110 exit(); 111 } 112 } 113 114 //make infos about current page available 115 $INFO = pageinfo(); 116 117 //Editing: check if locked by anyone - if not lock for my self 118 if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){ 119 $lockedby = checklock($ID); 120 if($lockedby){ 121 $ACT = 'locked'; 122 }else{ 123 lock($ID); 124 } 125 }else{ 126 //try to unlock 127 unlock($ID); 128 } 129 130 131 //display some infos 132 if($ACT == 'check'){ 133 check(); 134 $ACT = 'show'; 135 } 136 137 //check if searchword was given - else just show 138 if($ACT == 'search' && empty($QUERY)){ 139 $ACT = 'show'; 140 } 141 142 //check which permission is needed 143 if(in_array($ACT,array('preview','wordblock','conflict','lockedby'))){ 144 if($INFO['exists']){ 145 $permneed = AUTH_EDIT; 146 }else{ 147 $permneed = AUTH_CREATE; 148 } 149 }elseif(in_array($ACT,array('login','register','search','recent'))){ 150 $permneed = AUTH_NONE; 151 }else{ 152 $permneed = AUTH_READ; 153 } 154 155 //start output 156 header('Content-Type: text/html; charset='.$lang['encoding']); 157 if(substr($ACT,0,6) != 'export') html_header(); 158 if(html_acl($permneed)){ 159 if($ACT == 'edit'){ 160 html_edit(); 161 }elseif($ACT == $lang['btn_preview']){ 162 html_edit($TEXT); 163 html_show($TEXT); 164 }elseif($ACT == 'wordblock'){ 165 html_edit($TEXT,'wordblock'); 166 }elseif($ACT == 'search'){ 167 html_search(); 168 }elseif($ACT == 'revisions'){ 169 html_revisions(); 170 }elseif($ACT == 'diff'){ 171 html_diff(); 172 }elseif($ACT == 'recent'){ 173 html_recent(); 174 }elseif($ACT == 'index'){ 175 html_index($IDX); 176 }elseif($ACT == 'backlink'){ 177 html_backlinks(); 178 }elseif($ACT == 'conflict'){ 179 html_conflict(con($PRE,$TEXT,$SUF),$SUM); 180 html_diff(con($PRE,$TEXT,$SUF),false); 181 }elseif($ACT == 'locked'){ 182 html_locked($lockedby); 183# }elseif( ($ACT == 'acl_admin') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 184# html_acl_admin(); 185 }elseif($ACT == 'login'){ 186 html_login(); 187 }elseif($ACT == 'register' && $conf['openregister']){ 188 html_register(); 189 }elseif($ACT == 'export_html'){ 190 html_head(); 191 print "<body>\n"; 192 print parsedWiki($ID,$REV,false); 193 print "</body>\n</html>\n"; 194 }elseif($ACT == 'export_raw'){ 195 header("Content-Type: text/plain"); 196 print rawWiki($ID,$REV); 197 }else{ 198 $ACT='show'; 199 html_show(); 200 } 201 } 202 if(substr($ACT,0,6) != 'export') html_footer(); 203 204 205 //restore old umask 206 umask($conf['oldumask']); 207?> 208