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