2 rcs_id('$Id: main.php,v 1.20 2001-12-14 20:28:02 dairiki Exp $');
4 include "lib/config.php";
5 include "lib/stdlib.php";
6 //include "lib/logger.php";
7 require_once('lib/Request.php');
8 require_once("lib/WikiUser.php");
9 require_once('lib/WikiDB.php');
12 function deduce_pagename ($request) {
13 if ($request->getArg('pagename'))
14 return $request->getArg('pagename');
17 $pathinfo = $request->get('PATH_INFO');
18 if (ereg('^' . PATH_INFO_PREFIX . '(..*)$', $pathinfo, $m))
22 $query_string = $request->get('QUERY_STRING');
23 if (preg_match('/^[^&=]+$/', $query_string))
24 return urldecode($query_string);
26 return gettext("HomePage");
29 function is_safe_action ($action) {
30 if (! ZIPDUMP_AUTH and ($action == 'zip' || $action == 'xmldump'))
32 return in_array ( $action, array('browse',
33 'info', 'diff', 'search',
39 function get_auth_mode ($action) {
46 if (is_safe_action($action))
49 return 'REQUIRE_AUTH';
53 function main ($request) {
56 if (USE_PATH_INFO && ! $request->get('PATH_INFO')
57 && ! preg_match(',/$,', $request->get('REDIRECT_URL'))) {
58 $request->redirect(SERVER_URL
59 . preg_replace('/(\?|$)/', '/\1',
60 $request->get('REQUEST_URI'),
65 $request->setArg('pagename', deduce_pagename($request));
66 global $pagename; // FIXME: can we make this non-global?
67 $pagename = $request->getArg('pagename');
69 $action = $request->getArg('action');
72 $request->setArg('action', $action);
75 global $user; // FIXME: can we make this non-global?
76 $user = new WikiUser($request, get_auth_mode($action));
78 //if ($user->is_authenticated())
79 // $LogEntry->user = $user->id();
81 // All requests require the database
82 global $dbi; // FIXME: can we keep this non-global?
83 $dbi = WikiDB::open($GLOBALS['DBParams']);
85 if ( $action == 'browse' && $request->getArg('pagename') == gettext("HomePage") ) {
86 // if there is no HomePage, create a basic set of Wiki pages
87 if ( ! $dbi->isWikiPage(gettext("HomePage")) ) {
88 include_once("lib/loadsave.php");
94 // FIXME: I think this is redundant.
95 if (!is_safe_action($action))
96 $user->must_be_admin($action);
98 if (isset($DisabledActions) && in_array($action, $DisabledActions))
99 ExitWiki(sprintf(gettext("Action %s is disabled in this wiki."), $action));
101 // Enable the output of most of the warning messages.
102 // The warnings will screw up zip files and setpref though.
103 global $ErrorManager;
104 if ($action != 'zip' && $action != 'setprefs') {
105 $ErrorManager->setPostponedErrorMask(E_NOTICE|E_USER_NOTICE);
111 $request->compress_output();
112 include "lib/editpage.php";
113 editPage($dbi, $request);
117 // This is obsolete: reformulate URL and redirect.
118 // FIXME: this whole section should probably be deleted.
119 if ($request->getArg('searchtype') == 'full') {
120 $search_page = gettext('FullTextSearch');
123 $search_page = gettext('TitleSearch');
125 $request->redirect(WikiURL($search_page,
126 array('s' => $request->getArg('searchterm')),
131 $request->compress_output();
132 include "lib/savepage.php";
133 savePage($dbi, $request);
136 $request->compress_output();
137 include_once "lib/diff.php";
138 showDiff($dbi, $request);
142 include_once("lib/loadsave.php");
143 MakeWikiZip($dbi, $request);
144 // I don't think it hurts to add cruft at the end of the zip file.
145 echo "\n========================================================\n";
146 echo "PhpWiki " . PHPWIKI_VERSION . " source:\n$GLOBALS[RCS_IDS]\n";
149 /* Not yet implemented:
153 if ($request->getArg('include') == 'all')
155 require_once("lib/libxml.php");
156 $xmlwriter = new WikiXmlWriter;
158 $xmlwriter->writeComment("PhpWiki " . PHPWIKI_VERSION . " source:\n$RCS_IDS\n");
159 $xmlwriter->writeDatabase($dbi, $limit);
165 include_once("lib/loadsave.php");
166 LoadPostFile($dbi, $request);
170 include_once("lib/loadsave.php");
171 DumpToDir($dbi, $request);
175 include_once("lib/loadsave.php");
176 LoadFileOrDir($dbi, $request);
180 include 'lib/removepage.php';
185 $user->must_be_admin("lock or unlock pages");
186 $page = $dbi->getPage($request->getArg('pagename'));
187 $page->set('locked', $action == 'lock');
189 $request->compress_output();
190 include_once("lib/display.php");
191 displayPage($dbi, $request);
195 $prefs = $user->getPreferences();
196 $edit_area_width = $request->getArg('edit_area_width');
197 $edit_area_height = $request->getArg('edit_area_height');
198 if ($edit_area_width)
199 $prefs['edit_area.width'] = $edit_area_width;
200 if ($edit_area_height)
201 $prefs['edit_area.height'] = $edit_area_height;
202 $user->setPreferences($prefs);
203 $ErrorManager->setPostponedErrorMask(E_ALL & ~E_NOTICE);
205 $request->compress_output();
206 include_once("lib/display.php");
207 displayPage($dbi, $request);
213 $request->compress_output();
214 include_once("lib/display.php");
215 displayPage($dbi, $request);
219 echo QElement('p', sprintf("Bad action: '%s'", urlencode($action)));
225 $request = new Request;
233 // c-hanging-comment-ender-p: nil
234 // indent-tabs-mode: nil