]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Change action autoloading to allow actions in plugins
authorEvan Prodromou <evan@controlyourself.ca>
Mon, 9 Feb 2009 16:46:26 +0000 (11:46 -0500)
committerEvan Prodromou <evan@controlyourself.ca>
Mon, 9 Feb 2009 16:46:26 +0000 (11:46 -0500)
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.

index.php
lib/common.php

index 0a79b9731d0aaa97ce321ec47d41bef37c270460..e62d9469ab553924bc9d02aa24c5492bbf8b1a46 100644 (file)
--- a/index.php
+++ b/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
index 041459cf3462b7804bf56042afe290dc1ef41a23..7bfd14c4291517b9f0d31663dc0e18381ebfc5f8 100644 (file)
@@ -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');
     }
 }