Commit 7b9e69eb authored by Evan Prodromou's avatar Evan Prodromou

integrate URL routing into core code

parent b45ea01d
This diff is collapsed.
......@@ -22,69 +22,105 @@ define('LACONICA', true);
require_once INSTALLDIR . '/lib/common.php';
// XXX: we need a little more structure in this script
$user = null;
$action = null;
function getPath($req) {
if (common_config('site', 'fancy')) {
return $req['p'];
} else if ($_SERVER['PATH_INFO']) {
return $_SERVER['PATH_INFO'];
} else {
return $req['p'];
}
}
// get and cache current user
function main() {
$user = common_current_user();
global $user, $action;
// initialize language env
// XXX: we need a little more structure in this script
common_init_language();
// get and cache current user
$action = $_REQUEST['action'];
$user = common_current_user();
if (!$action || !preg_match('/^[a-zA-Z0-9_-]*$/', $action)) {
common_redirect(common_local_url('public'));
}
// initialize language env
// If the site is private, and they're not on one of the "public"
// parts of the site, redirect to login
common_init_language();
if (!$user && common_config('site', 'private') &&
!in_array($action, array('login', 'openidlogin', 'finishopenidlogin',
'recoverpassword', 'api', 'doc', 'register'))) {
common_redirect(common_local_url('login'));
}
$path = getPath($_REQUEST);
$r = new Router();
$action_class = ucfirst($action).'Action';
$args = $r->map($path);
if (!class_exists($action_class)) {
$cac = new ClientErrorAction(_('Unknown action'), 404);
$cac->showPage();
} else {
$action_obj = new $action_class();
if (!$args) {
$cac = new ClientErrorAction(_('Unknown page'), 404);
$cac->showPage();
return;
}
// XXX: find somewhere for this little block to live
$args = array_merge($args, $_REQUEST);
if ($config['db']['mirror'] && $action_obj->isReadOnly()) {
if (is_array($config['db']['mirror'])) {
// "load balancing", ha ha
$k = array_rand($config['db']['mirror']);
$action = $args['action'];
$mirror = $config['db']['mirror'][$k];
} else {
$mirror = $config['db']['mirror'];
}
$config['db']['database'] = $mirror;
if (!$action || !preg_match('/^[a-zA-Z0-9_-]*$/', $action)) {
common_redirect(common_local_url('public'));
return;
}
try {
if ($action_obj->prepare($_REQUEST)) {
$action_obj->handle($_REQUEST);
}
} catch (ClientException $cex) {
$cac = new ClientErrorAction($cex->getMessage(), $cex->getCode());
// If the site is private, and they're not on one of the "public"
// parts of the site, redirect to login
if (!$user && common_config('site', 'private') &&
!in_array($action, array('login', 'openidlogin', 'finishopenidlogin',
'recoverpassword', 'api', 'doc', 'register'))) {
common_redirect(common_local_url('login'));
return;
}
$action_class = ucfirst($action).'Action';
if (!class_exists($action_class)) {
$cac = new ClientErrorAction(_('Unknown action'), 404);
$cac->showPage();
} catch (ServerException $sex) { // snort snort guffaw
$sac = new ServerErrorAction($sex->getMessage(), $sex->getCode());
$sac->showPage();
} catch (Exception $ex) {
$sac = new ServerErrorAction($ex->getMessage());
$sac->showPage();
} else {
$action_obj = new $action_class();
// XXX: find somewhere for this little block to live
if ($config['db']['mirror'] && $action_obj->isReadOnly()) {
if (is_array($config['db']['mirror'])) {
// "load balancing", ha ha
$k = array_rand($config['db']['mirror']);
$mirror = $config['db']['mirror'][$k];
} else {
$mirror = $config['db']['mirror'];
}
$config['db']['database'] = $mirror;
}
try {
if ($action_obj->prepare($args)) {
$action_obj->handle($args);
}
} catch (ClientException $cex) {
$cac = new ClientErrorAction($cex->getMessage(), $cex->getCode());
$cac->showPage();
} catch (ServerException $sex) { // snort snort guffaw
$sac = new ServerErrorAction($sex->getMessage(), $sex->getCode());
$sac->showPage();
} catch (Exception $ex) {
$sac = new ServerErrorAction($ex->getMessage());
$sac->showPage();
}
}
}
main();
// XXX: cleanup exit() calls or add an exit handler so
// this always gets called
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment