client = $client; $this->translator = $translator; $this->pluginManager = Plugin\Manager::getInstance(); $this->cache = $cache; $this->plugins = $plugins; } public function getPluginNamesOfInvalidLicenses() { // it is very important this is cached, otherwise performance may decrease a lot. Eager cache is currently // cached for 12 hours. In case we lower ttl for eager cache it might be worth considering to change to another // cache if ($this->cache->contains($this->cacheKey)) { $expiredPlugins = $this->cache->fetch($this->cacheKey); } else { $expiredPlugins = $this->getPluginNamesToExpireInCaseLicenseIsInvalid(); $this->cache->save($this->cacheKey, $expiredPlugins); } return $expiredPlugins; } public function clearCache() { $this->cache->delete($this->cacheKey); } public function getMessageExceededLicenses() { $plugins = $this->getPluginNamesOfInvalidLicenses(); if (empty($plugins['exceeded'])) { return; } $plugins = '' . implode(', ', $plugins['exceeded']) . ''; $loginUrl = $this->getLoginLink(); $loginUrlEnd = ''; if (!empty($loginUrl)) { $loginUrlEnd = ''; } $message = $this->translator->translate('Marketplace_LicenseExceededDescription', array($plugins, '
', "" . $loginUrl, $loginUrlEnd . "")); if (Piwik::hasUserSuperUserAccess()) { $message .= ' ' . $this->getSubscritionSummaryMessage(); } return $message; } public function getMessageNoLicense() { $plugins = $this->getPluginNamesOfInvalidLicenses(); if (empty($plugins['noLicense'])) { return; } $plugins = '' . implode(', ', $plugins['noLicense']) . ''; $loginUrl = $this->getLoginLink(); $loginUrlEnd = ''; if (!empty($loginUrl)) { $loginUrlEnd = ''; } $message = $this->translator->translate('Marketplace_LicenseMissingDeactivatedDescription', array($plugins, '
', "" . $loginUrl, $loginUrlEnd. "")); if (Piwik::hasUserSuperUserAccess()) { $message .= ' ' . $this->getSubscritionSummaryMessage(); } return $message; } public function getMessageExpiredLicenses() { $plugins = $this->getPluginNamesOfInvalidLicenses(); if (empty($plugins['expired'])) { return; } $plugins = '' . implode(', ', $plugins['expired']) . ''; $loginUrl = $this->getLoginLink(); $loginUrlEnd = ''; if (!empty($loginUrl)) { $loginUrlEnd = ''; } $message = $this->translator->translate('Marketplace_LicenseExpiredDescription', array($plugins, '
', "" . $loginUrl, $loginUrlEnd . "")); if (Piwik::hasUserSuperUserAccess()) { $message .= ' ' . $this->getSubscritionSummaryMessage(); } return $message; } private function getLoginLink() { $info = $this->client->getInfo(); if (empty($info['loginUrl'])) { return ''; } return ''; } private function getSubscritionSummaryMessage() { $url = Url::getCurrentQueryStringWithParametersModified(array( 'module' => 'Marketplace', 'action' => 'subscriptionOverview' )); $link = ''; return "
" . $this->translator->translate('Marketplace_ViewSubscriptionsSummary', array($link, '
')); } private function getPluginNamesToExpireInCaseLicenseIsInvalid() { $pluginNames = array( 'exceeded' => array(), 'expired' => array(), 'noLicense' => array() ); try { $paidPlugins = $this->plugins->getAllPaidPlugins(); } catch (\Exception $e) { return $pluginNames; } if (!empty($paidPlugins)) { foreach ($paidPlugins as $plugin) { if (!empty($plugin['isFree'])) { continue; } $pluginName = $plugin['name']; if ($this->isPluginActivated($pluginName)) { if (empty($plugin['consumer']['license'])) { $pluginNames['noLicense'][] = $pluginName; } elseif (!empty($plugin['consumer']['license']['isExceeded'])) { $pluginNames['exceeded'][] = $pluginName; } elseif (isset($plugin['consumer']['license']['status']) && $plugin['consumer']['license']['status'] === 'Cancelled') { $pluginNames['noLicense'][] = $pluginName; } elseif (isset($plugin['consumer']['license']['isValid']) && empty($plugin['consumer']['license']['isValid'])) { $pluginNames['expired'][] = $pluginName; } } } } return $pluginNames; } /** * for tests only * @param array $pluginNames * @internal * @ignore */ public function setActivatedPluginNames($pluginNames) { $this->activatedPluginNames = $pluginNames; } protected function isPluginInstalled($pluginName) { if (in_array($pluginName, $this->activatedPluginNames)) { return true; } return $this->pluginManager->isPluginInstalled($pluginName); } protected function isPluginActivated($pluginName) { if (in_array($pluginName, $this->activatedPluginNames)) { return true; } return $this->pluginManager->isPluginActivated($pluginName); } }