1package App::Netdisco::Web::Plugin::Search::VLAN; 2 3use Dancer ':syntax'; 4use Dancer::Plugin::DBIC; 5use Dancer::Plugin::Auth::Extensible; 6 7use App::Netdisco::Web::Plugin; 8 9register_search_tab({ 10 tag => 'vlan', 11 label => 'VLAN', 12 provides_csv => 1, 13 api_endpoint => 1, 14 api_parameters => [ 15 q => { 16 description => 'VLAN name or number', 17 required => 1, 18 }, 19 ], 20}); 21 22# devices carrying vlan xxx 23get '/ajax/content/search/vlan' => require_login sub { 24 my $q = param('q'); 25 send_error( 'Missing query', 400 ) unless $q; 26 return unless ($q =~ m/\w/); # need some alphanum at least 27 my $rs; 28 29 if ( $q =~ m/^\d+$/ ) { 30 $rs = schema('netdisco')->resultset('Device') 31 ->carrying_vlan( { vlan => $q } ); 32 } 33 else { 34 $rs = schema('netdisco')->resultset('Device') 35 ->carrying_vlan_name( { name => $q } ); 36 } 37 38 my @results = $rs->hri->all; 39 return unless scalar @results; 40 41 if (request->is_ajax) { 42 my $json = to_json( \@results ); 43 template 'ajax/search/vlan.tt', { results => $json }; 44 } 45 else { 46 header( 'Content-Type' => 'text/comma-separated-values' ); 47 template 'ajax/search/vlan_csv.tt', { results => \@results }; 48 } 49}; 50 511; 52