We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 9e23b5c5 authored by Evan Prodromou's avatar Evan Prodromou

Change action autoloading to allow actions in plugins

Since plugins may define custom actions, we shouldn't require that
there be a file in our actions/ subdir for every action. So, I changed
the (admittedly hackish) auto-loading code in index.php so it instead
checks whether a class exists with the expected name. This, in turn,
uses the increasingly hacking __autoload() function, which I changed
to auto-load stuff named "BlahblahAction" from the actions subdir if
available.
parent a476805d
......@@ -22,6 +22,8 @@ define('LACONICA', true);
require_once INSTALLDIR . '/lib/common.php';
// XXX: we need a little more structure in this script
// get and cache current user
$user = common_current_user();
......@@ -45,19 +47,16 @@ if (!$user && common_config('site', 'private') &&
common_redirect(common_local_url('login'));
}
$actionfile = INSTALLDIR."/actions/$action.php";
$action_class = ucfirst($action).'Action';
if (!file_exists($actionfile)) {
if (!class_exists($action_class)) {
$cac = new ClientErrorAction(_('Unknown action'), 404);
$cac->showPage();
} else {
include_once $actionfile;
$action_class = ucfirst($action).'Action';
$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
......
......@@ -211,6 +211,9 @@ function __autoload($class)
require_once(INSTALLDIR.'/classes/' . $class . '.php');
} else if (file_exists(INSTALLDIR.'/lib/' . strtolower($class) . '.php')) {
require_once(INSTALLDIR.'/lib/' . strtolower($class) . '.php');
} else if (mb_substr($class, -6) == 'Action' &&
file_exists(INSTALLDIR.'/actions/' . strtolower(mb_substr($class, 0, -6)) . '.php')) {
require_once(INSTALLDIR.'/actions/' . strtolower(mb_substr($class, 0, -6)) . '.php');
}
}
......
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