Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2013-09-19 06:39:55 +0400
committerThomas Steur <thomas.steur@gmail.com>2013-09-19 06:39:55 +0400
commita513c0e7f8e6eeb373682f4f5b15f70b7ce65896 (patch)
tree2bac2ef8e4655dab6b1243b1d9e9f6f2595f7bc1
parentea6553284997de2e217a1a456f60e5d18a540bea (diff)
fix uninstall plugin only removes plugin files from filesystem but not config entry and database entry
-rw-r--r--core/PluginsManager.php78
1 files changed, 63 insertions, 15 deletions
diff --git a/core/PluginsManager.php b/core/PluginsManager.php
index 11b6e0de7b..6e099f0d78 100644
--- a/core/PluginsManager.php
+++ b/core/PluginsManager.php
@@ -13,6 +13,7 @@ namespace Piwik;
use Piwik\Plugin\MetadataLoader;
use Piwik\Translate;
+use Piwik\Option;
require_once PIWIK_INCLUDE_PATH . '/core/EventDispatcher.php';
@@ -201,6 +202,16 @@ class PluginsManager
throw new \Exception("You are trying to uninstall the plugin $pluginName but it was not found in the directory piwik/plugins/");
}
self::deletePluginFromFilesystem($pluginName);
+
+ $this->removePluginFromPluginsConfig($pluginName);
+ $this->removePluginFromPluginsInstalledConfig($pluginName);
+ $this->removePluginFromTrackerConfig($pluginName);
+
+ Option::getInstance()->delete('version_' . $pluginName);
+
+ Config::getInstance()->forceSave();
+ Filesystem::deleteAllCacheOnUpdate();
+
if($this->isPluginInFilesystem($pluginName)) {
return false;
}
@@ -221,29 +232,17 @@ class PluginsManager
*/
public function deactivatePlugin($pluginName, $plugins = false)
{
- if(empty($plugins)) {
+ if (empty($plugins)) {
$plugins = $this->pluginsToLoad;
}
- $key = array_search($pluginName, $plugins);
$plugin = $this->loadPlugin($pluginName);
if ($plugin !== null) {
$plugin->deactivate();
}
- if ($key !== false) {
- unset($plugins[$key]);
- }
- $this->updatePluginsConfig($plugins);
-
- $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
- if (!is_null($pluginsTracker)) {
- $key = array_search($pluginName, $pluginsTracker);
- if ($key !== false) {
- unset($pluginsTracker[$key]);
- $this->updatePluginsTrackerConfig($pluginsTracker);
- }
- }
+ $this->removePluginFromPluginsConfig($pluginName, $plugins);
+ $this->removePluginFromTrackerConfig($pluginName);
Config::getInstance()->forceSave();
Filesystem::deleteAllCacheOnUpdate();
@@ -811,6 +810,55 @@ class PluginsManager
return file_exists($path . "/" . $name . ".php")
|| self::isManifestFileFound($path);
}
+
+ /**
+ * @param $pluginName
+ */
+ private function removePluginFromPluginsInstalledConfig($pluginName)
+ {
+ $pluginsInstalled = Config::getInstance()->PluginsInstalled['PluginsInstalled'];
+ $key = array_search($pluginName, $pluginsInstalled);
+ if ($key !== false) {
+ unset($pluginsInstalled[$key]);
+ }
+
+ $this->updatePluginsInstalledConfig($pluginsInstalled);
+ }
+
+ /**
+ * @param $pluginName
+ * @param $plugins
+ * @return mixed
+ */
+ private function removePluginFromPluginsConfig($pluginName, $plugins = false)
+ {
+ if (empty($plugins)) {
+ $plugins = $this->pluginsToLoad;
+ }
+
+ $key = array_search($pluginName, $plugins);
+
+ if ($key !== false) {
+ unset($plugins[$key]);
+ }
+
+ $this->updatePluginsConfig($plugins);
+ }
+
+ /**
+ * @param $pluginName
+ */
+ private function removePluginFromTrackerConfig($pluginName)
+ {
+ $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
+ if (!is_null($pluginsTracker)) {
+ $key = array_search($pluginName, $pluginsTracker);
+ if ($key !== false) {
+ unset($pluginsTracker[$key]);
+ $this->updatePluginsTrackerConfig($pluginsTracker);
+ }
+ }
+ }
}
/**