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