PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.2.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.2.0
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Plugin / Dependency.php
matomo / app / core / Plugin Last commit date
ConsoleCommand 2 years ago Dimension 1 year ago API.php 1 year ago AggregatedMetric.php 2 years ago ArchivedMetric.php 1 year ago Archiver.php 1 year ago Categories.php 2 years ago ComponentFactory.php 2 years ago ComputedMetric.php 1 year ago ConsoleCommand.php 1 year ago Controller.php 1 year ago ControllerAdmin.php 1 year ago Dependency.php 1 year ago LogTablesProvider.php 2 years ago Manager.php 1 year ago Menu.php 1 year ago MetadataLoader.php 1 year ago Metric.php 1 year ago PluginException.php 1 year ago ProcessedMetric.php 1 year ago ReleaseChannels.php 2 years ago Report.php 1 year ago ReportsProvider.php 2 years ago RequestProcessors.php 2 years ago Segment.php 1 year ago SettingsProvider.php 2 years ago Tasks.php 1 year ago ThemeStyles.php 2 years ago ViewDataTable.php 1 year ago Visualization.php 1 year ago WidgetsProvider.php 2 years ago
Dependency.php
157 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\Plugin;
10
11 use Composer\Semver\VersionParser;
12 use Piwik\Plugin\Manager as PluginManager;
13 use Piwik\Plugins\Marketplace\Environment;
14 use Piwik\Version;
15 /**
16 *
17 */
18 class Dependency
19 {
20 private $piwikVersion;
21 private $phpVersion;
22 public function __construct()
23 {
24 $this->setPiwikVersion(Version::VERSION);
25 $this->setPhpVersion(\PHP_MAJOR_VERSION . '.' . \PHP_MINOR_VERSION . '.' . \PHP_RELEASE_VERSION);
26 }
27 public function setEnvironment(Environment $environment)
28 {
29 $this->setPiwikVersion($environment->getPiwikVersion());
30 $this->setPhpVersion($environment->getPhpVersion());
31 }
32 public function getMissingDependencies($requires)
33 {
34 $missingRequirements = array();
35 if (empty($requires)) {
36 return $missingRequirements;
37 }
38 foreach ($requires as $name => $requiredVersion) {
39 $currentVersion = $this->getCurrentVersion($name);
40 if (in_array(strtolower($name), ['piwik', 'matomo'])) {
41 $requiredVersion = $this->markPluginsWithoutUpperBoundMatomoRequirementAsIncompatible($requiredVersion);
42 }
43 $missingVersions = $this->getMissingVersions($currentVersion, $requiredVersion);
44 if (!empty($missingVersions)) {
45 $missingRequirements[] = array('requirement' => $name, 'actualVersion' => $currentVersion, 'requiredVersion' => $requiredVersion, 'causedBy' => implode(', ', $missingVersions));
46 }
47 }
48 return $missingRequirements;
49 }
50 public function getMissingVersions($currentVersion, $requiredVersion)
51 {
52 $currentVersion = trim($currentVersion ?? '');
53 $missingVersions = array();
54 if (empty($currentVersion)) {
55 if (!empty($requiredVersion)) {
56 $missingVersions[] = (string) $requiredVersion;
57 }
58 return $missingVersions;
59 }
60 $requiredVersion = $this->makeVersionBackwardsCompatibleIfNoComparisonDefined($requiredVersion);
61 $version = new VersionParser();
62 $constraintsExisting = $version->parseConstraints($currentVersion);
63 $requiredVersions = explode(',', (string) $requiredVersion);
64 foreach ($requiredVersions as $required) {
65 $required = trim($required);
66 if (empty($required)) {
67 continue;
68 }
69 $required = $this->makeVersionBackwardsCompatibleIfNoComparisonDefined($required);
70 $constraintRequired = $version->parseConstraints($required);
71 if (!$constraintRequired->matches($constraintsExisting)) {
72 $missingVersions[] = $required;
73 }
74 }
75 return $missingVersions;
76 }
77 /**
78 * Upon Matomo 4 we require a lower and upper version bound for Matomo to be set in plugin.json
79 * If that is not the case we assume the plugin not to be compatible with Matomo 4
80 *
81 * @param string $requiredVersion
82 * @return string
83 */
84 private function markPluginsWithoutUpperBoundMatomoRequirementAsIncompatible($requiredVersion)
85 {
86 if (strpos($requiredVersion, ',') !== \false) {
87 return $requiredVersion;
88 }
89 $minVersion = str_replace(array('>', '=', '<', '!', '~', '^'), '', $requiredVersion);
90 if (preg_match("/^\\<=?\\d/", $requiredVersion)) {
91 $upperLimit = '>=' . $minVersion[0] . '.0.0-b1,' . $requiredVersion;
92 } elseif (!empty($minVersion) && is_numeric($minVersion[0])) {
93 $upperLimit = $requiredVersion . ',<' . ($minVersion[0] + 1) . '.0.0-b1';
94 } else {
95 $upperLimit = '>=4.0.0-b1,<5.0.0-b1';
96 }
97 return $upperLimit;
98 }
99 private function makeVersionBackwardsCompatibleIfNoComparisonDefined($version)
100 {
101 if (!empty($version) && preg_match('/^(\\d+)\\.(\\d+)/', $version)) {
102 // TODO: we should remove this from piwik 3. To stay BC we add >= if no >= is defined yet
103 $version = '>=' . $version;
104 }
105 return $version;
106 }
107 public function setPiwikVersion($piwikVersion)
108 {
109 $this->piwikVersion = $piwikVersion;
110 }
111 public function setPhpVersion($phpVersion)
112 {
113 $this->phpVersion = $phpVersion;
114 }
115 public function hasDependencyToDisabledPlugin($requires)
116 {
117 if (empty($requires)) {
118 return \false;
119 }
120 foreach ($requires as $name => $requiredVersion) {
121 $nameLower = strtolower($name);
122 $isPluginRequire = !in_array($nameLower, array('piwik', 'php', 'matomo'));
123 if ($isPluginRequire) {
124 // we do not check version, only whether it's activated. Everything that is not piwik or php is assumed
125 // a plugin so far.
126 if (!PluginManager::getInstance()->isPluginActivated($name)) {
127 return \true;
128 }
129 }
130 }
131 return \false;
132 }
133 private function getCurrentVersion($name)
134 {
135 switch (strtolower($name)) {
136 case 'matomo':
137 case 'piwik':
138 return $this->piwikVersion;
139 case 'php':
140 return $this->phpVersion;
141 default:
142 try {
143 $pluginNames = PluginManager::getAllPluginsNames();
144 if (!in_array($name, $pluginNames) || !PluginManager::getInstance()->isPluginLoaded($name)) {
145 return '';
146 }
147 $plugin = PluginManager::getInstance()->loadPlugin(ucfirst($name));
148 if (!empty($plugin)) {
149 return $plugin->getVersion();
150 }
151 } catch (\Exception $e) {
152 }
153 }
154 return '';
155 }
156 }
157