From 6729a2d0d2faeb07ca8e79b5162c3be269e01b66 Mon Sep 17 00:00:00 2001 From: brettp Date: Sat, 16 Apr 2011 22:10:52 +0000 Subject: Fixes #3310. Applied lie2815's patch to use activate.php and deactivate.php instead of manifest on_de/activate fields in plugins. git-svn-id: http://code.elgg.org/elgg/trunk@9002 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/classes/ElggPlugin.php | 86 ++++++++++++--------------- engine/classes/ElggPluginManifest.php | 30 ---------- engine/classes/ElggPluginManifestParser18.php | 6 +- languages/en.php | 6 +- mod/blog/manifest.xml | 1 - mod/blog/start.php | 15 ++--- mod/categories/manifest.xml | 2 - mod/categories/start.php | 21 ------- 8 files changed, 46 insertions(+), 121 deletions(-) diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php index 55be2b887..34e8e6732 100644 --- a/engine/classes/ElggPlugin.php +++ b/engine/classes/ElggPlugin.php @@ -639,24 +639,14 @@ class ElggPlugin extends ElggObject { // if there are any on_enable functions, start the plugin now and run them // Note: this will not run re-run the init hooks! - $functions = $this->manifest->getOnActivate(); - if ($return && $functions) { - $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES - | ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS; - - $this->start($flags); - foreach ($functions as $function) { - if (!is_callable($function)) { - $return = false; - } else { - $result = call_user_func($function); - // allow null to mean "I don't care" like other subsystems - $return = ($result === false) ? false: true; - } - - if ($return === false) { - break; - } + if ($return) { + if ($this->canIncludeFile('activate.php')) { + $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES + | ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS; + + $this->start($flags); + + $return = $this->includeFile('activate.php'); } } @@ -690,27 +680,10 @@ class ElggPlugin extends ElggObject { $return = elgg_trigger_event('deactivate', 'plugin', $params); - // run any deactivate functions - // check for the manifest in case we haven't fully loaded the plugin. - if ($this->manifest) { - $functions = $this->manifest->getOnDeactivate(); - } else { - $functions = array(); - } - - if ($return && $functions) { - foreach ($functions as $function) { - if (!is_callable($function)) { - $return = false; - } else { - $result = call_user_func($function); - // allow null to mean "I don't care" like other subsystems - $return = ($result === false) ? false : true; - } - - if ($return === false) { - break; - } + // run any deactivate code + if ($return) { + if ($this->canIncludeFile('deactivate.php')) { + $return = $this->includeFile('deactivate.php'); } } @@ -736,7 +709,7 @@ class ElggPlugin extends ElggObject { // include start file if ($flags & ELGG_PLUGIN_INCLUDE_START) { - $this->includeStart(); + $this->includeFile('start.php'); } // include views @@ -761,24 +734,39 @@ class ElggPlugin extends ElggObject { // start helpers /** - * Includes the plugin's start file + * Includes one of the plugins files + * + * @param string $filename The name of the file * * @throws PluginException - * @return true + * @return mixed The return value of the included file (or 1 if there is none) */ - protected function includeStart() { + protected function includeFile($filename) { // This needs to be here to be backwards compatible for 1.0-1.7. // They expect the global config object to be available in start.php. - global $CONFIG; + if ($filename == 'start.php') { + global $CONFIG; + } + + $filepath = "$this->path/$filename"; - $start = "$this->path/start.php"; - if (!include($start)) { - $msg = elgg_echo('ElggPlugin:Exception:CannotIncludeStart', - array($this->getID(), $this->guid, $this->path)); + if (!$this->canIncludeFile($filename)) { + $msg = elgg_echo('ElggPlugin:Exception:CannotIncludeFile', + array($filename, $this->getID(), $this->guid, $this->path)); throw new PluginException($msg); } - return true; + return include $filepath; + } + + /** + * Checks whether a plugin file with the given name exists + * + * @param string $filename The name of the file + * @return bool + */ + protected function canIncludeFile($filename) { + return file_exists($this->path.'/'.$filename); } /** diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php index a0ec478a9..0f3b1d7a8 100644 --- a/engine/classes/ElggPluginManifest.php +++ b/engine/classes/ElggPluginManifest.php @@ -576,36 +576,6 @@ class ElggPluginManifest { return $normalized; } - /** - * Returns the functions to run upon activation - * - * @return array - */ - public function getOnActivate() { - $functions = $this->parser->getAttribute('on_activate'); - - if (!$functions) { - $functions = array(); - } - - return $functions; - } - - /** - * Returns the functions to run upon deactivation - * - * @return array - */ - public function getOnDeactivate() { - $functions = $this->parser->getAttribute('on_deactivate'); - - if (!$functions) { - $functions = array(); - } - - return $functions; - } - /** * Returns the admin interface to use. * diff --git a/engine/classes/ElggPluginManifestParser18.php b/engine/classes/ElggPluginManifestParser18.php index 38734f6b4..db8b3dc6a 100644 --- a/engine/classes/ElggPluginManifestParser18.php +++ b/engine/classes/ElggPluginManifestParser18.php @@ -15,8 +15,8 @@ class ElggPluginManifestParser18 extends ElggPluginManifestParser { protected $validAttributes = array( 'name', 'author', 'version', 'blurb', 'description', 'website', 'copyright', 'license', 'requires', 'suggests', - 'screenshot', 'category', 'conflicts', 'provides', 'on_activate', - 'on_deactivate', 'admin_interface', 'activate_on_install' + 'screenshot', 'category', 'conflicts', 'provides', + 'admin_interface', 'activate_on_install' ); /** @@ -52,8 +52,6 @@ class ElggPluginManifestParser18 extends ElggPluginManifestParser { break; // arrays - case 'on_activate': - case 'on_deactivate': case 'category': $parsed[$element->name][] = $element->content; break; diff --git a/languages/en.php b/languages/en.php index 86fa9c7e7..6e24edb2d 100644 --- a/languages/en.php +++ b/languages/en.php @@ -78,7 +78,7 @@ $english = array( 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Invalid provides type "%s"', 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Invalid %s dependency "%s" in plugin %s. Plugins cannot conflict with or require something they provide!', - 'ElggPlugin:Exception:CannotIncludeStart' => 'Cannot include start.php for plugin %s (guid: %s) at %s. Check permissions!', + 'ElggPlugin:Exception:CannotIncludeFile' => 'Cannot include %s for plugin %s (guid: %s) at %s. Check permissions!', 'ElggPlugin:Exception:CannotRegisterViews' => 'Cannot open views dir for plugin %s (guid: %s) at %s. Check permissions!', 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Cannot register languages for plugin %s (guid: %s) at %s. Check permissions!', 'ElggPlugin:Exception:CannotRegisterClasses' => 'Cannot register classes for plugin %s (guid: %s) at %s. Check permissions!', @@ -579,7 +579,7 @@ $english = array( 'This page is the Admin Dashboard and provides a quick overview of your system. ' . "You can add" . " and rearrange widgets to show the information you care about. The menu to the right is oranganized into" -. " three areas: +. " three areas: