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:
parent
c41bdbeb87
commit
4f91b4b9b0
2 changed files with 34 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -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))
|
||||
|
|
Loading…
Reference in a new issue