more appropriate usage of vars and template tokens in before and before_template
This commit is contained in:
		| @@ -8,77 +8,83 @@ use NetAddr::IP::Lite ':lower'; | ||||
| use App::Netdisco::Util::Web (); # for sort_port | ||||
|  | ||||
| hook 'before' => sub { | ||||
|     # list of port detail columns | ||||
|     var('port_columns' => [ | ||||
|         { name => 'c_admin',       label => 'Admin Controls',    default => ''   }, | ||||
|         { name => 'c_port',        label => 'Port',              default => 'on' }, | ||||
|         { name => 'c_descr',       label => 'Description',       default => ''   }, | ||||
|         { name => 'c_type',        label => 'Type',              default => ''   }, | ||||
|         { name => 'c_duplex',      label => 'Duplex',            default => ''   }, | ||||
|         { name => 'c_lastchange',  label => 'Last Change',       default => ''   }, | ||||
|         { name => 'c_name',        label => 'Name',              default => 'on' }, | ||||
|         { name => 'c_speed',       label => 'Speed',             default => ''   }, | ||||
|         { name => 'c_mac',         label => 'Port MAC',          default => ''   }, | ||||
|         { name => 'c_mtu',         label => 'MTU',               default => ''   }, | ||||
|         { name => 'c_vlan',        label => 'Native VLAN',       default => 'on' }, | ||||
|         { name => 'c_vmember',     label => 'Tagged VLANs',      default => 'on' }, | ||||
|         { name => 'c_power',       label => 'PoE',               default => ''   }, | ||||
|         { name => 'c_nodes',       label => 'Connected Nodes',   default => ''   }, | ||||
|         { name => 'c_neighbors',   label => 'Connected Devices', default => 'on' }, | ||||
|         { name => 'c_stp',         label => 'Spanning Tree',     default => ''   }, | ||||
|         { name => 'c_up',          label => 'Status',            default => ''   }, | ||||
|     ]); | ||||
|   # list of port detail columns | ||||
|   var('port_columns' => [ | ||||
|     { name => 'c_admin',       label => 'Admin Controls',    default => ''   }, | ||||
|     { name => 'c_port',        label => 'Port',              default => 'on' }, | ||||
|     { name => 'c_descr',       label => 'Description',       default => ''   }, | ||||
|     { name => 'c_type',        label => 'Type',              default => ''   }, | ||||
|     { name => 'c_duplex',      label => 'Duplex',            default => ''   }, | ||||
|     { name => 'c_lastchange',  label => 'Last Change',       default => ''   }, | ||||
|     { name => 'c_name',        label => 'Name',              default => 'on' }, | ||||
|     { name => 'c_speed',       label => 'Speed',             default => ''   }, | ||||
|     { name => 'c_mac',         label => 'Port MAC',          default => ''   }, | ||||
|     { name => 'c_mtu',         label => 'MTU',               default => ''   }, | ||||
|     { name => 'c_vlan',        label => 'Native VLAN',       default => 'on' }, | ||||
|     { name => 'c_vmember',     label => 'Tagged VLANs',      default => 'on' }, | ||||
|     { name => 'c_power',       label => 'PoE',               default => ''   }, | ||||
|     { name => 'c_nodes',       label => 'Connected Nodes',   default => ''   }, | ||||
|     { name => 'c_neighbors',   label => 'Connected Devices', default => 'on' }, | ||||
|     { name => 'c_stp',         label => 'Spanning Tree',     default => ''   }, | ||||
|     { name => 'c_up',          label => 'Status',            default => ''   }, | ||||
|   ]); | ||||
|  | ||||
|     # view settings for port connected devices | ||||
|     var('connected_properties' => [ | ||||
|         { name => 'n_age',      label => 'Age Stamp',     default => ''   }, | ||||
|         { name => 'n_ip',       label => 'IP Address',    default => 'on' }, | ||||
|         { name => 'n_archived', label => 'Archived Data', default => ''   }, | ||||
|     ]); | ||||
|   # view settings for port connected devices | ||||
|   var('connected_properties' => [ | ||||
|     { name => 'n_age',      label => 'Age Stamp',     default => ''   }, | ||||
|     { name => 'n_ip',       label => 'IP Address',    default => 'on' }, | ||||
|     { name => 'n_archived', label => 'Archived Data', default => ''   }, | ||||
|   ]); | ||||
|  | ||||
|     # new searches will use these defaults in their sidebars | ||||
|     var('device_ports' => uri_for('/device', { | ||||
|       tab => 'ports', | ||||
|       age_num => 3, | ||||
|       age_unit => 'months', | ||||
|     })); | ||||
|   return unless (request->path eq uri_for('/device')->path | ||||
|     or index(request->path, uri_for('/ajax/content/device')->path) == 0); | ||||
|  | ||||
|     foreach my $col (@{ var('port_columns') }) { | ||||
|         next unless $col->{default} eq 'on'; | ||||
|         var('device_ports')->query_param($col->{name}, 'checked'); | ||||
|     } | ||||
|   foreach my $col (@{ var('port_columns') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       params->{$col->{name}} = 'checked' | ||||
|         if not param('tab') or param('tab') ne 'ports'; | ||||
|   } | ||||
|  | ||||
|     foreach my $col (@{ var('connected_properties') }) { | ||||
|         next unless $col->{default} eq 'on'; | ||||
|         var('device_ports')->query_param($col->{name}, 'checked'); | ||||
|     } | ||||
|   foreach my $col (@{ var('connected_properties') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       params->{$col->{name}} = 'checked' | ||||
|         if not param('tab') or param('tab') ne 'ports'; | ||||
|   } | ||||
|  | ||||
|     if (request->path eq uri_for('/device')->path | ||||
|         or index(request->path, uri_for('/ajax/content/device')->path) == 0) { | ||||
|   if (not param('tab') or param('tab') ne 'ports') { | ||||
|       params->{'age_num'} = 3; | ||||
|       params->{'age_unit'} = 'months'; | ||||
|   } | ||||
| }; | ||||
|  | ||||
|         foreach my $col (@{ var('port_columns') }) { | ||||
|             next unless $col->{default} eq 'on'; | ||||
|             params->{$col->{name}} = 'checked' | ||||
|               if not param('tab') or param('tab') ne 'ports'; | ||||
|         } | ||||
| hook 'before_template' => sub { | ||||
|   my $tokens = shift; | ||||
|  | ||||
|         foreach my $col (@{ var('connected_properties') }) { | ||||
|             next unless $col->{default} eq 'on'; | ||||
|             params->{$col->{name}} = 'checked' | ||||
|               if not param('tab') or param('tab') ne 'ports'; | ||||
|         } | ||||
|   # new searches will use these defaults in their sidebars | ||||
|   $tokens->{device_ports} = uri_for('/device', { | ||||
|     tab => 'ports', | ||||
|     age_num => 3, | ||||
|     age_unit => 'months', | ||||
|   }); | ||||
|  | ||||
|         if (not param('tab') or param('tab') ne 'ports') { | ||||
|             params->{'age_num'} = 3; | ||||
|             params->{'age_unit'} = 'months'; | ||||
|         } | ||||
|   foreach my $col (@{ var('port_columns') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       $tokens->{device_ports}->query_param($col->{name}, 'checked'); | ||||
|   } | ||||
|  | ||||
|         # for templates to link to same page with modified query but same options | ||||
|         my $self_uri = uri_for(request->path, scalar params); | ||||
|         $self_uri->query_param_delete('q'); | ||||
|         $self_uri->query_param_delete('f'); | ||||
|         var('self_options' => $self_uri->query_form_hash); | ||||
|     } | ||||
|   foreach my $col (@{ var('connected_properties') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       $tokens->{device_ports}->query_param($col->{name}, 'checked'); | ||||
|   } | ||||
|  | ||||
|   return unless (request->path eq uri_for('/device')->path | ||||
|     or index(request->path, uri_for('/ajax/content/device')->path) == 0); | ||||
|  | ||||
|   # for templates to link to same page with modified query but same options | ||||
|   my $self_uri = uri_for(request->path, scalar params); | ||||
|   $self_uri->query_param_delete('q'); | ||||
|   $self_uri->query_param_delete('f'); | ||||
|   $tokens->{self_options} = $self_uri->query_form_hash; | ||||
| }; | ||||
|  | ||||
| ajax '/ajax/content/device/:thing' => sub { | ||||
|   | ||||
| @@ -9,51 +9,58 @@ use Net::MAC (); | ||||
| use List::MoreUtils (); | ||||
|  | ||||
| hook 'before' => sub { | ||||
|     # view settings for node options | ||||
|     var('node_options' => [ | ||||
|       { name => 'stamps', label => 'Time Stamps', default => 'on' }, | ||||
|     ]); | ||||
|     # view settings for device options | ||||
|     var('device_options' => [ | ||||
|       { name => 'matchall', label => 'Match All Options', default => 'on' }, | ||||
|     ]); | ||||
|   # view settings for node options | ||||
|   var('node_options' => [ | ||||
|     { name => 'stamps', label => 'Time Stamps', default => 'on' }, | ||||
|   ]); | ||||
|  | ||||
|     # new searches will use these defaults in their sidebars | ||||
|     var('search_node'   => uri_for('/search', {tab => 'node'})); | ||||
|     var('search_device' => uri_for('/search', {tab => 'device'})); | ||||
|   # view settings for device options | ||||
|   var('device_options' => [ | ||||
|     { name => 'matchall', label => 'Match All Options', default => 'on' }, | ||||
|   ]); | ||||
|  | ||||
|     foreach my $col (@{ var('node_options') }) { | ||||
|         next unless $col->{default} eq 'on'; | ||||
|         var('search_node')->query_param($col->{name}, 'checked'); | ||||
|     } | ||||
|   return unless (request->path eq uri_for('/search')->path | ||||
|       or index(request->path, uri_for('/ajax/content/search')->path) == 0); | ||||
|  | ||||
|     foreach my $col (@{ var('device_options') }) { | ||||
|         next unless $col->{default} eq 'on'; | ||||
|         var('search_device')->query_param($col->{name}, 'checked'); | ||||
|     } | ||||
|   foreach my $col (@{ var('node_options') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       params->{$col->{name}} = 'checked' | ||||
|         if not param('tab') or param('tab') ne 'node'; | ||||
|   } | ||||
|  | ||||
|     if (request->path eq uri_for('/search')->path | ||||
|         or index(request->path, uri_for('/ajax/content/search')->path) == 0) { | ||||
|   foreach my $col (@{ var('device_options') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       params->{$col->{name}} = 'checked' | ||||
|         if not param('tab') or param('tab') ne 'device'; | ||||
|   } | ||||
| }; | ||||
|  | ||||
|         foreach my $col (@{ var('node_options') }) { | ||||
|             next unless $col->{default} eq 'on'; | ||||
|             params->{$col->{name}} = 'checked' | ||||
|               if not param('tab') or param('tab') ne 'node'; | ||||
|         } | ||||
| hook 'before_template' => sub { | ||||
|   my $tokens = shift; | ||||
|  | ||||
|         foreach my $col (@{ var('device_options') }) { | ||||
|             next unless $col->{default} eq 'on'; | ||||
|             params->{$col->{name}} = 'checked' | ||||
|               if not param('tab') or param('tab') ne 'device'; | ||||
|         } | ||||
|   # new searches will use these defaults in their sidebars | ||||
|   $tokens->{search_node}   = uri_for('/search', {tab => 'node'}); | ||||
|   $tokens->{search_device} = uri_for('/search', {tab => 'device'}); | ||||
|  | ||||
|         # 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 }); | ||||
|         } | ||||
|     } | ||||
|   foreach my $col (@{ var('node_options') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       $tokens->{search_node}->query_param($col->{name}, 'checked'); | ||||
|   } | ||||
|  | ||||
|   foreach my $col (@{ var('device_options') }) { | ||||
|       next unless $col->{default} eq 'on'; | ||||
|       $tokens->{search_device}->query_param($col->{name}, 'checked'); | ||||
|   } | ||||
|  | ||||
|   return unless (request->path eq uri_for('/search')->path | ||||
|       or index(request->path, uri_for('/ajax/content/search')->path) == 0); | ||||
|  | ||||
|   # 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)] : [])); | ||||
|       $tokens->{"${opt}_lkp"} = { map { $_ => 1 } @$p }; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| # device with various properties or a default match-all | ||||
| @@ -226,15 +233,9 @@ get '/search' => sub { | ||||
|     } | ||||
|  | ||||
|     # used in the device search sidebar to populate select inputs | ||||
|     var('model_list' => [ | ||||
|       schema('netdisco')->resultset('Device')->get_distinct_col('model') | ||||
|     ]); | ||||
|     var('os_ver_list' => [ | ||||
|       schema('netdisco')->resultset('Device')->get_distinct_col('os_ver') | ||||
|     ]); | ||||
|     var('vendor_list' => [ | ||||
|       schema('netdisco')->resultset('Device')->get_distinct_col('vendor') | ||||
|     ]); | ||||
|     my $model_list  = [ schema('netdisco')->resultset('Device')->get_distinct_col('model')  ]; | ||||
|     my $os_ver_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('os_ver') ]; | ||||
|     my $vendor_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('vendor') ]; | ||||
|  | ||||
|     # list of tabs | ||||
|     var('tabs' => [ | ||||
| @@ -244,7 +245,11 @@ get '/search' => sub { | ||||
|         { id => 'port',   label => 'Port'   }, | ||||
|     ]); | ||||
|  | ||||
|     template 'search'; | ||||
|     template 'search', { | ||||
|       model_list  => $model_list, | ||||
|       os_ver_list => $os_ver_list, | ||||
|       vendor_list => $vendor_list, | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| true; | ||||
|   | ||||
| @@ -14,10 +14,10 @@ | ||||
|       <td>[% row.alias %]</a> | ||||
|       <td>[% row.dns.remove(settings.domain_suffix) %]</a> | ||||
|       <td class="center_cell"><a class="nd_linkcell" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.port %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.port %]</a></td> | ||||
|       <td>[% row.device_port.name %]</td> | ||||
|       <td><a class="nd_linkcell" | ||||
|         href="[% vars.search_device %]&ip=[% row.subnet %]">[% row.subnet %]</a></td> | ||||
|         href="[% search_device %]&ip=[% row.subnet %]">[% row.subnet %]</a></td> | ||||
|     </tr> | ||||
|     [% END %] | ||||
|   </tbody> | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|       [% ELSE %] | ||||
|       <td> | ||||
|         <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" | ||||
|         href="[% vars.search_device %]&location=[% d.location | uri %]">[% d.location %]</a> | ||||
|         href="[% search_device %]&location=[% d.location | uri %]">[% d.location %]</a> | ||||
|       </td> | ||||
|       [% END %] | ||||
|     </tr> | ||||
| @@ -41,10 +41,10 @@ | ||||
|       <td>Vendor / Model</td> | ||||
|       <td> | ||||
|         <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" | ||||
|         href="[% vars.search_device %]&vendor=[% d.vendor | uri %]">[% d.vendor %]</a> | ||||
|         href="[% search_device %]&vendor=[% d.vendor | uri %]">[% d.vendor %]</a> | ||||
|         / | ||||
|         <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" | ||||
|         href="[% vars.search_device %]&model=[% d.model | uri %]">[% d.model %]</a> | ||||
|         href="[% search_device %]&model=[% d.model | uri %]">[% d.model %]</a> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
| @@ -52,7 +52,7 @@ | ||||
|       <td>[% d.os %] / | ||||
|         <a rel="tooltip" data-placement="top" data-offset="5" | ||||
|           data-title="Find Similar Devices" | ||||
|           href="[% vars.search_device %]&os_ver=[% d.os_ver | uri %]">[% d.os_ver %]</a> | ||||
|           href="[% search_device %]&os_ver=[% d.os_ver | uri %]">[% d.os_ver %]</a> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|   | ||||
| @@ -44,7 +44,7 @@ | ||||
|       <td nowrap> | ||||
|       [% END %] | ||||
|         <a class="nd_linkcell nd_this_port_only" href="[% uri_for('/device', | ||||
|             vars.self_options) %]&q=[% params.q | uri %]&f=[% row.port | uri %]"> | ||||
|             self_options) %]&q=[% params.q | uri %]&f=[% row.port | uri %]"> | ||||
|         [% row.port | html_entity %] | ||||
|       </a></td> | ||||
|       [% END %] | ||||
| @@ -182,12 +182,12 @@ | ||||
|         [% IF params.c_neighbors AND row.remote_ip %] | ||||
|           [% IF row.neighbor %] | ||||
|           <a href="[% uri_for('/device', | ||||
|                 vars.self_options) %]&q=[% row.neighbor.ip | uri %]&f=[% row.remote_port | uri %]"> | ||||
|                 self_options) %]&q=[% row.neighbor.ip | uri %]&f=[% row.remote_port | uri %]"> | ||||
|             [% row.neighbor.dns.remove(settings.domain_suffix) || row.neighbor.ip %] | ||||
|             ([% row.remote_port | html_entity %])</a> | ||||
|           [% ELSE %] | ||||
|           <span class="label label-important">N</span> | ||||
|           <a href="[% vars.search_node %]&q=[% row.remote_ip | uri %]"> | ||||
|           <a href="[% search_node %]&q=[% row.remote_ip | uri %]"> | ||||
|             [% row.remote_ip %] (port: [% row.remote_port %] | ||||
|             id: [% (row.remote_type _ ' / ') IF row.remote_type %][% row.remote_id %])</a> | ||||
|           [% END %] | ||||
| @@ -196,16 +196,16 @@ | ||||
|         [% FOREACH node IN row.$nodes %] | ||||
|           [% '<br/>' IF row.remote_ip OR NOT loop.first %] | ||||
|           [% '<span class="label label-warning">A</span>  ' IF NOT node.active %] | ||||
|           <a href="[% vars.search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> | ||||
|           <a href="[% search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> | ||||
|           [% ' (' _ node.time_last_age _ ')' IF params.n_age %] | ||||
|           [% IF params.n_ip %] | ||||
|             [% FOREACH ip IN node.ips %] | ||||
|             <br/>  [% '<span class="label label-warning">A</span>  ' IF NOT ip.active %] | ||||
|               [% SET dns = ip.dns %] | ||||
|               [% IF dns %] | ||||
|               <a href="[% vars.search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip %])</a> | ||||
|               <a href="[% search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip %])</a> | ||||
|               [% ELSE %] | ||||
|               <a href="[% vars.search_node %]&q=[% ip.ip | uri %]">[% ip.ip %]</a> | ||||
|               <a href="[% search_node %]&q=[% ip.ip | uri %]">[% ip.ip %]</a> | ||||
|               [% END %] | ||||
|             [% END %] | ||||
|           [% END %] | ||||
|   | ||||
| @@ -17,12 +17,12 @@ | ||||
|     [% WHILE (row = macs.next) %] | ||||
|     <tr> | ||||
|       <td><a class="nd_linkcell" | ||||
|         href="[% vars.search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a></td> | ||||
|         href="[% search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a></td> | ||||
|       [% IF params.vendor %] | ||||
|       <td>[% row.oui.company %]</td> | ||||
|       [% END %] | ||||
|       <td>IP → MAC</td> | ||||
|       <td><a href="[% vars.search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> | ||||
|       <td><a href="[% search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> | ||||
|         [% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %] | ||||
|         [% ' <span class="label label-warning">A</span>' IF NOT row.active %] | ||||
|       </td> | ||||
| @@ -38,7 +38,7 @@ | ||||
|       <td> </td> | ||||
|       [% END %] | ||||
|       <td>Switch Port</td> | ||||
|       <td><a href="[% vars.device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> | ||||
|       <td><a href="[% device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> | ||||
|         [% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %] | ||||
|         [% ' <span class="label label-warning">A</span>' IF NOT node.active %] | ||||
|       </td> | ||||
| @@ -55,7 +55,7 @@ | ||||
|       <td> </td> | ||||
|       [% END %] | ||||
|       <td>MAC → IP</td> | ||||
|       <td><a href="[% vars.search_node %]&q=[% nodeip.ip | uri %]">[% nodeip.ip %]</a> | ||||
|       <td><a href="[% search_node %]&q=[% nodeip.ip | uri %]">[% nodeip.ip %]</a> | ||||
|         [% ' (' _ nodeip.dns.remove(settings.domain_suffix) _ ')' IF nodeip.dns %] | ||||
|         [% ' <span class="label label-warning">A</span>' IF NOT nodeip.active %] | ||||
|       </td> | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
|       <td> | ||||
|         [% IF first_row %] | ||||
|         <a class="nd_linkcell" | ||||
|           href="[% vars.search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a> | ||||
|           href="[% search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a> | ||||
|         [% ELSE %] | ||||
|           | ||||
|         [% END %] | ||||
| @@ -35,7 +35,7 @@ | ||||
|       </td> | ||||
|       [% END %] | ||||
|       <td>MAC → IP</td> | ||||
|       <td><a href="[% vars.search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> | ||||
|       <td><a href="[% search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> | ||||
|         [% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %] | ||||
|         [% ' <span class="label label-warning">A</span>' IF NOT row.active %] | ||||
|       </td> | ||||
| @@ -51,7 +51,7 @@ | ||||
|       <td> | ||||
|         [% IF first_row %] | ||||
|         <a class="nd_linkcell" | ||||
|           href="[% vars.search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> | ||||
|           href="[% search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> | ||||
|         [% ELSE %] | ||||
|           | ||||
|         [% END %] | ||||
| @@ -66,7 +66,7 @@ | ||||
|       </td> | ||||
|       [% END %] | ||||
|       <td>Switch Port</td> | ||||
|       <td><a href="[% vars.device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> | ||||
|       <td><a href="[% device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> | ||||
|         [% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %] | ||||
|         [% ' <span class="label label-warning">A</span>' IF NOT node.active %] | ||||
|       </td> | ||||
| @@ -82,7 +82,7 @@ | ||||
|       <td> | ||||
|         [% IF first_row %] | ||||
|         <a class="nd_linkcell" | ||||
|           href="[% vars.search_node %]&q=[% port.mac | uri %]">[% port.mac %]</a> | ||||
|           href="[% search_node %]&q=[% port.mac | uri %]">[% port.mac %]</a> | ||||
|         [% ELSE %] | ||||
|           | ||||
|         [% END %] | ||||
| @@ -97,7 +97,7 @@ | ||||
|       </td> | ||||
|       [% END %] | ||||
|       <td>Switch Port</td> | ||||
|       <td><a href="[% vars.device_ports %]&q=[% port.ip | url %]&f=[% port.port | url %]&c_nodes=on&c_neighbor=on">[% port.ip %] [ [% port.port %] ]</a> | ||||
|       <td><a href="[% device_ports %]&q=[% port.ip | url %]&f=[% port.port | url %]&c_nodes=on&c_neighbor=on">[% port.ip %] [ [% port.port %] ]</a> | ||||
|         [% ' (' _ port.device.dns.remove(settings.domain_suffix) _ ')' IF port.device.dns %] | ||||
|       </td> | ||||
|       [% IF params.stamps %] | ||||
|   | ||||
| @@ -11,7 +11,7 @@ | ||||
|     [% WHILE (row = results.next) %] | ||||
|     <tr> | ||||
|       <td>[% row.name %]</td> | ||||
|       <td><a href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.ip %] [ [% row.port %] ]</a> | ||||
|       <td><a href="[% device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.ip %] [ [% row.port %] ]</a> | ||||
|         [% ' (' _ row.device.dns.remove(settings.domain_suffix) _ ')' IF row.device.dns %] | ||||
|       </td> | ||||
|       <td>[% row.descr %]</td> | ||||
|   | ||||
| @@ -13,17 +13,17 @@ | ||||
|     [% WHILE (row = results.next) %] | ||||
|     <tr> | ||||
|       <td><a class="nd_linkcell nd_stealthlink" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.vlan %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.vlan %]</a></td> | ||||
|       <td><a class="nd_linkcell" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.dns.remove(settings.domain_suffix) || row.ip %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.dns.remove(settings.domain_suffix) || row.ip %]</a></td> | ||||
|       <td><a class="nd_linkcell nd_stealthlink" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.description %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.description %]</a></td> | ||||
|       <td><a class="nd_linkcell nd_stealthlink" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.model %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.model %]</a></td> | ||||
|       <td><a class="nd_linkcell nd_stealthlink" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.os %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.os %]</a></td> | ||||
|       <td><a class="nd_linkcell nd_stealthlink" | ||||
|         href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vendor %]</a></td> | ||||
|         href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vendor %]</a></td> | ||||
|     </tr> | ||||
|     [% END %] | ||||
|   </tbody> | ||||
|   | ||||
| @@ -17,12 +17,12 @@ | ||||
|           <tr> | ||||
|             <th> | ||||
|               <a class="nd_linkcell" | ||||
|                 href="[% vars.search_device %]&vendor=[% platform.vendor %]"> | ||||
|                 href="[% search_device %]&vendor=[% platform.vendor %]"> | ||||
|                   [% platform.vendor %]</a> | ||||
|             </th> | ||||
|             <th> | ||||
|               <a class="nd_linkcell" | ||||
|                 href="[% vars.search_device %]&model=[% platform.model %]"> | ||||
|                 href="[% search_device %]&model=[% platform.model %]"> | ||||
|                   [% platform.model %]</a> | ||||
|             </th> | ||||
|             <th>[% platform.get_column('count') %]</th> | ||||
| @@ -48,7 +48,7 @@ | ||||
|             <th>[% release.os %]</th> | ||||
|             <th> | ||||
|               <a class="nd_linkcell" | ||||
|                 href="[% vars.search_device %]&os_ver=[% release.os_ver %]"> | ||||
|                 href="[% search_device %]&os_ver=[% release.os_ver %]"> | ||||
|                   [% release.os_ver %]</a> | ||||
|             </th> | ||||
|             <th>[% release.get_column('count') %]</th> | ||||
|   | ||||
| @@ -42,29 +42,29 @@ | ||||
|                 rel="tooltip" data-placement="left" data-offset="5" data-title="Description"/> | ||||
|             </div> | ||||
|             <div class="clearfix"> | ||||
|               <select class="nd_side_select" size="[% vars.model_list.size > 5 ? 5 : vars.model_list.size %]" | ||||
|               <select class="nd_side_select" size="[% model_list.size > 5 ? 5 : model_list.size %]" | ||||
|                 multiple="on" name="model" | ||||
|                 rel="tooltip" data-placement="left" data-offset="5" data-title="Model"/> | ||||
|                 [% FOREACH opt IN vars.model_list %] | ||||
|                 <option[% ' selected="selected"' IF vars.model_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% FOREACH opt IN model_list %] | ||||
|                 <option[% ' selected="selected"' IF model_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% END %] | ||||
|               </select> | ||||
|             </div> | ||||
|             <div class="clearfix"> | ||||
|               <select class="nd_side_select" size="[% vars.os_ver_list.size > 5 ? 5 : vars.os_ver_list.size %]" | ||||
|               <select class="nd_side_select" size="[% os_ver_list.size > 5 ? 5 : os_ver_list.size %]" | ||||
|                 multiple="on" name="os_ver" | ||||
|                 rel="tooltip" data-placement="left" data-offset="5" data-title="OS Release"/> | ||||
|                 [% FOREACH opt IN vars.os_ver_list %] | ||||
|                 <option[% ' selected="selected"' IF vars.os_ver_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% FOREACH opt IN os_ver_list %] | ||||
|                 <option[% ' selected="selected"' IF os_ver_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% END %] | ||||
|               </select> | ||||
|             </div> | ||||
|             <div class="clearfix"> | ||||
|               <select class="nd_side_select" size="[% vars.vendor_list.size > 5 ? 5 : vars.vendor_list.size %]" | ||||
|               <select class="nd_side_select" size="[% vendor_list.size > 5 ? 5 : vendor_list.size %]" | ||||
|                 multiple="on" name="vendor" | ||||
|                 rel="tooltip" data-placement="left" data-offset="5" data-title="Vendor"/> | ||||
|                 [% FOREACH opt IN vars.vendor_list %] | ||||
|                 <option[% ' selected="selected"' IF vars.vendor_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% FOREACH opt IN vendor_list %] | ||||
|                 <option[% ' selected="selected"' IF vendor_lkp.exists(opt) %]>[% opt %]</option> | ||||
|                 [% END %] | ||||
|               </select> | ||||
|             </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user