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);
}
}