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