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
This commit is contained in:
mistic100 2014-01-09 21:22:13 +00:00
parent c41bdbeb87
commit 4f91b4b9b0
2 changed files with 34 additions and 2 deletions

View file

@ -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);
}
}
?>

View file

@ -78,7 +78,7 @@ abstract class PluginMaintain
$current_version = $pwg_loaded_plugins[$this->plugin_id]['version'];
if ( $version == 'auto' or $current_version == 'auto'
or version_compare($current_version, $version, '<')
or safe_version_compare($current_version, $version, '<')
)
{
if (!empty($on_update))
@ -144,7 +144,7 @@ SELECT version
list($current_version) = pwg_db_fetch_row(pwg_query($query));
if ( $version == 'auto' or $current_version == 'auto'
or version_compare($current_version, $version, '<')
or safe_version_compare($current_version, $version, '<')
)
{
if (!empty($on_update))