-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Expand file tree
/
Copy pathVersion.php
More file actions
95 lines (80 loc) · 2.46 KB
/
Version.php
File metadata and controls
95 lines (80 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik;
use DateTime;
/**
* Matomo version information.
*
* @api
*/
final class Version
{
/**
* The current Matomo version.
* @var string
*/
public const VERSION = '5.7.0-b1';
public const MAJOR_VERSION = 5;
public function isStableVersion($version): bool
{
return (bool) preg_match('/^\d+\.\d+\.\d+$/', $version);
}
public function isVersionNumber($version): bool
{
return
$this->isStableVersion($version) ||
$this->isNonStableVersion($version) ||
$this->isPreviewVersion($version);
}
private function isNonStableVersion($version): bool
{
return (bool) preg_match('/^\d+\.\d+\.\d+(-((rc|b|beta)\d+|alpha)(\.\d{14})?)$/i', $version);
}
public function isPreviewVersion($version): bool
{
if ($this->isNonStableVersion($version)) {
if (\preg_match('/\.(\d{14})$/', $version, $matches)) {
$dt = DateTime::createFromFormat('YmdHis', $matches[1]);
return false !== $dt && !\array_sum(array_map('intval', (array) $dt::getLastErrors()));
}
}
return false;
}
public function nextPreviewVersion($version): string
{
if (!$this->isVersionNumber($version)) {
return '';
}
$dt = date('YmdHis');
if ($this->isPreviewVersion($version)) {
// already a preview, update dt and check it's newer
$newVersion = substr($version, 0, -14) . $dt;
if (version_compare($version, $newVersion, '<')) {
return $newVersion;
}
return '';
} elseif ($this->isStableVersion($version)) {
// no suffix yet, we need to bump the patch first
$newVersion = preg_replace_callback(
'/^(\d+\.\d+\.)(\d+)$/',
function ($matches) {
$matches[2] = $matches[2] + 1;
return $matches[1] . $matches[2];
},
$version
);
return sprintf('%s-alpha.%s', $newVersion, $dt);
} elseif ('alpha' === substr($version, -5)) {
// -alpha
return $version . '.' . $dt;
} else {
// -b1, -rc1
return $version . '.' . $dt;
}
}
}