|
64 | 64 | use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
65 | 65 | use Symfony\Component\Security\Core\User\UserInterface;
|
66 | 66 | use Twig\Environment;
|
67 |
| -use z4kn4fein\SemVer\Version; |
68 | 67 | use ZipArchive;
|
69 | 68 |
|
70 | 69 | class DOMJudgeService
|
@@ -1679,54 +1678,37 @@ public function getAllowedLanguagesForContest(?Contest $contest) : array {
|
1679 | 1678 | public function checkNewVersion(): string|false {
|
1680 | 1679 | if (!$this->config->get('check_new_version')) {
|
1681 | 1680 | return false;
|
1682 |
| - } |
1683 |
| - $versionLocalString = explode("/", str_replace("DEV", "-prerelease", $this->domjudgeVersion))[0]; |
1684 |
| - $versionLocal = Version::parse($versionLocalString, false); |
| 1681 | + } |
| 1682 | + $versionLocalString = explode("/", $this->domjudgeVersion)[0]; |
| 1683 | + $patch = "/" . substr($this->domjudgeVersion, 0, strrpos($this->domjudgeVersion, '.')) . ".\d/"; |
| 1684 | + $minor = "/" . substr($this->domjudgeVersion, 0, strpos($this->domjudgeVersion, '.')) . ".\d.\d/"; |
| 1685 | + $major = "/\d.\d.\d/"; |
| 1686 | + |
1685 | 1687 | $versionUrl = 'https://versions.domjudge.org';
|
1686 | 1688 | $options = ['http' => ['method' => 'GET', 'header' => "User-Agent: tarball/" . $versionLocalString . "\r\n"]];
|
1687 | 1689 | $context = stream_context_create($options);
|
1688 | 1690 | $response = @file_get_contents($versionUrl, false, $context);
|
1689 |
| - if ($response === false) { |
| 1691 | + if ($response === false) { |
1690 | 1692 | return false;
|
1691 | 1693 | }
|
1692 | 1694 | $versions = json_decode($response, true);
|
1693 |
| - /* Steer towards to the latest patch first |
| 1695 | + /* Steer towards to the latest patch first |
1694 | 1696 | * the user can see on the website if there is a new Major/minor themselves
|
1695 | 1697 | * otherwise the latest minor, or Major release. So the user might make the upgrade path:
|
1696 | 1698 | * DJ6.0.0 -> DJ6.0.6 -> DJ6.6.0 -> DJ9.0.0 instead of
|
1697 | 1699 | * -> DJ6.0.[1..6] -> DJ6.[1..6] -> DJ[7..9].0.0
|
1698 | 1700 | */
|
1699 |
| - $latestPatchString = $versionLocal; |
1700 |
| - if (isset($versions[$versionLocal->getMajor()][$versionLocal->getMinor()])) { |
1701 |
| - $latestPatchString = Version::rsortString($versions[$versionLocal->getMajor()][$versionLocal->getMinor()])[0]; |
1702 |
| - $latestPatch = Version::parse($latestPatchString); |
1703 |
| - if (Version::compare($versionLocal, $latestPatch) < 0) { |
1704 |
| - return $latestPatchString; |
1705 |
| - } |
1706 |
| - } |
1707 |
| - $latestMinorString = $versionLocal; |
1708 |
| - if (isset($versions[$versionLocal->getMajor()])) { |
1709 |
| - $highestMinorInMajor = array_keys($versions[$versionLocal->getMajor()]); |
1710 |
| - rsort($highestMinorInMajor); |
1711 |
| - $latestMinorString = Version::rsortString($versions[$versionLocal->getMajor()][$highestMinorInMajor[0]])[0]; |
1712 |
| - $latestMinor = Version::parse($latestMinorString); |
1713 |
| - if (Version::compare($versionLocal, $latestMinor) < 0) { |
1714 |
| - return $latestMinorString; |
| 1701 | + $newer_releases = []; |
| 1702 | + foreach ([$patch, $minor, $major] as $regex) { |
| 1703 | + foreach ($versions as $release) { |
| 1704 | + if (preg_match($regex, $release)) { |
| 1705 | + $newer_releases[] = $release; |
| 1706 | + } |
1715 | 1707 | }
|
1716 |
| - } |
1717 |
| - $latestMajorString = $versionLocal; |
1718 |
| - try { |
1719 |
| - $highestMajor = array_keys($versions); |
1720 |
| - rsort($highestMajor); |
1721 |
| - $highestMinorInMajor = array_keys($versions[$highestMajor[0]]); |
1722 |
| - rsort($highestMinorInMajor); |
1723 |
| - $latestMajorString = Version::rsortString($versions[$highestMajor[0]][$highestMinorInMajor[0]])[0]; |
1724 |
| - $latestMajor = Version::parse($latestMajorString); |
1725 |
| - if (Version::compare($versionLocal, $latestMajor) < 0) { |
1726 |
| - return $latestMajorString; |
| 1708 | + if (count($newer_releases) > 0) { |
| 1709 | + natsort($newer_releases); |
| 1710 | + return end($newer_releases); |
1727 | 1711 | }
|
1728 |
| - } catch (Exception $e) { |
1729 |
| - return false; |
1730 | 1712 | }
|
1731 | 1713 | return false;
|
1732 | 1714 | }
|
|
0 commit comments