From 4c82006e5e0c66a6d78dd6e74c10a13eb7537856 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 1 Jan 2026 11:22:06 -0500 Subject: [PATCH 1/3] improve versionCompare() --- htdocs/kernel/module.php | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/htdocs/kernel/module.php b/htdocs/kernel/module.php index 13d87d08c..a80788996 100644 --- a/htdocs/kernel/module.php +++ b/htdocs/kernel/module.php @@ -195,15 +195,28 @@ public function getStatus() */ public function versionCompare($version1 = '', $version2 = '', $operator = '<') { - $version1 = strtolower($version1); - $version2 = strtolower($version2); - if (false !== strpos($version2, '-stable')) { - $version2 = substr($version2, 0, strpos($version2, '-stable')); - } - if (false !== strpos($version1, '-stable')) { - $version1 = substr($version1, 0, strpos($version1, '-stable')); + $normalize = static function ($ver) { + $ver = strtolower($ver); + // strip suffix like -beta, -alpha, -rc, -stable + if (false !== ($pos = strpos($ver, '-'))) { + $ver = substr($ver, 0, $pos); + } + return $ver; + }; + + $base1 = $normalize($version1); + $base2 = $normalize($version2); + + // Compare only the base versions first + $cmp = version_compare($base1, $base2); + + if ($cmp === 0) { + // Same base version → treat as equal, regardless of suffix + return version_compare('0', '0', $operator); } - return version_compare($version1, $version2, $operator); + + // Otherwise, just use the base numeric comparison + return version_compare($base1, $base2, $operator); } /** From fa9ee69b4e607bbda777c095e65ddfaf940e9383 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 1 Jan 2026 15:43:15 -0500 Subject: [PATCH 2/3] updates --- htdocs/kernel/module.php | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/htdocs/kernel/module.php b/htdocs/kernel/module.php index a80788996..88a1ca02f 100644 --- a/htdocs/kernel/module.php +++ b/htdocs/kernel/module.php @@ -196,27 +196,30 @@ public function getStatus() public function versionCompare($version1 = '', $version2 = '', $operator = '<') { $normalize = static function ($ver) { - $ver = strtolower($ver); - // strip suffix like -beta, -alpha, -rc, -stable - if (false !== ($pos = strpos($ver, '-'))) { + $ver = strtolower(trim((string)$ver)); + // Normalize legacy "-stable" (keep behavior consistent) + if (($pos = strpos($ver, '-stable')) !== false) { $ver = substr($ver, 0, $pos); + $ver = rtrim($ver); } - return $ver; - }; - $base1 = $normalize($version1); - $base2 = $normalize($version2); + // Strip any suffix after first '-': -beta, -alpha, -rc, -dev, etc. + if (($pos = strpos($ver, '-')) !== false) { + $ver = substr($ver, 0, $pos); + } + + return trim($ver); + }; - // Compare only the base versions first - $cmp = version_compare($base1, $base2); + $n1 = $normalize($version1); + $n2 = $normalize($version2); - if ($cmp === 0) { - // Same base version → treat as equal, regardless of suffix + // If the normalized strings are identical, treat as equal (covers 2.5.12-beta vs 2.5.12) + if ($n1 === $n2) { return version_compare('0', '0', $operator); } - // Otherwise, just use the base numeric comparison - return version_compare($base1, $base2, $operator); + return version_compare($n1, $n2, $operator); } /** From a87b0f98a768acdf50eb555ce63c5a18398bc2aa Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 1 Jan 2026 16:05:04 -0500 Subject: [PATCH 3/3] simplification --- htdocs/kernel/module.php | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/htdocs/kernel/module.php b/htdocs/kernel/module.php index 88a1ca02f..30ad61fc2 100644 --- a/htdocs/kernel/module.php +++ b/htdocs/kernel/module.php @@ -193,35 +193,29 @@ public function getStatus() * @param string $operator * @return boolean The function will return true if the relationship is the one specified by the operator, false otherwise. */ - public function versionCompare($version1 = '', $version2 = '', $operator = '<') + public function versionCompare($version1 = '', $version2 = '', $operator = '<'): bool { - $normalize = static function ($ver) { + $normalize = static function ($ver): string { $ver = strtolower(trim((string)$ver)); - // Normalize legacy "-stable" (keep behavior consistent) - if (($pos = strpos($ver, '-stable')) !== false) { - $ver = substr($ver, 0, $pos); - $ver = rtrim($ver); - } - - // Strip any suffix after first '-': -beta, -alpha, -rc, -dev, etc. if (($pos = strpos($ver, '-')) !== false) { $ver = substr($ver, 0, $pos); } - return trim($ver); }; $n1 = $normalize($version1); $n2 = $normalize($version2); - // If the normalized strings are identical, treat as equal (covers 2.5.12-beta vs 2.5.12) - if ($n1 === $n2) { - return version_compare('0', '0', $operator); + $op = (string)$operator; + $allowed = ['<', '<=', '>', '>=', '==', '!=', '<>']; + if (!in_array($op, $allowed, true)) { + $op = '<'; } - return version_compare($n1, $n2, $operator); + return (bool)version_compare($n1, $n2, $op); } + /** * Get a link to the modules main page *