From d651fe38cd9be1b034c8ef36cb670de7aea9a3a8 Mon Sep 17 00:00:00 2001 From: plegall Date: Wed, 4 Nov 2020 17:38:09 +0100 Subject: [PATCH] fixes #583 check PHP version requirement before update * piwigo.org can now tell Piwigo which version of PHP is required for each version of Piwigo. If the installed version of PHP is too old, do not let the user update. * slight visual enhancements on the update page --- admin/include/updates.class.php | 20 +++-- admin/themes/default/template/updates_pwg.tpl | 89 ++++++++++++++++--- admin/updates_pwg.php | 45 +++++++--- language/en_UK/admin.lang.php | 2 + language/fr_FR/admin.lang.php | 3 + 5 files changed, 131 insertions(+), 28 deletions(-) diff --git a/admin/include/updates.class.php b/admin/include/updates.class.php index ae2adf6fb..57530e2a7 100644 --- a/admin/include/updates.class.php +++ b/admin/include/updates.class.php @@ -77,6 +77,7 @@ class updates $url = PHPWG_URL.'/download/all_versions.php'; $url.= '?rand='.md5(uniqid(rand(), true)); // Avoid server cache + $url.= '&show_requirements'; if (@fetchRemote($url, $result) and $all_versions = @explode("\n", $result) @@ -84,29 +85,34 @@ class updates { $new_versions['piwigo.org-checked'] = true; $last_version = trim($all_versions[0]); + list($last_version_number, $last_version_php) = explode('/', trim($all_versions[0])); - if (version_compare(PHPWG_VERSION, $last_version, '<')) + if (version_compare(PHPWG_VERSION, $last_version_number, '<')) { - $last_branch = get_branch_from_version($last_version); + $last_branch = get_branch_from_version($last_version_number); if ($last_branch == $actual_branch) { - $new_versions['minor'] = $last_version; + $new_versions['minor'] = $last_version_number; + $new_versions['minor_php'] = $last_version_php; } else { - $new_versions['major'] = $last_version; + $new_versions['major'] = $last_version_number; + $new_versions['major_php'] = $last_version_php; // Check if new version exists in same branch foreach ($all_versions as $version) { - $branch = get_branch_from_version($version); + list($version_number, $version_php) = explode('/', trim($version)); + $branch = get_branch_from_version($version_number); if ($branch == $actual_branch) { - if (version_compare(PHPWG_VERSION, $version, '<')) + if (version_compare(PHPWG_VERSION, $version_number, '<')) { - $new_versions['minor'] = $version; + $new_versions['minor'] = $version_number; + $new_versions['minor_php'] = $version_php; } break; } diff --git a/admin/themes/default/template/updates_pwg.tpl b/admin/themes/default/template/updates_pwg.tpl index 89756f2ac..b62f9b271 100644 --- a/admin/themes/default/template/updates_pwg.tpl +++ b/admin/themes/default/template/updates_pwg.tpl @@ -19,10 +19,44 @@ form { width: 750px; } fieldset { padding-bottom: 30px; } p, form p { text-align: left; margin-left:20px; } li { margin: 5px; } + +.badge-release { + padding:5px 10px; + border-radius: 5px; +} + +a.badge-release:hover { + text-decoration:none; + color: currentColor; +} + +.goto-update-page { + padding:5px 10px; + font-weight:bold; +} + +.goto-update-page:hover { + text-decoration:none; +} + +.update-recommendation { + margin-top:30px; +} + +p.release .errors {margin:0} {/literal} {/html_head} +{if isset($MINOR_RELEASE_PHP_REQUIRED) and isset($MAJOR_RELEASE_PHP_REQUIRED)} +
+ + +
+{/if} +

{'Updates'|@translate}

@@ -38,29 +72,59 @@ li { margin: 5px; } {/if} {if $STEP == 1} -

{'Two updates are available'|@translate}:

-

-

+
+ {'Two updates are available'|@translate} +

+ {$MINOR_VERSION} + {'This is a minor update, with only bug corrections.'|@translate} +{if isset($MINOR_RELEASE_PHP_REQUIRED)} + {'Requires PHP %s'|translate:$MINOR_RELEASE_PHP_REQUIRED} +{else} + {'Update to Piwigo %s'|@translate:$MINOR_VERSION} +{/if}

-

{'You can update to Piwigo %s directly, without upgrading to Piwigo %s (recommended).'|@translate:$MAJOR_VERSION:$MINOR_VERSION}

+ +

+ {$MAJOR_VERSION} + {'This is a major update, with new exciting features.'|translate:$MAJOR_RELEASE_URL} + {'Some themes and plugins may be not available yet.'|translate} +{if isset($MAJOR_RELEASE_PHP_REQUIRED)} + {'Requires PHP %s'|translate:$MAJOR_RELEASE_PHP_REQUIRED} +{else} + {'Update to Piwigo %s'|@translate:$MAJOR_VERSION} +{/if} +

+

+ + {'You can update to Piwigo %s directly, without upgrading to Piwigo %s (recommended).'|@translate:$MAJOR_VERSION:$MINOR_VERSION} +

+
{/if} {if $STEP == 2} +

+ {$MINOR_VERSION} +

{'A new version of Piwigo is available.'|@translate}
{'This is a minor update, with only bug corrections.'|@translate}

-

+

+ +{if isset($MINOR_RELEASE_PHP_REQUIRED)} + {'Requires PHP %s'|translate:$MINOR_RELEASE_PHP_REQUIRED} +{/if} +

{/if} {if $STEP == 3} +

+ {$MAJOR_VERSION} +

