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 //sanitize revision 40 $REV = preg_replace('/[^0-9]/','',$REV); 41 42 //we accept the do param as HTTP header, too: 43 if(!empty($_SERVER['HTTP_X_DOKUWIKI_DO'])){ 44 $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO'])); 45 } 46 47 if(!empty($IDX)) $ACT='index'; 48 //set defaults 49 if(empty($ID)) $ID = $conf['start']; 50 if(empty($ACT)) $ACT = 'show'; 51 52 53 if($ACT == 'debug'){ 54 html_debug(); 55 exit; 56 } 57 58 //make infos about the selected page available 59 $INFO = pageinfo(); 60 61 //already logged in? 62 if($_SERVER['REMOTE_USER'] && $ACT=='login') $ACT='show'; 63 //handle logout 64 if($ACT=='logout'){ 65 auth_logoff(); 66 $ACT='login'; 67 } 68 69 //handle register 70 if($ACT=='register' && register()){ 71 $ACT='login'; 72 } 73 74/* 75 //handle acl_admin stuff, add acl entry 76 if( ($ACT=='acl_admin_add') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 77 acl_admin_change($ACL_SCOPE, $ACL_USER, "", $ACL_CHECKBOX); 78 # reload ACL into a global array 79 //$AUTH_ACL = file('conf/acl.auth'); 80 $AUTH_ACL = load_acl_config(); 81 $ACT='acl_admin'; 82 } 83 84 //handle acl_admin stuff, change acl entry 85 if( ($ACT=='acl_admin_change') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 86 acl_admin_change($ACL_SCOPE, $ACL_USER, $ACL_LEVEL, $ACL_CHECKBOX); 87 # reload ACL into a global array 88 $AUTH_ACL = load_acl_config(); 89 $ACT='acl_admin'; 90 } 91 92 //handle acl_admin_del stuff, remove acl entry 93 if( ($ACT=='acl_admin_del') && (auth_quickaclcheck($ID) == AUTH_GRANT)) { 94 acl_admin_del($ACL_SCOPE, $ACL_USER, $ACL_LEVEL); 95 # reload ACL into a global array 96 $AUTH_ACL = load_acl_config(); 97 $ACT='acl_admin'; 98 } 99*/ 100 101 //do saving after spam- and conflictcheck 102 if($ACT == $lang['btn_save'] && auth_quickaclcheck($ID)){ 103 if(checkwordblock()){ 104 //spam detected 105 $ACT = 'wordblock'; 106 }elseif($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ){ 107 //newer version available -> ask what to do 108 $ACT = 'conflict'; 109 }else{ 110 //save it 111 saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con 112 //unlock it 113 unlock($id); 114 //show it 115 header("Location: ".wl($ID,'',true)); 116 exit(); 117 } 118 } 119 120 //Editing: check if locked by anyone - if not lock for my self 121 if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){ 122 $lockedby = checklock($ID); 123 if($lockedby){ 124 $ACT = 'locked'; 125 }else{ 126 lock($ID); 127 } 128 }else{ 129 //try to unlock 130 unlock($ID); 131 } 132 133 134 //display some infos 135 if($ACT == 'check'){ 136 check(); 137 $ACT = 'show'; 138 } 139 140 //check if searchword was given - else just show 141 if($ACT == 'search' && empty($QUERY)){ 142 $ACT = 'show'; 143 } 144 145 //check which permission is needed 146 if(in_array($ACT,array('preview','wordblock','conflict','lockedby'))){ 147 if($INFO['exists']){ 148 $permneed = AUTH_EDIT; 149 }else{ 150 $permneed = AUTH_CREATE; 151 } 152 }elseif(in_array($ACT,array('login','register','search','recent'))){ 153 $permneed = AUTH_NONE; 154 }else{ 155 $permneed = AUTH_READ; 156 } 157 158 //start output 159 header('Content-Type: text/html; charset='.$lang['encoding']); 160 if(substr($ACT,0,6) != 'export') html_header(); 161 if(html_acl($permneed)){ 162 if($ACT == 'edit'){ 163 html_edit(); 164 }elseif($ACT == $lang['btn_preview']){ 165 html_edit($TEXT); 166 html_show($TEXT); 167 }elseif($ACT == 'wordblock'){ 168 html_edit($TEXT,'wordblock'); 169 }elseif($ACT == 'search'){ 170 html_search(); 171 }elseif($ACT == 'revisions'){ 172 html_revisions(); 173 }elseif($ACT == 'diff'){ 174 html_diff(); 175 }elseif($ACT == 'recent'){ 176 html_recent(); 177 }elseif($ACT == 'index'){ 178 html_index($IDX); 179 }elseif($ACT == 'backlink'){ 180 html_backlinks(); 181 }elseif($ACT == 'conflict'){ 182 html_conflict(con($PRE,$TEXT,$SUF),$SUM); 183 html_diff(con($PRE,$TEXT,$SUF),false); 184 }elseif($ACT == 'locked'){ 185 html_locked($lockedby); 186# }elseif( ($ACT == 'acl_admin') && (auth_quickaclcheck($ID) == AUTH_GRANT)){ 187# html_acl_admin(); 188 }elseif($ACT == 'login'){ 189 html_login(); 190 }elseif($ACT == 'register' && $conf['openregister']){ 191 html_register(); 192 }elseif($ACT == 'export_html'){ 193 html_head(); 194 print "<body>\n"; 195 print parsedWiki($ID,$REV,false); 196 print "</body>\n</html>\n"; 197 }elseif($ACT == 'export_raw'){ 198 header("Content-Type: text/plain"); 199 print rawWiki($ID,$REV); 200 }else{ 201 $ACT='show'; 202 html_show(); 203 } 204 } 205 if(substr($ACT,0,6) != 'export') html_footer(); 206 207 208 //restore old umask 209 umask($conf['oldumask']); 210?> 211