aboutsummaryrefslogtreecommitdiffstats
path: root/include/functions.inc.php
diff options
context:
space:
mode:
authormistic100 <mistic@piwigo.org>2014-01-09 21:22:13 +0000
committermistic100 <mistic@piwigo.org>2014-01-09 21:22:13 +0000
commit4f91b4b9b08146fee8a0fdb33815c09597cb4d55 (patch)
tree637288b62ef0aa3efc53df15d58db601c6ea6626 /include/functions.inc.php
parentc41bdbeb87a79966c0c1601660af757e014fd62a (diff)
use custom safe_version_compare instead of version_compare to handle versions numbers with letters
git-svn-id: http://piwigo.org/svn/trunk@26591 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'include/functions.inc.php')
-rw-r--r--include/functions.inc.php32
1 files changed, 32 insertions, 0 deletions
diff --git a/include/functions.inc.php b/include/functions.inc.php
index 616d17569..219f6dcce 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -2089,4 +2089,36 @@ SELECT COUNT(DISTINCT(com.id))
return $user['nb_available_comments'];
}
+/**
+ * Compare two versions with version_compare after having converted
+ * single chars to their decimal values.
+ * Needed because version_compare does not understand versions like '2.5.c'.
+ * @since 2.6
+ *
+ * @param string $a
+ * @param string $b
+ * @param string $op
+ */
+function safe_version_compare($a, $b, $op=null)
+{
+ $replace_chars = create_function('$m', 'return ord(strtolower($m[1]));');
+
+ // add dot before groups of letters (version_compare does the same thing)
+ $a = preg_replace('#([0-9]+)([a-z]+)#i', '$1.$2', $a);
+ $b = preg_replace('#([0-9]+)([a-z]+)#i', '$1.$2', $b);
+
+ // apply ord() to any single letter
+ $a = preg_replace_callback('#\b([a-z]{1})\b#i', $replace_chars, $a);
+ $b = preg_replace_callback('#\b([a-z]{1})\b#i', $replace_chars, $b);
+
+ if (empty($op))
+ {
+ return version_compare($a, $b);
+ }
+ else
+ {
+ return version_compare($a, $b, $op);
+ }
+}
+
?> \ No newline at end of file