From 5ce85fd7bf032c0af09c4ada863d68d6f0deec0f Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 9 Apr 2012 15:02:06 +0100 Subject: [PATCH] Refactor begin hooks (closes #16) --- Changes | 1 + Netdisco/lib/Netdisco/Web.pm | 11 +++++++ Netdisco/lib/Netdisco/Web/AuthN.pm | 2 +- Netdisco/lib/Netdisco/Web/Device.pm | 6 ++-- Netdisco/lib/Netdisco/Web/Search.pm | 47 ++++++++++++----------------- 5 files changed, 36 insertions(+), 31 deletions(-) diff --git a/Changes b/Changes index 648e1784..1ae02f83 100644 --- a/Changes +++ b/Changes @@ -3,6 +3,7 @@ [ENHANCEMENTS] * Native copy of the Netdisco sort_port routine (#17) + * Refactor begin hooks (closes #16) [BUG FIXES] diff --git a/Netdisco/lib/Netdisco/Web.pm b/Netdisco/lib/Netdisco/Web.pm index d0360ede..6fe60d7c 100644 --- a/Netdisco/lib/Netdisco/Web.pm +++ b/Netdisco/lib/Netdisco/Web.pm @@ -26,6 +26,17 @@ hook 'before_template' => sub { $Template::Directive::WHILE_MAX = 10_000; }; +# set up query strings which describe default search options. +# these are used in both Device and Search templates +hook 'before_template' => sub { + var('query_defaults' => { map { ($_ => "tab=$_") } qw/node device/ }); + + var('query_defaults')->{node} .= "\&$_=". (param($_) || '') + for qw/stamps vendor archived partial/; + var('query_defaults')->{device} .= "\&$_=". (param($_) || '') + for qw/matchall/; +}; + get '/' => sub { template 'index'; }; diff --git a/Netdisco/lib/Netdisco/Web/AuthN.pm b/Netdisco/lib/Netdisco/Web/AuthN.pm index 9472e8fd..d10b52e9 100644 --- a/Netdisco/lib/Netdisco/Web/AuthN.pm +++ b/Netdisco/lib/Netdisco/Web/AuthN.pm @@ -6,7 +6,7 @@ use Dancer::Plugin::DBIC; use Digest::MD5 (); hook 'before' => sub { - if (! session('user') && request->path !~ m{/login$}) { + if (! session('user') && request->path ne uri_for('/login')->path) { if (setting('environment') eq 'development' and setting('no_auth')) { session(user => 'developer'); } diff --git a/Netdisco/lib/Netdisco/Web/Device.pm b/Netdisco/lib/Netdisco/Web/Device.pm index f05a6385..ca83b16d 100644 --- a/Netdisco/lib/Netdisco/Web/Device.pm +++ b/Netdisco/lib/Netdisco/Web/Device.pm @@ -33,9 +33,9 @@ hook 'before' => sub { { name => 'n_archived', label => 'Archived Data', default => '' }, ]); - # set up default search options for each type - if (request->path =~ m{/device$}) { - if (not param('tab') or param('tab') ne 'ports' or scalar keys %{params()} < 4) { + if (request->path eq uri_for('/device')->path) { + # new searches will have these defaults in the ports sidebar + if (not param('tab') or param('tab') ne 'ports') { foreach my $col (@{ var('port_columns') }) { params->{$col->{name}} = 'checked' if $col->{default} eq 'on'; } diff --git a/Netdisco/lib/Netdisco/Web/Search.pm b/Netdisco/lib/Netdisco/Web/Search.pm index d0015195..01159ccf 100644 --- a/Netdisco/lib/Netdisco/Web/Search.pm +++ b/Netdisco/lib/Netdisco/Web/Search.pm @@ -10,29 +10,33 @@ use List::MoreUtils (); use Net::DNS (); hook 'before' => sub { - # make hash lookups of query lists - foreach my $opt (qw/model vendor os_ver/) { - my $p = (ref [] eq ref param($opt) ? param($opt) : (param($opt) ? [param($opt)] : [])); - var("${opt}_lkp" => { map { $_ => 1 } @$p }); - } - - # set up default search options for each type - if (request->path =~ m{/search$}) { + if (request->path eq uri_for('/search')->path) { + # new searches have these defaults in their sidebars if (not param('tab') or param('tab') ne 'node') { params->{'stamps'} = 'checked'; } if (not param('tab') or param('tab') ne 'device') { params->{'matchall'} = 'checked'; } + + # used in the device search sidebar to populate select inputs + var('model_list' => [ + schema('netdisco')->resultset('Device')->get_distinct('model') + ]); + var('os_ver_list' => [ + schema('netdisco')->resultset('Device')->get_distinct('os_ver') + ]); + var('vendor_list' => [ + schema('netdisco')->resultset('Device')->get_distinct('vendor') + ]); + + # used in the device search sidebar template to set selected items + foreach my $opt (qw/model vendor os_ver/) { + my $p = (ref [] eq ref param($opt) ? param($opt) + : (param($opt) ? [param($opt)] : [])); + var("${opt}_lkp" => { map { $_ => 1 } @$p }); + } } - - # set up query string defaults for hyperlinks to templates with forms - var('query_defaults' => { map { ($_ => "tab=$_") } qw/node device/ }); - - var('query_defaults')->{node} .= "\&$_=". (param($_) || '') - for qw/stamps vendor archived partial/; - var('query_defaults')->{device} .= "\&$_=". (param($_) || '') - for qw/matchall/; }; # device with various properties or a default match-all @@ -174,17 +178,6 @@ ajax '/ajax/content/search/port' => sub { }; get '/search' => sub { - # set up property lists for device search - var('model_list' => [ - schema('netdisco')->resultset('Device')->get_distinct('model') - ]); - var('os_ver_list' => [ - schema('netdisco')->resultset('Device')->get_distinct('os_ver') - ]); - var('vendor_list' => [ - schema('netdisco')->resultset('Device')->get_distinct('vendor') - ]); - my $q = param('q'); if (not param('tab')) { if (not $q) {