|
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,36 @@ 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 | + $patch = "/" . substr($this->domjudgeVersion, 0, strrpos($this->domjudgeVersion, '.')) . ".\d/"; |
| 1683 | + $minor = "/" . substr($this->domjudgeVersion, 0, strpos($this->domjudgeVersion, '.')) . ".\d.\d/"; |
| 1684 | + $major = "/\d.\d.\d/"; |
| 1685 | + |
1685 | 1686 | $versionUrl = 'https://versions.domjudge.org'; |
1686 | 1687 | $options = ['http' => ['method' => 'GET', 'header' => "User-Agent: tarball/" . $versionLocalString . "\r\n"]]; |
1687 | 1688 | $context = stream_context_create($options); |
1688 | 1689 | $response = @file_get_contents($versionUrl, false, $context); |
1689 | | - if ($response === false) { |
| 1690 | + if ($response === false) { |
1690 | 1691 | return false; |
1691 | 1692 | } |
1692 | 1693 | $versions = json_decode($response, true); |
1693 | | - /* Steer towards to the latest patch first |
| 1694 | + /* Steer towards to the latest patch first |
1694 | 1695 | * the user can see on the website if there is a new Major/minor themselves |
1695 | 1696 | * otherwise the latest minor, or Major release. So the user might make the upgrade path: |
1696 | 1697 | * DJ6.0.0 -> DJ6.0.6 -> DJ6.6.0 -> DJ9.0.0 instead of |
1697 | 1698 | * -> DJ6.0.[1..6] -> DJ6.[1..6] -> DJ[7..9].0.0 |
1698 | 1699 | */ |
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; |
| 1700 | + $newer_releases = []; |
| 1701 | + foreach ([$patch, $minor, $major] as $regex) { |
| 1702 | + foreach ($versions as $release) { |
| 1703 | + if (preg_match($regex, $release)) { |
| 1704 | + $newer_releases[] = $release; |
| 1705 | + } |
1715 | 1706 | } |
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; |
| 1707 | + if (count($newer_releases) > 0) { |
| 1708 | + natsort($newer_releases); |
| 1709 | + return end($newer_releases); |
1727 | 1710 | } |
1728 | | - } catch (Exception $e) { |
1729 | | - return false; |
1730 | 1711 | } |
1731 | 1712 | return false; |
1732 | 1713 | } |
|
0 commit comments