From 4268fff785e3608b6453a9df6c4f7a18ce6bbebb Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sat, 21 Dec 2019 23:08:02 +0000 Subject: [PATCH] #681 Add href link to a device in a report --- lib/App/Netdisco/Web/GenericReport.pm | 27 ++++++++++++++++++----- share/views/ajax/report/generic_report.tt | 6 +++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/lib/App/Netdisco/Web/GenericReport.pm b/lib/App/Netdisco/Web/GenericReport.pm index 6e2f5855..097ae6d8 100644 --- a/lib/App/Netdisco/Web/GenericReport.pm +++ b/lib/App/Netdisco/Web/GenericReport.pm @@ -7,6 +7,7 @@ use Dancer::Plugin::Auth::Extensible; use App::Netdisco::Web::Plugin; use Path::Class 'file'; +use Storable 'dclone'; use Safe; our ($config, @data); @@ -30,11 +31,24 @@ foreach my $report (@{setting('reports')}) { my $rs = schema($schema)->resultset('Virtual::GenericReport')->result_source; (my $query = $report->{query}) =~ s/;$//; + # unpick the rather hairy config of 'columns' to get field, + # displayname, and "_"-prefixed options + my %column_config = (); + my @column_order = (); + foreach my $col (@{ $report->{columns} }) { + foreach my $k (keys %$col) { + if ($k !~ m/^_/) { + push @column_order, $k; + $column_config{$k} = dclone($col || {}); + $column_config{$k}->{displayname} = delete $column_config{$k}->{$k}; + } + } + } + $rs->view_definition($query); $rs->remove_columns($rs->columns); $rs->add_columns( exists $report->{query_columns} - ? @{ $report->{query_columns} } - : (map {keys %{$_}} @{$report->{columns}}) + ? @{ $report->{query_columns} } : @column_order ); my $set = schema($schema)->resultset('Virtual::GenericReport') @@ -60,16 +74,17 @@ foreach my $report (@{setting('reports')}) { template 'ajax/report/generic_report.tt', { results => \@results, is_custom_report => true, - headings => [map {values %{$_}} @{$report->{columns}}], - columns => [map {keys %{$_}} @{$report->{columns}}] }, + column_options => \%column_config, + headings => [map {$column_config{$_}->{displayname}} @column_order], + columns => [@column_order] }, { layout => undef }; } else { header( 'Content-Type' => 'text/comma-separated-values' ); template 'ajax/report/generic_report_csv.tt', { results => \@results, - headings => [map {values %{$_}} @{$report->{columns}}], - columns => [map {keys %{$_}} @{$report->{columns}}] }, + headings => [map {$column_config{$_}->{displayname}} @column_order], + columns => [@column_order] }, { layout => undef }; } }; diff --git a/share/views/ajax/report/generic_report.tt b/share/views/ajax/report/generic_report.tt index 7a583597..1e106039 100644 --- a/share/views/ajax/report/generic_report.tt +++ b/share/views/ajax/report/generic_report.tt @@ -10,7 +10,13 @@ [% FOREACH row IN results %] [% FOREACH col IN columns %] + [% IF column_options.$col._searchable %] + + [% row.item(col) | html_entity %] + + [% ELSE %] [% row.item(col) | html_entity %] + [% END %] [% END %] [% END %]