diff --git a/Netdisco/lib/App/Netdisco/Web/GenericReport.pm b/Netdisco/lib/App/Netdisco/Web/GenericReport.pm
index bc31e19d..4d23d25d 100644
--- a/Netdisco/lib/App/Netdisco/Web/GenericReport.pm
+++ b/Netdisco/lib/App/Netdisco/Web/GenericReport.pm
@@ -22,11 +22,10 @@ foreach my $report (@{setting('reports')}) {
});
get "/ajax/content/report/$r" => require_login sub {
- my $rs = schema('netdisco')->resultset('Virtual::GenericReport')->result_source;
-
# TODO: this should be done by creating a new Virtual Result class on
# the fly (package...) and then calling DBIC register_class on it.
+ my $rs = schema('netdisco')->resultset('Virtual::GenericReport')->result_source;
$rs->view_definition($report->{query});
$rs->remove_columns($rs->columns);
$rs->add_columns( exists $report->{query_columns}
@@ -35,13 +34,17 @@ foreach my $report (@{setting('reports')}) {
);
my $set = schema('netdisco')->resultset('Virtual::GenericReport')
- ->search(undef, {result_class => 'DBIx::Class::ResultClass::HashRefInflator'});
+ ->search(undef, {
+ result_class => 'DBIx::Class::ResultClass::HashRefInflator',
+ ( (exists $report->{bind_params})
+ ? (bind => [map { param($_) } @{ $report->{bind_params} }]) : () ),
+ });
@data = $set->all;
# Data Munging support...
my $compartment = Safe->new;
- $config = $report;
+ $config = $report; # closure for the config of this report
$compartment->share(qw/$config @data/);
$compartment->permit_only(qw/:default sort/);
diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin.pm b/Netdisco/lib/App/Netdisco/Web/Plugin.pm
index adffac6b..17d4b503 100644
--- a/Netdisco/lib/App/Netdisco/Web/Plugin.pm
+++ b/Netdisco/lib/App/Netdisco/Web/Plugin.pm
@@ -169,15 +169,22 @@ register 'register_report' => sub {
return error "bad config to register_report";
}
- foreach my $item (@{setting('_reports_menu')->{ $config->{category} }}) {
- if ($item eq $config->{tag}) {
- setting('_reports')->{$config->{tag}} = $config;
+ foreach my $tag (@{setting('_reports_menu')->{ $config->{category} }}) {
+ if ($tag eq $config->{tag}) {
+ setting('_reports')->{$tag} = $config;
return;
}
}
push @{setting('_reports_menu')->{ $config->{category} }}, $config->{tag};
setting('_reports')->{$config->{tag}} = $config;
+
+ foreach my $rconfig (@{setting('reports')}) {
+ if ($rconfig->{tag} eq $config->{tag}) {
+ setting('_reports')->{$config->{tag}}->{'rconfig'} = $rconfig;
+ last;
+ }
+ }
};
register_plugin;
diff --git a/Netdisco/share/views/report.tt b/Netdisco/share/views/report.tt
index d1d47bc3..a08d2c9a 100644
--- a/Netdisco/share/views/report.tt
+++ b/Netdisco/share/views/report.tt
@@ -17,6 +17,7 @@
[% INCLUDE "sidebar/report/${report.tag}.tt" %]
[% CATCH %]
+ [% INCLUDE "sidebar/report/generic_report.tt" %]
[% END %]
diff --git a/Netdisco/share/views/sidebar/report/generic_report.tt b/Netdisco/share/views/sidebar/report/generic_report.tt
new file mode 100644
index 00000000..008b3b27
--- /dev/null
+++ b/Netdisco/share/views/sidebar/report/generic_report.tt
@@ -0,0 +1,4 @@
+
+[% FOREACH k IN report.rconfig.bind_params %]
+
+[% END %]