diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index b1e97f7f8b17db886defd5c9daeb227e6fb5b4d7..72b9b9052aa95497a426b166c2028a229e4e0e13 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -502,7 +502,7 @@ class Manager Piwik::postEvent('PluginManager.pluginActivated', array($pluginName)); } - protected function isPluginInFilesystem($pluginName) + public function isPluginInFilesystem($pluginName) { $existingPlugins = $this->readPluginsDirectory(); $isPluginInFilesystem = array_search($pluginName, $existingPlugins) !== false; diff --git a/plugins/Marketplace/Controller.php b/plugins/Marketplace/Controller.php index d04e374f74e7e4af346cdf2b19783187d303be3b..418c39dc42c2be39cca3dec26a38ca8f003d0710 100644 --- a/plugins/Marketplace/Controller.php +++ b/plugins/Marketplace/Controller.php @@ -318,17 +318,27 @@ class Controller extends \Piwik\Plugin\ControllerAdmin for ($i = 0; $i <= 10; $i++) { foreach ($paidPlugins as $index => $paidPlugin) { + if (empty($paidPlugin)) { + continue; + } + $pluginName = $paidPlugin['name']; if ($this->pluginManager->isPluginActivated($pluginName)) { - unset($paidPlugins[$index]); + // we do not use unset since it might skip a plugin afterwards when removing index + $paidPlugins[$index] = null; + continue; + } + + if (!$this->pluginManager->isPluginInFilesystem($pluginName)) { + $paidPlugins[$index] = null; continue; } if (empty($paidPlugin['require']) || !$dependency->hasDependencyToDisabledPlugin($paidPlugin['require'])) { - unset($paidPlugins[$index]); + $paidPlugins[$index] = null; try { $this->pluginManager->activatePlugin($pluginName); @@ -341,6 +351,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin } } } + + $paidPlugins = array_filter($paidPlugins); } if ($hasErrors) {