{'A new version of Piwigo is available.'|@translate}
{'This is a major update, with new exciting features.'|@translate:$RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate} @@ -69,7 +133,7 @@ li { margin: 5px; } {counter assign=i}

- {'Backup'|@translate} + {'Backup'|@translate}

{'Always have a backup of your database and files.'|translate} {'The best is to have them made automatically on a regular basis.'|translate} @@ -79,7 +143,7 @@ li { margin: 5px; } {counter assign=i}

- {'Update to Piwigo %s'|@translate:$UPGRADE_TO} + {'Update to Piwigo %s'|@translate:$UPGRADE_TO} {if !empty($missing.plugins)}

{'Following plugins may not be compatible with the new version of Piwigo:'|@translate}


@@ -92,7 +156,10 @@ li { margin: 5px; } {if !empty($missing.plugins) or !empty($missing.themes)}

{/if} -

+

+{if isset($MAJOR_RELEASE_PHP_REQUIRED)} + {'Requires PHP %s'|translate:$MAJOR_RELEASE_PHP_REQUIRED} +{/if}

diff --git a/admin/updates_pwg.php b/admin/updates_pwg.php index e6e5267fe..247d6020b 100644 --- a/admin/updates_pwg.php +++ b/admin/updates_pwg.php @@ -27,25 +27,17 @@ check_input_parameter('to', $_GET, false, '/^\d+\.\d+\.\d+$/'); $upgrade_to = isset($_GET['to']) ? $_GET['to'] : ''; $updates = new updates(); +$new_versions = $updates->get_piwigo_new_versions(); // +-----------------------------------------------------------------------+ // | Step 0 | // +-----------------------------------------------------------------------+ if ($step == 0) { - $new_versions = $updates->get_piwigo_new_versions(); - if (isset($new_versions['minor']) and isset($new_versions['major'])) { $step = 1; $upgrade_to = $new_versions['major']; - - $template->assign( - array( - 'MINOR_VERSION' => $new_versions['minor'], - 'MAJOR_VERSION' => $new_versions['major'], - ) - ); } elseif (isset($new_versions['minor'])) { @@ -96,6 +88,20 @@ if ($step == 3 and is_webmaster()) $template->assign('missing', $updates->missing); } +// +-----------------------------------------------------------------------+ +// | Check for requirements | +// +-----------------------------------------------------------------------+ + +if (isset($new_versions['minor_php']) and version_compare(phpversion(), $new_versions['minor_php'], '<')) +{ + $template->assign('MINOR_RELEASE_PHP_REQUIRED', $new_versions['minor_php']); +} + +if (isset($new_versions['major_php']) and version_compare(phpversion(), $new_versions['major_php'], '<')) +{ + $template->assign('MAJOR_RELEASE_PHP_REQUIRED', $new_versions['major_php']); +} + // +-----------------------------------------------------------------------+ // | Process template | // +-----------------------------------------------------------------------+ @@ -109,10 +115,29 @@ $template->assign(array( 'STEP' => $step, 'PHPWG_VERSION' => PHPWG_VERSION, 'UPGRADE_TO' => $upgrade_to, - 'RELEASE_URL' => PHPWG_URL.'/releases/'.$upgrade_to, ) ); +if (isset($new_versions['minor'])) +{ + $template->assign( + array( + 'MINOR_VERSION' => $new_versions['minor'], + 'MINOR_RELEASE_URL' => PHPWG_URL.'/releases/'.$new_versions['minor'], + ) + ); +} + +if (isset($new_versions['major'])) +{ + $template->assign( + array( + 'MAJOR_VERSION' => $new_versions['major'], + 'MAJOR_RELEASE_URL' => PHPWG_URL.'/releases/'.$new_versions['major'], + ) + ); +} + $template->set_filename('plugin_admin_content', 'updates_pwg.tpl'); $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content'); diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php index f77a31a23..072eeae82 100644 --- a/language/en_UK/admin.lang.php +++ b/language/en_UK/admin.lang.php @@ -1072,3 +1072,5 @@ $lang['Are you sure you want to delete the language "%s"?'] = 'Are you sure you $lang['Are you sure you want to delete the theme "%s"?'] = 'Are you sure you want to delete the theme "%s"?'; $lang['Are you sure you want to update all extensions?'] = 'Are you sure you want to update all extensions?'; $lang['Are you sure you want to delete the user "%s"?'] = 'Are you sure you want to delete the user "%s"?'; +$lang['Please upgrade your PHP version before any update.'] = 'Please upgrade your PHP version before any update.'; +$lang['Requires PHP %s'] = 'Requires PHP %s'; diff --git a/language/fr_FR/admin.lang.php b/language/fr_FR/admin.lang.php index e2a7de64b..6c02d9326 100644 --- a/language/fr_FR/admin.lang.php +++ b/language/fr_FR/admin.lang.php @@ -1074,3 +1074,6 @@ $lang['Are you sure you want to delete the language "%s"?'] = 'Êtes-vous sûr d $lang['Are you sure you want to delete the theme "%s"?'] = 'Êtes-vous sûr de vouloir supprimer le thème "%s" ?'; $lang['Are you sure you want to update all extensions?'] = 'Êtes-vous sûr de vouloir mettre à jour toutes les extensions ?'; $lang['Are you sure you want to delete the user "%s"?'] = 'Êtes-vous sûr de vouloir supprimer l\'utilisateur "%s" ?'; +$lang['Please upgrade your PHP version before any update.'] = 'Il faudra mettre à jour votre PHP avant de pouvoir mettre à jour Piwigo.'; +$lang['Requires PHP %s'] = 'Requiert PHP %s'; +