diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php index 4205341a3..d41e25caa 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -92,20 +92,66 @@ class FirmwareController extends ApiControllerBase ); } } - } else { - $response = array('status' => 'unknown', 'status_msg' => gettext('Current status is unknown.')); - } - /* XXX array isn't flat, need to refactor this */ - if (isset($response['upgrade_packages'])) { $sorted = array(); - foreach ($response['upgrade_packages'] as $key => $value) { - $sorted[$value['name']] = $value; + + /* + * new_packages: array with { name: , version: } + * reinstall_packages: array with { name: , version: } + * delete_packages: array with { name: , version: } + * upgrade_packages: array with { name: , current_version: , new_version: } + */ + foreach (array('new_packages', 'reinstall_packages', 'delete_packages', 'upgrade_packages') as $pkg_type) { + if (isset($response[$pkg_type])) { + foreach ($response[$pkg_type] as $value) { + switch ($pkg_type) { + case 'new_packages': + $sorted[$value['name']] = array( + 'new' => $value['version'], + 'reason' => gettext('new'), + 'name' => $value['name'], + 'old' => gettext('N/A'), + ); + break; + case 'reinstall_packages': + $sorted[$value['name']] = array( + 'reason' => gettext('reinstall'), + 'new' => $value['version'], + 'old' => $value['version'], + 'name' => $value['name'], + ); + break; + case 'delete_packages': + $sorted[$value['name']] = array( + 'reason' => gettext('delete'), + 'old' => $value['version'], + 'name' => $value['name'], + 'new' => gettext('N/A'), + ); + break; + case 'upgrade_packages': + $sorted[$value['name']] = array( + 'reason' => gettext('update'), + 'old' => $value['current_version'], + 'new' => $value['new_version'], + 'name' => $value['name'], + ); + break; + default: + /* undefined */ + break; + } + } + } } + uksort($sorted, function ($a, $b) { return strnatcmp($a, $b); }); - $response['upgrade_packages'] = $sorted; + + $response['all_packages'] = $sorted; + } else { + $response = array('status' => 'unknown', 'status_msg' => gettext('Firmware status check was aborted internally. Please try again.')); } return $response; diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt index 971c41bf6..4b9474d7e 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt @@ -63,22 +63,12 @@ POSSIBILITY OF SUCH DAMAGE. // show upgrade list $('#updatetab > a').tab('show'); $("#updatelist").html("{{ lang._('Package Name') }}" + - "{{ lang._('Current Version') }}{{ lang._('New Version') }}"); - $.each(['new_packages', 'upgrade_packages', 'reinstall_packages'], function(type_idx,type_name){ - if ( data[type_name] != undefined ) { - $.each(data[type_name],function(index,row){ - if (type_name == "new_packages") { - $('#updatelist').append(''+row['name']+'' + - "{{ lang._('NEW') }}"+row['version']+""); - } else if (type_name == "reinstall_packages") { - $('#updatelist').append(''+row['name']+'' + - ""+row['version']+"{{ lang._('REINSTALL') }}"); - } else { - $('#updatelist').append(''+row['name']+'' + - ''+row['current_version']+''+row['new_version']+''); - } - }); - } + "{{ lang._('Current Version') }}{{ lang._('New Version') }}" + + "{{ lang._('Required Action') }}"); + $.each(data['all_packages'], function (index, row) { + $('#updatelist').append(''+row['name']+'' + + ''+row['old']+''+row['new']+'' + + row['reason'] + ''); }); }