diff --git a/src/etc/inc/plugins.inc.d/core.inc b/src/etc/inc/plugins.inc.d/core.inc index a5b89c669..51e0f702c 100644 --- a/src/etc/inc/plugins.inc.d/core.inc +++ b/src/etc/inc/plugins.inc.d/core.inc @@ -1,7 +1,7 @@ 0) { $jobs[]['autocron'] = array( diff --git a/src/opnsense/scripts/firmware/latest.php b/src/opnsense/scripts/firmware/latest.php index 03e485568..62179aac3 100755 --- a/src/opnsense/scripts/firmware/latest.php +++ b/src/opnsense/scripts/firmware/latest.php @@ -35,10 +35,10 @@ $ret = json_decode(@file_get_contents($changelogfile), true); if ($ret != null) { foreach ($ret as $entry) { if ($entry['series'] == $series) { - if (version_compare($entry['version'], $version, '>')) { - $version = $entry['version']; - } - } + if (version_compare($entry['version'], $version, '>')) { + $version = $entry['version']; + } + } } } diff --git a/src/opnsense/scripts/firmware/product.php b/src/opnsense/scripts/firmware/product.php index 02023de58..636a9727e 100755 --- a/src/opnsense/scripts/firmware/product.php +++ b/src/opnsense/scripts/firmware/product.php @@ -32,6 +32,7 @@ $metafile = '/usr/local/opnsense/version/core'; $ret = json_decode(@file_get_contents($metafile), true); if ($ret != null) { $ret['product_crypto'] = trim(shell_exec('opnsense-version -f')); + $ret['product_latest'] = trim(shell_exec('/usr/local/opnsense/scripts/firmware/latest.php')); $ret['product_mirror'] = preg_replace('/\/[a-z0-9]{8}(-[a-z0-9]{4}){3}-[a-z0-9]{12}\//i', '/${SUBSCRIPTION}/', trim(shell_exec('opnsense-update -M'))); $ret['product_time'] = date('D M j H:i:s T Y', filemtime('/usr/local/opnsense/www/index.php')); $repos = explode("\n", trim(shell_exec('opnsense-verify -l'))); diff --git a/src/opnsense/service/conf/actions.d/actions_firmware.conf b/src/opnsense/service/conf/actions.d/actions_firmware.conf index aed5f818b..8a4d19947 100644 --- a/src/opnsense/service/conf/actions.d/actions_firmware.conf +++ b/src/opnsense/service/conf/actions.d/actions_firmware.conf @@ -17,6 +17,12 @@ parameters: type:script message:Flush firmware update status +[changelog.latest] +command: /usr/local/opnsense/scripts/firmware/latest.php +parameters: +type:script_output +message:Checking for latest version in changelog + [changelog.fetch] command: /usr/local/opnsense/scripts/firmware/changelog.sh fetch parameters: diff --git a/src/www/widgets/api/plugins/system.inc b/src/www/widgets/api/plugins/system.inc index b73e0522b..bdb391593 100644 --- a/src/www/widgets/api/plugins/system.inc +++ b/src/www/widgets/api/plugins/system.inc @@ -167,14 +167,20 @@ function system_api_firmware() $ret = gettext('Click to check for updates.'); $product = json_decode(configd_run('firmware product'), true); - if ( - !empty($product['product_check']['upgrade_sets']) || + + /* information from changelog, more accurate for production release */ + $from_changelog = !empty($product['product_latest']) && + $product['product_latest'] != $product['product_version']; + + /* update status from last check, also includes major releases */ + $from_check = !empty($product['product_check']['upgrade_sets']) || !empty($product['product_check']['downgrade_packages']) || !empty($product['product_check']['new_packages']) || !empty($product['product_check']['reinstall_packages']) || !empty($product['product_check']['remove_packages']) || - !empty($product['product_check']['upgrade_packages']) - ) { + !empty($product['product_check']['upgrade_packages']); + + if ($from_changelog || $from_check) { $ret = gettext('Click to view pending updates.'); }