xref: /dokuwiki/doku.php (revision 3a8a9050bc97ca54a26f0163fb9b8d50c82f8b3d)
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  $TEXT  = cleanText($_POST['wikitext']);
30  $PRE   = cleanText($_POST['prefix']);
31  $SUF   = cleanText($_POST['suffix']);
32  $SUM   = $_REQUEST['summary'];
33
34  //we accept the do param as HTTP header, too:
35  if(!empty($_SERVER['HTTP_X_DOKUWIKI_DO'])){
36    $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
37  }
38
39  if(!empty($IDX)) $ACT='index';
40  //set defaults
41  if(empty($ID))  $ID  = $conf['start'];
42  if(empty($ACT)) $ACT = 'show';
43
44
45  if($ACT == 'debug'){
46    html_debug();
47    exit;
48  }
49
50  //already logged in?
51  if($_SERVER['REMOTE_USER'] && $ACT=='login') $ACT='show';
52  //handle logout
53  if($ACT=='logout'){
54    auth_logoff();
55    $ACT='login';
56  }
57
58  //handle register
59  if($ACT=='register' && register()){
60    $ACT='login';
61  }
62
63  //do saving after spam- and conflictcheck
64  if($ACT == $lang['btn_save'] && auth_quickaclcheck($ID)){
65    if(checkwordblock()){
66      //spam detected
67      $ACT = 'wordblock';
68    }elseif($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ){
69      //newer version available -> ask what to do
70      $ACT = 'conflict';
71    }else{
72      //save it
73      saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con
74      //unlock it
75      unlock($id);
76      //show it
77      header("Location: ".wl($ID,'',true));
78      exit();
79    }
80  }
81
82  //make infos about current page available
83  $INFO = pageinfo();
84
85  //Editing: check if locked by anyone - if not lock for my self
86  if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){
87    $lockedby = checklock($ID);
88    if($lockedby){
89      $ACT = 'locked';
90    }else{
91      lock($ID);
92    }
93  }else{
94    //try to unlock
95    unlock($ID);
96  }
97
98
99  //display some infos
100  if($ACT == 'check'){
101    check();
102    $ACT = 'show';
103  }
104
105  //check if searchword was given - else just show
106  if($ACT == 'search' && empty($QUERY)){
107    $ACT = 'show';
108  }
109
110  //check which permission is needed
111  if(in_array($ACT,array('preview','wordblock','conflict','lockedby'))){
112    if($INFO['exists']){
113      $permneed = AUTH_EDIT;
114    }else{
115      $permneed = AUTH_CREATE;
116    }
117  }elseif(in_array($ACT,array('login','register','search','recent'))){
118    $permneed = AUTH_NONE;
119  }else{
120    $permneed = AUTH_READ;
121  }
122
123  //start output
124  header('Content-Type: text/html; charset='.$lang['encoding']);
125  if(substr($ACT,0,6) != 'export') html_header();
126  if(html_acl($permneed)){
127    if($ACT == 'edit'){
128      html_edit();
129    }elseif($ACT == $lang['btn_preview']){
130      html_edit($TEXT);
131      html_show($TEXT);
132    }elseif($ACT == 'wordblock'){
133      html_edit($TEXT,'wordblock');
134    }elseif($ACT == 'search'){
135      html_search();
136    }elseif($ACT == 'revisions'){
137      html_revisions();
138    }elseif($ACT == 'diff'){
139      html_diff();
140    }elseif($ACT == 'recent'){
141      html_recent();
142    }elseif($ACT == 'index'){
143      html_index($IDX);
144    }elseif($ACT == 'backlink'){
145      html_backlinks();
146    }elseif($ACT == 'conflict'){
147      html_conflict(con($PRE,$TEXT,$SUF),$SUM);
148      html_diff(con($PRE,$TEXT,$SUF),false);
149    }elseif($ACT == 'locked'){
150      html_locked($lockedby);
151    }elseif($ACT == 'login'){
152      html_login();
153    }elseif($ACT == 'register' && $conf['openregister']){
154      html_register();
155    }elseif($ACT == 'export_html'){
156      html_head();
157			print "<body>\n";
158			print parsedWiki($ID,$REV,false);
159			print "</body>\n</html>\n";
160		}elseif($ACT == 'export_raw'){
161			header("Content-Type: text/plain");
162      print rawWiki($ID,$REV);
163    }else{
164      $ACT='show';
165      html_show();
166    }
167  }
168  if(substr($ACT,0,6) != 'export') html_footer();
169
170
171  //restore old umask
172  umask($conf['oldumask']);
173?>
174