forked from GNUsocial/gnu-social
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.
This commit is contained in:
parent
a476805dd9
commit
9e23b5c5d7
13
index.php
13
index.php
@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user