#681 Add href link to a device in a report
This commit is contained in:
@@ -7,6 +7,7 @@ use Dancer::Plugin::Auth::Extensible;
|
|||||||
|
|
||||||
use App::Netdisco::Web::Plugin;
|
use App::Netdisco::Web::Plugin;
|
||||||
use Path::Class 'file';
|
use Path::Class 'file';
|
||||||
|
use Storable 'dclone';
|
||||||
use Safe;
|
use Safe;
|
||||||
|
|
||||||
our ($config, @data);
|
our ($config, @data);
|
||||||
@@ -30,11 +31,24 @@ foreach my $report (@{setting('reports')}) {
|
|||||||
my $rs = schema($schema)->resultset('Virtual::GenericReport')->result_source;
|
my $rs = schema($schema)->resultset('Virtual::GenericReport')->result_source;
|
||||||
(my $query = $report->{query}) =~ s/;$//;
|
(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->view_definition($query);
|
||||||
$rs->remove_columns($rs->columns);
|
$rs->remove_columns($rs->columns);
|
||||||
$rs->add_columns( exists $report->{query_columns}
|
$rs->add_columns( exists $report->{query_columns}
|
||||||
? @{ $report->{query_columns} }
|
? @{ $report->{query_columns} } : @column_order
|
||||||
: (map {keys %{$_}} @{$report->{columns}})
|
|
||||||
);
|
);
|
||||||
|
|
||||||
my $set = schema($schema)->resultset('Virtual::GenericReport')
|
my $set = schema($schema)->resultset('Virtual::GenericReport')
|
||||||
@@ -60,16 +74,17 @@ foreach my $report (@{setting('reports')}) {
|
|||||||
template 'ajax/report/generic_report.tt',
|
template 'ajax/report/generic_report.tt',
|
||||||
{ results => \@results,
|
{ results => \@results,
|
||||||
is_custom_report => true,
|
is_custom_report => true,
|
||||||
headings => [map {values %{$_}} @{$report->{columns}}],
|
column_options => \%column_config,
|
||||||
columns => [map {keys %{$_}} @{$report->{columns}}] },
|
headings => [map {$column_config{$_}->{displayname}} @column_order],
|
||||||
|
columns => [@column_order] },
|
||||||
{ layout => undef };
|
{ layout => undef };
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
header( 'Content-Type' => 'text/comma-separated-values' );
|
header( 'Content-Type' => 'text/comma-separated-values' );
|
||||||
template 'ajax/report/generic_report_csv.tt',
|
template 'ajax/report/generic_report_csv.tt',
|
||||||
{ results => \@results,
|
{ results => \@results,
|
||||||
headings => [map {values %{$_}} @{$report->{columns}}],
|
headings => [map {$column_config{$_}->{displayname}} @column_order],
|
||||||
columns => [map {keys %{$_}} @{$report->{columns}}] },
|
columns => [@column_order] },
|
||||||
{ layout => undef };
|
{ layout => undef };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
[% FOREACH row IN results %]
|
[% FOREACH row IN results %]
|
||||||
<tr>
|
<tr>
|
||||||
[% FOREACH col IN columns %]
|
[% FOREACH col IN columns %]
|
||||||
|
[% IF column_options.$col._searchable %]
|
||||||
|
<td>
|
||||||
|
<a href="[% uri_for('/search') | none %]?q=[% row.item(col) | uri %]">[% row.item(col) | html_entity %]</a>
|
||||||
|
</td>
|
||||||
|
[% ELSE %]
|
||||||
<td>[% row.item(col) | html_entity %]</td>
|
<td>[% row.item(col) | html_entity %]</td>
|
||||||
|
[% END %]
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|||||||
Reference in New Issue
Block a user