From 45f3ec3511f11d9c027f7a0f5712007829f3a9c7 Mon Sep 17 00:00:00 2001
From: Thomas Steur <tsteur@users.noreply.github.com>
Date: Sat, 25 Mar 2017 21:12:06 +1300
Subject: [PATCH] Premium Plugin Installer shows false error message after
 install (#11516)

* fix #11512 Premium Plugin Installer shows false error message after install

* better handling when a plugin was installed
---
 core/Plugin/Manager.php            |  2 +-
 plugins/Marketplace/Controller.php | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index b1e97f7f8b..72b9b9052a 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 d04e374f74..418c39dc42 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) {
-- 
GitLab