final fix for plugins update ?

- plugins.version is not updated in "activate" action
- plugins.version is updated in "update" action and "load_plugin()" function (not only for plugins using maintain.class.php)

cases covered:
- autoupdate while active or inactive
- FTP update while active or inactive


git-svn-id: http://piwigo.org/svn/trunk@29779 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
mistic100 2014-09-25 09:25:24 +00:00
parent 64b7e77a5a
commit 0f0b8e0430
3 changed files with 54 additions and 48 deletions

View file

@ -376,59 +376,56 @@ function load_plugin($plugin)
*/
function autoupdate_plugin(&$plugin)
{
$maintain_file = PHPWG_PLUGINS_PATH.$plugin['id'].'/maintain.class.php';
// try to find the filesystem version in lines 2 to 10 of main.inc.php
$fh = fopen(PHPWG_PLUGINS_PATH.$plugin['id'].'/main.inc.php', 'r');
$fs_version = null;
$i = -1;
// autoupdate is applicable only to plugins with 2.7 architecture
if (file_exists($maintain_file))
while (($line = fgets($fh))!==false && $fs_version==null && $i<10)
{
// try to find the filesystem version in lines 2 to 10 of main.inc.php
$fh = fopen(PHPWG_PLUGINS_PATH.$plugin['id'].'/main.inc.php', 'r');
$fs_version = null;
$i = -1;
$i++;
if ($i < 2) continue; // first lines are typically "<?php" and "/*"
while (($line = fgets($fh))!==false && $fs_version==null && $i<10)
if (preg_match('/Version:\\s*([\\w.-]+)/', $line, $matches))
{
$i++;
if ($i < 2) continue; // first lines are typically "<?php" and "/*"
$fs_version = $matches[1];
}
}
if (preg_match('/Version:\\s*([\\w.-]+)/', $line, $matches))
{
$fs_version = $matches[1];
}
fclose($fh);
// if version is auto (dev) or superior
if ($fs_version != null && (
$fs_version == 'auto' || $plugin['version'] == 'auto' ||
safe_version_compare($plugin['version'], $fs_version, '<')
)
) {
$plugin['version'] = $fs_version;
$maintain_file = PHPWG_PLUGINS_PATH.$plugin['id'].'/maintain.class.php';
// autoupdate is applicable only to plugins with 2.7 architecture
if (file_exists($maintain_file))
{
global $page;
// call update method
include_once($maintain_file);
$classname = $plugin['id'].'_maintain';
$plugin_maintain = new $classname($plugin['id']);
$plugin_maintain->update($plugin['version'], $fs_version, $page['errors']);
}
fclose($fh);
if ($fs_version != null)
// update database (only on production)
if ($plugin['version'] != 'auto')
{
global $pwg_loaded_plugins, $page;
// if version is auto (dev) or superior
if (
$fs_version == 'auto' or $plugin['version'] == 'auto'
or safe_version_compare($plugin['version'], $fs_version, '<')
)
{
// call update method
include_once($maintain_file);
$classname = $plugin['id'].'_maintain';
$plugin_maintain = new $classname($plugin['id']);
$plugin_maintain->update($plugin['version'], $fs_version, $page['errors']);
$plugin['version'] = $fs_version;
// update database (only on production)
if ($plugin['version'] != 'auto')
{
$query = '
$query = '
UPDATE '. PLUGINS_TABLE .'
SET version = "'. $plugin['version'] .'"
WHERE id = "'. $plugin['id'] .'"
;';
pwg_query($query);
}
}
pwg_query($query);
}
}
}