]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/main.php
Found more strings needing gettext _() and sprintf. Error strings containing function...
[SourceForge/phpwiki.git] / lib / main.php
1 <?php
2 rcs_id('$Id: main.php,v 1.22 2001-12-28 09:53:15 carstenklapp Exp $');
3
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');
10
11
12 function deduce_pagename ($request) {
13     if ($request->getArg('pagename'))
14         return $request->getArg('pagename');
15
16     if (USE_PATH_INFO) {
17         $pathinfo = $request->get('PATH_INFO');
18         if (ereg('^' . PATH_INFO_PREFIX . '(..*)$', $pathinfo, $m))
19             return $m[1];
20     }
21
22     $query_string = $request->get('QUERY_STRING');
23     if (preg_match('/^[^&=]+$/', $query_string))
24         return urldecode($query_string);
25     
26     return _("HomePage");
27 }
28
29 function is_safe_action ($action) {
30     if (! ZIPDUMP_AUTH and ($action == 'zip' || $action == 'xmldump'))
31         return true;
32     return in_array ( $action, array('browse',
33                                      'info', 'diff', 'search',
34                                      'edit', 'save',
35                                      'login', 'logout',
36                                      'setprefs') );
37 }
38
39 function get_auth_mode ($action) {
40     switch ($action) {
41     case 'logout':
42         return  'LOGOUT';
43     case 'login':
44         return 'LOGIN';
45     default:
46         if (is_safe_action($action))
47             return 'ANON_OK';
48         else
49             return 'REQUIRE_AUTH';
50     }
51 }
52
53 function main ($request) {
54
55     
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'),
61                                           1));
62         exit;
63     }
64
65     $request->setArg('pagename', deduce_pagename($request));
66     global $pagename;               // FIXME: can we make this non-global?
67     $pagename = $request->getArg('pagename');
68     
69     $action = $request->getArg('action');
70     if (!$action) {
71         $action = 'browse';
72         $request->setArg('action', $action);
73     }
74     
75     global $user;               // FIXME: can we make this non-global?
76     $user = new WikiUser($request, get_auth_mode($action));
77     //FIXME:
78     //if ($user->is_authenticated())
79     //  $LogEntry->user = $user->id();
80
81     // All requests require the database
82     global $dbi;                // FIXME: can we keep this non-global?
83     $dbi = WikiDB::open($GLOBALS['DBParams']);
84     
85     if ( $action == 'browse' && $request->getArg('pagename') == _("HomePage") ) {
86         // if there is no HomePage, create a basic set of Wiki pages
87         if ( ! $dbi->isWikiPage(_("HomePage")) ) {
88             include_once("lib/loadsave.php");
89             SetupWiki($dbi);
90             ExitWiki();
91         }
92     }
93
94     // FIXME: I think this is redundant.
95     if (!is_safe_action($action))
96         $user->must_be_admin($action);
97
98     if (isset($DisabledActions) && in_array($action, $DisabledActions))
99         ExitWiki(sprintf(_("Action %s is disabled in this wiki."), $action));
100    
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);
106     }
107
108     
109     switch ($action) {
110     case 'edit':
111         $request->compress_output();
112         include "lib/editpage.php";
113         editPage($dbi, $request);
114         break;
115
116     case 'search':
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 = _("FullTextSearch");
121         }
122         else {
123             $search_page = _("TitleSearch");
124         }
125         $request->redirect(WikiURL($search_page,
126                                    array('s' => $request->getArg('searchterm')),
127                                    'absolute_url'));
128         break;
129       
130     case 'save':
131         $request->compress_output();
132         include "lib/savepage.php";
133         savePage($dbi, $request);
134         break;
135     case 'diff':
136         $request->compress_output();
137         include_once "lib/diff.php";
138         showDiff($dbi, $request);
139         break;
140       
141     case 'zip':
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";
147         break;
148
149     /* Not yet implemented:    
150     case 'xmldump':
151         // FIXME:
152         $limit = 1;
153         if ($request->getArg('include') == 'all')
154             $limit = 0;
155         require_once("lib/libxml.php");
156         $xmlwriter = new WikiXmlWriter;
157         $xmlwriter->begin();
158         $xmlwriter->writeComment("PhpWiki " . PHPWIKI_VERSION . " source:\n$RCS_IDS\n");
159         $xmlwriter->writeDatabase($dbi, $limit);
160         $xmlwriter->end();
161         break;
162     */
163         
164     case 'upload':
165         include_once("lib/loadsave.php");
166         LoadPostFile($dbi, $request);
167         break;
168    
169     case 'dumpserial':
170         include_once("lib/loadsave.php");
171         DumpToDir($dbi, $request);
172         break;
173
174     case 'loadfile':
175         include_once("lib/loadsave.php");
176         LoadFileOrDir($dbi, $request);
177         break;
178
179     case 'remove':
180         include 'lib/removepage.php';
181         break;
182     
183     case 'lock':
184     case 'unlock':
185         $user->must_be_admin(_("lock or unlock pages"));
186         $page = $dbi->getPage($request->getArg('pagename'));
187         $page->set('locked', $action == 'lock');
188
189         $request->compress_output();
190         include_once("lib/display.php");
191         displayPage($dbi, $request);
192         break;
193
194     case 'setprefs':
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);
204
205         $request->compress_output();
206         include_once("lib/display.php");
207         displayPage($dbi, $request);
208         break;
209    
210     case 'browse':
211     case 'login':
212     case 'logout':
213         $request->compress_output();
214         include_once("lib/display.php");
215         displayPage($dbi, $request);
216         break;
217
218     default:
219         echo QElement('p', sprintf(_("Bad action: '%s'"), urlencode($action)));
220         break;
221     }
222     ExitWiki();
223 }
224
225 $request = new Request;
226 main($request);
227
228
229 // Local Variables:
230 // mode: php
231 // tab-width: 8
232 // c-basic-offset: 4
233 // c-hanging-comment-ender-p: nil
234 // indent-tabs-mode: nil
235 // End:   
236 ?>