From ecc9c6f209f8eade24ea457b1a664fbc5a326d6d Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Tue, 15 Oct 2019 18:23:34 +0100 Subject: [PATCH] sort the os_ver in the web interface (#663) --- lib/App/Netdisco/Web/Plugin/Inventory.pm | 13 +++++++++++-- lib/App/Netdisco/Web/Search.pm | 14 ++++++++++---- share/views/ajax/search/device.tt | 1 + share/views/layouts/main.tt | 1 + 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/App/Netdisco/Web/Plugin/Inventory.pm b/lib/App/Netdisco/Web/Plugin/Inventory.pm index c6fcb311..125c6e53 100644 --- a/lib/App/Netdisco/Web/Plugin/Inventory.pm +++ b/lib/App/Netdisco/Web/Plugin/Inventory.pm @@ -16,10 +16,19 @@ get '/inventory' => require_login sub { my $platforms = schema('netdisco')->resultset('Device')->get_platforms(); my $releases = schema('netdisco')->resultset('Device')->get_releases(); + my %release_map = ( + map { (join '', map {sprintf '%05s', $_} split m/(\D)/, ($_->{os_ver} || '')) => $_ } + $releases->hri->all + ); + my @release_list = + map { $release_map{$_} } + sort {(($release_map{$a}->{os} || '') cmp ($release_map{$b}->{os} || '')) || ($a cmp $b)} + keys %release_map; + var(nav => 'inventory'); template 'inventory', { - platforms => [$platforms->hri->all], - releases => [$releases->hri->all], + platforms => [ $platforms->hri->all ], + releases => [ @release_list ], }; }; diff --git a/lib/App/Netdisco/Web/Search.pm b/lib/App/Netdisco/Web/Search.pm index b447b031..60028857 100644 --- a/lib/App/Netdisco/Web/Search.pm +++ b/lib/App/Netdisco/Web/Search.pm @@ -78,10 +78,16 @@ get '/search' => require_login sub { } # used in the device search sidebar to populate select inputs - my $model_list = [ $s->resultset('Device')->get_distinct_col('model') ]; - my $os_list = [ $s->resultset('Device')->get_distinct_col('os') ]; - my $os_ver_list = [ $s->resultset('Device')->get_distinct_col('os_ver') ]; - my $vendor_list = [ $s->resultset('Device')->get_distinct_col('vendor') ]; + my $model_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('model') ]; + my $os_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('os') ]; + my $vendor_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('vendor') ]; + + my %os_vermap = ( + map { $_ => (join '', map {sprintf '%05s', $_} split m/(\D)/) } + grep { defined } + $s->resultset('Device')->get_distinct_col('os_ver') + ); + my $os_ver_list = [ sort {$os_vermap{$a} cmp $os_vermap{$b}} keys %os_vermap ]; template 'search', { search => params->{'tab'}, diff --git a/share/views/ajax/search/device.tt b/share/views/ajax/search/device.tt index c2069446..2ec1a68e 100644 --- a/share/views/ajax/search/device.tt +++ b/share/views/ajax/search/device.tt @@ -41,6 +41,7 @@ $(document).ready(function() { } }, { "data": 'os_ver', + "type": 'versionsort', "render": function(data, type, row, meta) { return he.encode(data || ''); } diff --git a/share/views/layouts/main.tt b/share/views/layouts/main.tt index 39f0351f..cbc87bae 100644 --- a/share/views/layouts/main.tt +++ b/share/views/layouts/main.tt @@ -35,6 +35,7 @@ +