-<A HREF="<%=$p2%>edit/router.cgi">Add a new router</A> | <%=$hideurl%>
-
-<%=table()%>
- <TR>
- <TD><B>Router name</B></TD>
- <TD><B>Address block(s)</B></TD>
- </TR>
-<% foreach my $router (sort {$a->routernum <=> $b->routernum} @router) {
- next if $hidecustomerrouters && $router->svcnum;
- my @addr_block = $router->addr_block;
- if (scalar(@addr_block) == 0) {
- push @addr_block, ' ';
- }
-%>
- <TR>
- <TD ROWSPAN="<%=scalar(@addr_block)+1%>">
- <A HREF="<%=$p2%>edit/router.cgi?<%=$router->routernum%>"><%=$router->routername%></A>
- </TD>
- </TR>
- <% foreach my $block ( @addr_block ) { %>
- <TR>
- <TD><%=UNIVERSAL::isa($block, 'FS::addr_block') ? $block->NetAddr : ' '%></TD>
- </TR>
- <% } %>
- </TR>
-<% } %>
-</TABLE>
-</BODY>
-</HTML>
+my @header_fields = ('Router name', 'Address block(s)', 'IP addressing');
+my @fields = ( 'routername',
+ sub { join( '<BR>', map { $_->NetAddr } shift->addr_block); },
+ sub { shift->manual_addr ? 'Manual' : 'Automatic' },
+ );
+my @links = ( [ "${p2}edit/router.cgi?", 'routernum' ],
+ '',
+ '',
+ );
+
+foreach (FS::router->virtual_fields_hash) {
+ push @header_fields, encode_entities($_->{'label'});
+ push @fields, encode_entities($_->{'name'});
+ push @links, '';
+}
+
+push @header_fields, 'Action';
+push @fields, sub { 'Delete' };
+push @links, [ "${p}misc/delete-router.html?", 'routernum' ];
+
+my $count_sql = $extra_sql. ( $extra_sql =~ /WHERE/ ? ' AND' : 'WHERE' ).
+ $FS::CurrentUser::CurrentUser->agentnums_sql(
+ 'null_right' => 'Broadband global configuration',
+ );
+