From cd22c741e51cdb645eba008d130ee25f3c1f8377 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Tue, 30 Sep 2014 08:02:15 +0100 Subject: [PATCH] initial support for bind params in custom reports --- Netdisco/lib/App/Netdisco/Web/GenericReport.pm | 11 +++++++---- Netdisco/lib/App/Netdisco/Web/Plugin.pm | 13 ++++++++++--- Netdisco/share/views/report.tt | 1 + .../share/views/sidebar/report/generic_report.tt | 4 ++++ 4 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 Netdisco/share/views/sidebar/report/generic_report.tt 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 %]