xref: /dokuwiki/doku.php (revision 258641c6f7e2489c78367a0a864b000f2935fefa)
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