diff options
Diffstat (limited to 'engine/lib')
-rw-r--r-- | engine/lib/plugins.php | 181 |
1 files changed, 143 insertions, 38 deletions
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php index a71b6ecad..83a81a81b 100644 --- a/engine/lib/plugins.php +++ b/engine/lib/plugins.php @@ -44,7 +44,126 @@ { parent::__construct($guid); } - } + }
+
+ /**
+ * Returns a list of plugins to load, in the order that they should be loaded.
+ *
+ * @return array List of plugins
+ */
+ function get_plugin_list() {
+
+ global $CONFIG;
+
+ if (!empty($CONFIG->pluginlistcache))
+ return $CONFIG->pluginlistcache;
+
+ if ($site = get_entity($CONFIG->site_guid)) {
+
+ $pluginorder = $site->pluginorder;
+ if (!empty($pluginorder)) {
+
+ $plugins = unserialize($pluginorder);
+
+ $CONFIG->pluginlistcache = $plugins;
+ return $plugins;
+
+ } else {
+
+ $plugins = array();
+
+ if ($handle = opendir($CONFIG->pluginspath)) {
+ while ($mod = readdir($handle)) {
+ if (!in_array($mod,array('.','..','.svn','CVS')) && is_dir($CONFIG->pluginspath . "/" . $mod)) {
+ $plugins[] = $mod;
+ }
+ }
+ }
+
+ sort($plugins);
+
+ $CONFIG->pluginlistcache = $plugins;
+ return $plugins;
+
+ }
+
+ }
+
+ return false;
+
+ }
+
+ /**
+ * Regenerates the list of known plugins and saves it to the current site
+ *
+ * @param array $pluginorder Optionally, a list of existing plugins and their orders
+ * @return array The new list of plugins and their orders
+ */
+ function regenerate_plugin_list($pluginorder = false) {
+
+ global $CONFIG;
+
+ $CONFIG->pluginlistcache = null;
+
+ if ($site = get_entity($CONFIG->site_guid)) {
+
+ if (empty($pluginorder)) {
+ $pluginorder = $site->pluginorder;
+ $pluginorder = unserialize($pluginorder);
+ } else {
+ ksort($pluginorder);
+ }
+
+ if (empty($pluginorder)) {
+ $pluginorder = array();
+ }
+
+ $max = 0;
+ if (sizeof($pluginorder))
+ foreach($pluginorder as $key => $plugin) {
+ if (is_dir($CONFIG->pluginspath . "/" . $plugin)) {
+ if ($key > $max)
+ $max = $key;
+ } else {
+ unset($pluginorder[$key]);
+ }
+ }
+
+ // Add new plugins to the end
+ if ($handle = opendir($CONFIG->pluginspath)) {
+ while ($mod = readdir($handle)) {
+ if (!in_array($mod,array('.','..','.svn','CVS')) && is_dir($CONFIG->pluginspath . "/" . $mod)) {
+ if (!in_array($mod, $pluginorder)) {
+ $max = $max + 10;
+ $pluginorder[$max] = $mod;
+ }
+ }
+ }
+ }
+
+ ksort($pluginorder);
+
+ // Now reorder the keys ..
+ $key = 10;
+ $plugins = array();
+ if (sizeof($pluginorder))
+ foreach($pluginorder as $plugin) {
+ $plugins[$key] = $plugin;
+ $key = $key + 10;
+ }
+
+ $plugins = serialize($plugins);
+
+ $site->pluginorder = $plugins;
+
+ return $plugins;
+
+ }
+
+ return false;
+
+ }
+ /**
* For now, loads plugins directly
@@ -58,34 +177,21 @@ global $CONFIG;
if (!empty($CONFIG->pluginspath)) {
- $plugins = array();
+ $plugins = get_plugin_list();
- if ($handle = opendir($CONFIG->pluginspath)) {
- while ($mod = readdir($handle)) {
- if (!in_array($mod,array('.','..','.svn','CVS')) && is_dir($CONFIG->pluginspath . "/" . $mod)) { - if (is_plugin_enabled($mod)) {
-
- $plugins[] = $mod;
-
+ if (sizeof($plugins))
+ foreach($plugins as $mod) {
+ if (is_plugin_enabled($mod)) {
+ if (!@include($CONFIG->pluginspath . $mod . "/start.php"))
+ throw new PluginException(sprintf(elgg_echo('PluginException:MisconfiguredPlugin'), $mod));
+ if (is_dir($CONFIG->pluginspath . $mod . "/views/default")) {
+ autoregister_views("",$CONFIG->pluginspath . $mod . "/views/default",$CONFIG->pluginspath . $mod . "/views/");
+ }
+ if (is_dir($CONFIG->pluginspath . $mod . "/languages")) {
+ register_translations($CONFIG->pluginspath . $mod . "/languages/");
}
}
}
-
- sort($plugins);
-
- if (sizeof($plugins))
- foreach($plugins as $mod) {
- if (!@include($CONFIG->pluginspath . $mod . "/start.php"))
- throw new PluginException(sprintf(elgg_echo('PluginException:MisconfiguredPlugin'), $mod));
- if (is_dir($CONFIG->pluginspath . $mod . "/views/default")) {
- autoregister_views("",$CONFIG->pluginspath . $mod . "/views/default",$CONFIG->pluginspath . $mod . "/views/");
- }
- if (is_dir($CONFIG->pluginspath . $mod . "/languages")) {
- register_translations($CONFIG->pluginspath . $mod . "/languages/");
- }
- } -
- }
}
@@ -358,19 +464,15 @@ $installed_plugins = array(); if (!empty($CONFIG->pluginspath)) { +
+ $plugins = get_plugin_list();
+
+ foreach($plugins as $mod) {
+ $installed_plugins[$mod] = array();
+ $installed_plugins[$mod]['active'] = is_plugin_enabled($mod);
+ $installed_plugins[$mod]['manifest'] = load_plugin_manifest($mod);
+ }
- if ($handle = opendir($CONFIG->pluginspath)) { - - while ($mod = readdir($handle)) { - - if (!in_array($mod,array('.','..','.svn','CVS')) && is_dir($CONFIG->pluginspath . "/" . $mod)) { - - $installed_plugins[$mod] = array(); - $installed_plugins[$mod]['active'] = is_plugin_enabled($mod); - $installed_plugins[$mod]['manifest'] = load_plugin_manifest($mod); - } - } - } } return $installed_plugins; @@ -496,7 +598,10 @@ register_action("plugins/usersettings/save"); register_action('admin/plugins/enable', false, "", true); // Enable - register_action('admin/plugins/disable', false, "", true); // Disable + register_action('admin/plugins/disable', false, "", true); // Disable
+
+ register_action('admin/plugins/reorder', false, "", true); // Disable
+ } // Register a startup event |