diff options
-rw-r--r-- | engine/classes/ElggPlugin.php | 14 | ||||
-rw-r--r-- | engine/classes/ElggPluginPackage.php | 35 | ||||
-rw-r--r-- | languages/en.php | 6 | ||||
-rw-r--r-- | views/default/admin/plugins/advanced.php | 5 | ||||
-rw-r--r-- | views/default/object/plugin/invalid.php | 26 |
5 files changed, 62 insertions, 24 deletions
diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php index 69b3b1c67..55be2b887 100644 --- a/engine/classes/ElggPlugin.php +++ b/engine/classes/ElggPlugin.php @@ -14,6 +14,7 @@ class ElggPlugin extends ElggObject { private $path; private $pluginID; + private $errorMsg = ''; /** * Set subtype to 'plugin' @@ -86,6 +87,7 @@ class ElggPlugin extends ElggObject { } catch (Exception $e) { // we always have to allow the entity to load. elgg_log("Failed to load $this->guid as a plugin. " . $e->getMessage(), 'WARNING'); + $this->errorMsg = $e->getmessage(); } } @@ -547,14 +549,17 @@ class ElggPlugin extends ElggObject { */ public function isValid() { if (!$this->getID()) { + $this->errorMsg = elgg_echo('ElggPlugin:NoId', array($this->guid)); return false; } if (!$this->package instanceof ElggPluginPackage) { + $this->errorMsg = elgg_echo('ElggPlugin:NoPluginPackagePackage', array($this->getID(), $this->guid)); return false; } if (!$this->package->isValid()) { + $this->errorMsg = $this->package->getError(); return false; } @@ -951,4 +956,13 @@ class ElggPlugin extends ElggObject { return remove_entity_relationship($this->guid, 'active_plugin', $site->guid); } } + + /** + * Returns the last error message registered. + * + * @return string|null + */ + public function getError() { + return $this->errorMsg; + } } diff --git a/engine/classes/ElggPluginPackage.php b/engine/classes/ElggPluginPackage.php index 567ec129f..59d5a95bf 100644 --- a/engine/classes/ElggPluginPackage.php +++ b/engine/classes/ElggPluginPackage.php @@ -48,7 +48,7 @@ class ElggPluginPackage { /** * An invalid plugin error. */ - private $invalidPluginError = ''; + private $errorMsg = ''; /** * Any dependencies messages @@ -122,9 +122,9 @@ class ElggPluginPackage { $this->id = $id; if ($validate && !$this->isValid()) { - if ($this->invalidPluginError) { + if ($this->errorMsg) { throw new PluginException(elgg_echo('PluginException:InvalidPlugin:Details', - array($plugin, $this->invalidPluginError))); + array($plugin, $this->errorMsg))); } else { throw new PluginException(elgg_echo('PluginException:InvalidPlugin', array($plugin))); } @@ -155,14 +155,12 @@ class ElggPluginPackage { return $this->valid; } - $valid = true; - // check required files. $have_req_files = true; foreach ($this->requiredFiles as $file) { if (!is_readable($this->path . $file)) { $have_req_files = false; - $this->invalidPluginError = + $this->errorMsg = elgg_echo('ElggPluginPackage:InvalidPlugin:MissingFile', array($file)); break; } @@ -170,23 +168,21 @@ class ElggPluginPackage { // check required files if (!$have_req_files) { - $valid = false; + return $this->valid = false; } // check for valid manifest. if (!$this->loadManifest()) { - $valid = false; + return $this->valid = false; } // can't require or conflict with yourself or something you provide. // make sure provides are all valid. if (!$this->isSaneDeps()) { - $valid = false; + return $this->valid = false; } - $this->valid = $valid; - - return $valid; + return $this->valid = true; } /** @@ -213,7 +209,7 @@ class ElggPluginPackage { foreach ($provides as $provide) { // only valid provide types if (!in_array($provide['type'], $this->providesSupportedTypes)) { - $this->invalidPluginError = + $this->errorMsg = elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidProvides', array($provide['type'])); return false; } @@ -223,7 +219,7 @@ class ElggPluginPackage { foreach (array('conflicts', 'requires') as $dep_type) { foreach (${$dep_type} as $dep) { if (!in_array($dep['type'], $this->depsSupportedTypes)) { - $this->invalidPluginError = + $this->errorMsg = elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidDependency', array($dep['type'])); return false; } @@ -233,7 +229,7 @@ class ElggPluginPackage { $version_compare = version_compare($provide['version'], $dep['version'], $dep['comparison']); if ($version_compare) { - $this->invalidPluginError = + $this->errorMsg = elgg_echo('ElggPluginPackage:InvalidPlugin:CircularDep', array($dep['type'], $dep['name'], $this->id)); @@ -279,6 +275,7 @@ class ElggPluginPackage { try { $this->manifest = new ElggPluginManifest($file, $this->id); } catch (Exception $e) { + $this->errorMsg = $e->getMessage(); return false; } @@ -605,4 +602,12 @@ class ElggPluginPackage { return $this->id; } + /** + * Returns the last error message. + * + * @return string + */ + public function getError() { + return $this->errorMsg; + } } diff --git a/languages/en.php b/languages/en.php index 5ea31b864..32a4cbb3d 100644 --- a/languages/en.php +++ b/languages/en.php @@ -68,6 +68,10 @@ $english = array( 'PluginException:InvalidManifest' => 'Invalid manifest file for plugin %s', 'PluginException:InvalidPlugin' => '%s is not a valid plugin.', 'PluginException:InvalidPlugin:Details' => '%s is not a valid plugin: %s', + + 'ElggPlugin:MissingID' => 'Missing plugin ID (guid %s)', + 'ElggPlugin:NoPluginPackagePackage' => 'Missing ElggPluginPackage for plugin ID %s (guid %s)', + 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Missing file %s in package', 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Invalid dependency type "%s"', 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Invalid provides type "%s"', @@ -630,7 +634,7 @@ $english = array( 'admin:plugins:warning:elgg_version_unknown' => 'This plugin uses a legacy manifest file and does not specify a compatible Elgg version. It probably will not work!', 'admin:plugins:warning:unmet_dependencies' => 'This plugin has unmet dependencies and cannot be activated. Check dependencies under more info.', - 'admin:plugins:warning:invalid' => '%s is not a valid Elgg plugin. Check http://docs.elgg.org/Invalid_Plugin for more information.', + 'admin:plugins:warning:invalid' => '%s is not a valid Elgg plugin. Check <a href="http://docs.elgg.org/Invalid_Plugin">the Elgg documentation</a> for troublshooting tips.', 'admin:plugins:cannot_activate' => 'Cannot Activate', 'admin:plugins:set_priority:yes' => "Reordered %s.", diff --git a/views/default/admin/plugins/advanced.php b/views/default/admin/plugins/advanced.php index e78dbe2f1..02e9ae58b 100644 --- a/views/default/admin/plugins/advanced.php +++ b/views/default/admin/plugins/advanced.php @@ -9,7 +9,7 @@ */ elgg_generate_plugin_entities(); -$installed_plugins = elgg_get_plugins('any'); +$installed_plugins = elgg_get_plugins('any', true); $show_category = get_input('category', null); // Get a list of the all categories @@ -85,9 +85,6 @@ $buttons .= $category_form; <div id="elgg-plugin-list"> <?php -$options = array( - -); echo elgg_view_entity_list($installed_plugins, 0, 0, 0, true, false, false); ?> diff --git a/views/default/object/plugin/invalid.php b/views/default/object/plugin/invalid.php index 7fd5d6f5e..9e239b7ca 100644 --- a/views/default/object/plugin/invalid.php +++ b/views/default/object/plugin/invalid.php @@ -15,10 +15,28 @@ $plugin = $vars['entity']; $id = $plugin->getID(); $path = htmlspecialchars($plugin->getPath()); $message = elgg_echo('admin:plugins:warning:invalid', array($id)); +$error = $plugin->getError(); ?> -<div class="elgg-plugin elgg-state-inactive elgg-state-error"> - <p><?php echo $message; ?></p> - <p><?php echo elgg_echo('admin:plugins:label:location') . ": " . $path; ?></p> -</div> +<div class="elgg-state-draggable elgg-plugin elgg-state-inactive elgg-state-error" id="elgg-plugin-<?php echo $plugin->guid; ?>"> + <div class="elgg-head"><h3><?php echo $id; ?></h3></div> + <div class="elgg-body"> + <p><?php echo $message; ?></p> + + <div class="pts"> + <?php + echo elgg_view('output/url', array( + 'href' => "#elgg-plugin-manifest-{$plugin->getID()}", + 'text' => elgg_echo("admin:plugins:label:moreinfo"), + 'class' => 'elgg-toggler', + )); + ?> + </div> + + <div class="hidden manifest_file" id="elgg-plugin-manifest-<?php echo $plugin->getID(); ?>"> + <p><?php echo elgg_echo('admin:plugins:label:location') . ": " . $path; ?></p> + <p><?php echo $error; ?></p> + </div> + </div> +</div>
\ No newline at end of file |