]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - index.php
Merge branch '0.7.x' of git@gitorious.org:laconica/dev into 0.7.x
[quix0rs-gnu-social.git] / index.php
1 <?php
2 /**
3  * Laconica - a distributed open-source microblogging tool
4  * Copyright (C) 2008, Controlez-Vous, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 define('INSTALLDIR', dirname(__FILE__));
21 define('LACONICA', true);
22
23 require_once INSTALLDIR . '/lib/common.php';
24
25 $user = null;
26 $action = null;
27
28 function getPath($req) {
29     if (common_config('site', 'fancy')) {
30         return $req['p'];
31     } else if ($_SERVER['PATH_INFO']) {
32         return $_SERVER['PATH_INFO'];
33     } else {
34         return $req['p'];
35     }
36 }
37
38 function main() {
39
40     global $user, $action;
41
42     // XXX: we need a little more structure in this script
43
44     // get and cache current user
45
46     $user = common_current_user();
47
48     // initialize language env
49
50     common_init_language();
51
52     $path = getPath($_REQUEST);
53
54     $r = Router::get();
55
56     $args = $r->map($path);
57
58     if (!$args) {
59         $cac = new ClientErrorAction(_('Unknown page'), 404);
60         $cac->showPage();
61         return;
62     }
63
64     $args = array_merge($args, $_REQUEST);
65
66     $action = $args['action'];
67
68     if (!$action || !preg_match('/^[a-zA-Z0-9_-]*$/', $action)) {
69         common_redirect(common_local_url('public'));
70         return;
71     }
72
73     // If the site is private, and they're not on one of the "public"
74     // parts of the site, redirect to login
75
76     if (!$user && common_config('site', 'private') &&
77         !in_array($action, array('login', 'openidlogin', 'finishopenidlogin',
78                                  'recoverpassword', 'api', 'doc', 'register'))) {
79         common_redirect(common_local_url('login'));
80         return;
81     }
82
83     $action_class = ucfirst($action).'Action';
84
85     if (!class_exists($action_class)) {
86         $cac = new ClientErrorAction(_('Unknown action'), 404);
87         $cac->showPage();
88     } else {
89         $action_obj = new $action_class();
90
91         // XXX: find somewhere for this little block to live
92
93         if ($config['db']['mirror'] && $action_obj->isReadOnly()) {
94             if (is_array($config['db']['mirror'])) {
95                 // "load balancing", ha ha
96                 $k = array_rand($config['db']['mirror']);
97
98                 $mirror = $config['db']['mirror'][$k];
99             } else {
100                 $mirror = $config['db']['mirror'];
101             }
102             $config['db']['database'] = $mirror;
103         }
104
105         try {
106             if ($action_obj->prepare($args)) {
107                 $action_obj->handle($args);
108             }
109         } catch (ClientException $cex) {
110             $cac = new ClientErrorAction($cex->getMessage(), $cex->getCode());
111             $cac->showPage();
112         } catch (ServerException $sex) { // snort snort guffaw
113             $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode());
114             $sac->showPage();
115         } catch (Exception $ex) {
116             $sac = new ServerErrorAction($ex->getMessage());
117             $sac->showPage();
118         }
119     }
120 }
121
122 main();
123
124 // XXX: cleanup exit() calls or add an exit handler so
125 // this always gets called
126
127 Event::handle('CleanupPlugin');