PageRenderTime 42ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/CorePluginsAdmin/Marketplace.php

https://github.com/CodeYellowBV/piwik
PHP | 197 lines | 135 code | 42 blank | 20 comment | 18 complexity | 294e9f5abcb6a9e7c6517805b2476963 MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Piwik - free/libre analytics platform
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. *
  8. */
  9. namespace Piwik\Plugins\CorePluginsAdmin;
  10. use Piwik\Date;
  11. use Piwik\Piwik;
  12. use Piwik\Plugin\Dependency as PluginDependency;
  13. /**
  14. *
  15. */
  16. class Marketplace
  17. {
  18. /**
  19. * @var MarketplaceApiClient
  20. */
  21. private $client;
  22. public function __construct()
  23. {
  24. $this->client = new MarketplaceApiClient();
  25. }
  26. public function getPluginInfo($pluginName)
  27. {
  28. $marketplace = new MarketplaceApiClient();
  29. $plugin = $marketplace->getPluginInfo($pluginName);
  30. $plugin = $this->enrichPluginInformation($plugin);
  31. return $plugin;
  32. }
  33. public function getAvailablePluginNames($themesOnly)
  34. {
  35. if ($themesOnly) {
  36. $plugins = $this->client->searchForThemes('', '', '');
  37. } else {
  38. $plugins = $this->client->searchForPlugins('', '', '');
  39. }
  40. $names = array();
  41. foreach ($plugins as $plugin) {
  42. $names[] = $plugin['name'];
  43. }
  44. return $names;
  45. }
  46. public function getAllAvailablePluginNames()
  47. {
  48. return array_merge(
  49. $this->getAvailablePluginNames(true),
  50. $this->getAvailablePluginNames(false)
  51. );
  52. }
  53. public function searchPlugins($query, $sort, $themesOnly)
  54. {
  55. if ($themesOnly) {
  56. $plugins = $this->client->searchForThemes('', $query, $sort);
  57. } else {
  58. $plugins = $this->client->searchForPlugins('', $query, $sort);
  59. }
  60. foreach ($plugins as $key => $plugin) {
  61. $plugins[$key] = $this->enrichPluginInformation($plugin);
  62. }
  63. return $plugins;
  64. }
  65. private function getPluginUpdateInformation($plugin)
  66. {
  67. if (empty($plugin['name'])) {
  68. return;
  69. }
  70. $pluginsHavingUpdate = $this->getPluginsHavingUpdate($plugin['isTheme']);
  71. foreach ($pluginsHavingUpdate as $pluginHavingUpdate) {
  72. if ($plugin['name'] == $pluginHavingUpdate['name']) {
  73. return $pluginHavingUpdate;
  74. }
  75. }
  76. }
  77. private function hasPluginUpdate($plugin)
  78. {
  79. $update = $this->getPluginUpdateInformation($plugin);
  80. return !empty($update);
  81. }
  82. /**
  83. * @param bool $themesOnly
  84. * @return array
  85. */
  86. public function getPluginsHavingUpdate($themesOnly)
  87. {
  88. $pluginManager = \Piwik\Plugin\Manager::getInstance();
  89. $pluginManager->returnLoadedPluginsInfo();
  90. $loadedPlugins = $pluginManager->getLoadedPlugins();
  91. try {
  92. $pluginsHavingUpdate = $this->client->getInfoOfPluginsHavingUpdate($loadedPlugins, $themesOnly);
  93. } catch (\Exception $e) {
  94. $pluginsHavingUpdate = array();
  95. }
  96. foreach ($pluginsHavingUpdate as &$updatePlugin) {
  97. foreach ($loadedPlugins as $loadedPlugin) {
  98. if (!empty($updatePlugin['name'])
  99. && $loadedPlugin->getPluginName() == $updatePlugin['name']
  100. ) {
  101. $updatePlugin['currentVersion'] = $loadedPlugin->getVersion();
  102. $updatePlugin['isActivated'] = $pluginManager->isPluginActivated($updatePlugin['name']);
  103. $updatePlugin = $this->addMissingRequirements($updatePlugin);
  104. break;
  105. }
  106. }
  107. }
  108. return $pluginsHavingUpdate;
  109. }
  110. private function enrichPluginInformation($plugin)
  111. {
  112. $dateFormat = Piwik::translate('CoreHome_ShortDateFormatWithYear');
  113. $plugin['canBeUpdated'] = $this->hasPluginUpdate($plugin);
  114. $plugin['isInstalled'] = \Piwik\Plugin\Manager::getInstance()->isPluginLoaded($plugin['name']);
  115. $plugin['lastUpdated'] = Date::factory($plugin['lastUpdated'])->getLocalized($dateFormat);
  116. if ($plugin['canBeUpdated']) {
  117. $pluginUpdate = $this->getPluginUpdateInformation($plugin);
  118. $plugin['repositoryChangelogUrl'] = $pluginUpdate['repositoryChangelogUrl'];
  119. $plugin['currentVersion'] = $pluginUpdate['currentVersion'];
  120. }
  121. if (!empty($plugin['activity']['lastCommitDate'])
  122. && false === strpos($plugin['activity']['lastCommitDate'], '0000')) {
  123. $dateFormat = Piwik::translate('CoreHome_DateFormat');
  124. $plugin['activity']['lastCommitDate'] = Date::factory($plugin['activity']['lastCommitDate'])->getLocalized($dateFormat);
  125. } else {
  126. $plugin['activity']['lastCommitDate'] = null;
  127. }
  128. if (!empty($plugin['versions'])) {
  129. $dateFormat = Piwik::translate('CoreHome_DateFormat');
  130. foreach ($plugin['versions'] as $index => $version) {
  131. $plugin['versions'][$index]['release'] = Date::factory($version['release'])->getLocalized($dateFormat);
  132. }
  133. }
  134. $plugin = $this->addMissingRequirements($plugin);
  135. return $plugin;
  136. }
  137. /**
  138. * @param $plugin
  139. */
  140. private function addMissingRequirements($plugin)
  141. {
  142. $plugin['missingRequirements'] = array();
  143. if (empty($plugin['versions']) || !is_array($plugin['versions'])) {
  144. return $plugin;
  145. }
  146. $latestVersion = $plugin['versions'][count($plugin['versions']) - 1];
  147. if (empty($latestVersion['requires'])) {
  148. return $plugin;
  149. }
  150. $requires = $latestVersion['requires'];
  151. $dependency = new PluginDependency();
  152. $plugin['missingRequirements'] = $dependency->getMissingDependencies($requires);
  153. return $plugin;
  154. }
  155. }