@@ -1679,7 +1679,11 @@ public function getAllowedLanguagesForContest(?Contest $contest) : array {
1679
1679
public function checkNewVersion (): string |false {
1680
1680
if (!$ this ->config ->get ('check_new_version ' )) {
1681
1681
return false ;
1682
- }
1682
+ }
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
+
1683
1687
$ versionLocalString = explode ("/ " , str_replace ("DEV " , "-prerelease " , $ this ->domjudgeVersion ))[0 ];
1684
1688
$ versionLocal = Version::parse ($ versionLocalString , false );
1685
1689
$ versionUrl = 'https://versions.domjudge.org ' ;
@@ -1695,38 +1699,18 @@ public function checkNewVersion(): string|false {
1695
1699
* otherwise the latest minor, or Major release. So the user might make the upgrade path:
1696
1700
* DJ6.0.0 -> DJ6.0.6 -> DJ6.6.0 -> DJ9.0.0 instead of
1697
1701
* -> DJ6.0.[1..6] -> DJ6.[1..6] -> DJ[7..9].0.0
1698
- */
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 ;
1702
+ */
1703
+ $ newer_releases = [];
1704
+ foreach ([$ patch , $ minor , $ major ] as $ regex ) {
1705
+ foreach ($ versions as $ release ) {
1706
+ if (preg_match ($ regex , $ release )) {
1707
+ $ newer_releases [] = $ release ;
1708
+ }
1715
1709
}
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 ;
1710
+ if (count ($ newer_releases ) > 0 ) {
1711
+ natsort ($ newer_releases );
1712
+ return end ($ newer_releases );
1727
1713
}
1728
- } catch (Exception $ e ) {
1729
- return false ;
1730
1714
}
1731
1715
return false ;
1732
1716
}
0 commit comments