drag address and router even farther into the century
authorjeff <jeff>
Fri, 18 Apr 2008 03:29:59 +0000 (03:29 +0000)
committerjeff <jeff>
Fri, 18 Apr 2008 03:29:59 +0000 (03:29 +0000)
FS/t/addr_block.t [new file with mode: 0644]
FS/t/router.t [new file with mode: 0644]
httemplate/browse/addr_block.cgi
httemplate/browse/router.cgi
httemplate/edit/allocate.html [new file with mode: 0644]
httemplate/edit/process/addr_block/add.cgi
httemplate/edit/process/addr_block/allocate.cgi
httemplate/edit/process/addr_block/deallocate.cgi
httemplate/edit/process/addr_block/split.cgi

diff --git a/FS/t/addr_block.t b/FS/t/addr_block.t
new file mode 100644 (file)
index 0000000..4f49a44
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::addr_block;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/router.t b/FS/t/router.t
new file mode 100644 (file)
index 0000000..fe171b3
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::router;
+$loaded=1;
+print "ok 1\n";
index 7a93519..d597ee1 100644 (file)
-<% include('/elements/header.html', 'Address Blocks') %>
-
-<% include('/elements/error.html') %>
-
-<% include('/elements/table-grid.html') %>
-% my $bgcolor1 = '#eeeeee';
-%   my $bgcolor2 = '#ffffff';
-%   my $bgcolor = '';
-
-  <TR>
-    <TH CLASS="grid" BGCOLOR="#cccccc">Address block(s)</TH>
-    <TH CLASS="grid" BGCOLOR="#cccccc">Router</TH>
-    <TH CLASS="grid" BGCOLOR="#cccccc">Action(s)</TH>
-  </TR>
-
-% foreach $block (sort {$a->NetAddr cmp $b->NetAddr} @addr_block) { 
-%    if ( $bgcolor eq $bgcolor1 ) {
-%      $bgcolor = $bgcolor2;
-%    } else {
-%      $bgcolor = $bgcolor1;
-%    }
-
-    <TR>
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><%$block->NetAddr%></TD>
-
-%   if (my $router = $block->router) { 
-%
-%     if (scalar($block->svc_broadband) == 0) { 
-
-        <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
-          <%$router->routername%>
-        </TD>
-        <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
-          <FORM ACTION="<%$path%>/deallocate.cgi" METHOD="POST">
-            <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%$block->blocknum%>">
-            <INPUT TYPE="submit" NAME="submit" VALUE="Deallocate">
-          </FORM>
-        </TD>
-%     } else { 
-
-        <TD COLSPAN="2" CLASS="grid" BGCOLOR="<% $bgcolor %>">
-        <%$router->routername%>
-        </TD>
-%     } 
-%
-%   } else { 
-
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
-        <FORM ACTION="<%$path%>/allocate.cgi" METHOD="POST">
-          <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%$block->blocknum%>">
-          <SELECT NAME="routernum" SIZE="1">
-%           foreach (@router) { 
-              <OPTION VALUE="<%$_->routernum %>"><%$_->routername%></OPTION>
-%           } 
-          </SELECT>
-          <INPUT TYPE="submit" NAME="submit" VALUE="Allocate">
-        </FORM>
-      </TD>
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
-        <FORM ACTION="<%$path%>/split.cgi" METHOD="POST">
-          <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%$block->blocknum%>">
-          <INPUT TYPE="submit" NAME="submit" VALUE="Split">
-        </FORM>
-      </TD>
-
-%   }
-
-  </TR>
-% } 
-
-</TABLE>
-
-<BR><BR>
-<FORM ACTION="<%$path%>/add.cgi" METHOD="POST">
-Gateway/Netmask: 
-<INPUT TYPE="text" NAME="ip_gateway" SIZE="15">/<INPUT TYPE="text" NAME="ip_netmask" SIZE="2">
-<INPUT TYPE="submit" NAME="submit" VALUE="Add">
-
-<% include('/elements/footer.html') %>
+<% include('elements/browse.html',
+                'title'         => 'Address Blocks',
+                'name'          => 'address block',
+                'html_init'     => $html_init,
+                'html_form'     => $html_form,
+                'query'         => { 'table'     => 'addr_block',
+                                     'hashref'   => {},
+                                     'extra_sql' => $extra_sql,
+                                     'order_by'  => $order_by,
+                                   },
+                'count_query'   => "SELECT count(*) from addr_block $extra_sql",
+                'header'        => [ 'Address Block',
+                                     'Router',
+                                     'Action(s)',
+                                     '',
+                                   ],
+                'fields'        => [ 'NetAddr',
+                                     sub { my $block = shift;
+                                           my $router = $block->router;
+                                           my $result = '';
+                                           if ($router) {
+                                             $result .= $router->routername. ' (';
+                                             $result .= scalar($block->svc_broadband). ' services)';
+                                           }
+                                           $result;
+                                         },
+                                     $allocate_text,
+                                     sub { shift->router ? '' : '<FONT SIZE="-2">(split)</FONT>' },
+                                   ],
+                'links'         => [ '',
+                                     '',
+                                     [ 'javascript:void(0)', '' ],
+                                     $split_link,
+                                   ],
+                'link_onclicks' => [ '',
+                                     '',
+                                     $allocate_link,
+                                     '',
+                                   ],
+                'cell_styles'   => [ '',
+                                     '',
+                                     'border-right:none;',
+                                     'border-left:none;',
+                                   ],
+          )
+%>
 <%init>
 
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 
-my @addr_block = qsearch('addr_block', {});
-my @router = qsearch('router', {});
-my $block;
 my $p2 = popurl(2);
 my $path = $p2 . "edit/process/addr_block";
 
+my $extra_sql = " ";
+my $order_by = "ORDER BY ";
+$order_by .= "inet(ip_gateway), " if driver_name =~ /^Pg/i;
+$order_by .= "inet_aton(ip_gateway), " if driver_name =~ /^mysql/i;
+$order_by .= "ip_netmask";
+
+my $html_init = qq(
+<SCRIPT>
+  function addr_block_areyousure(href, word) {
+    if(confirm("Are you sure you want to "+word+" this address block?") == true)
+      window.location.href = href;
+  }
+</SCRIPT>
+);
+
+$html_init .= include('/elements/error.html');
+
+my $confirm = sub {
+  my ($verb, $num) = (shift, shift);
+  "javascript:addr_block_areyousure('$path/$verb.cgi?blocknum=$num', '$verb')";
+};
+
+my $html_form = qq(
+  <FORM ACTION="$path/add.cgi" METHOD="POST">
+  Gateway/Netmask: 
+  <INPUT TYPE="text" NAME="ip_gateway" SIZE="15">/<INPUT TYPE="text" NAME="ip_netmask" SIZE="2">
+  <INPUT TYPE="submit" NAME="submit" VALUE="Add">
+  </FORM>
+);
+
+my $allocate_text = sub { my $block = shift;
+                          my $router = $block->router;
+                          my $result = '';
+                          if ($router) {
+                            $result = '<FONT SIZE="-2">(deallocate)</FONT>'
+                              unless scalar($block->svc_broadband);
+                          }else{
+                            $result .= '<FONT SIZE="-2">(allocate)</FONT>'
+                          }
+                          $result;
+};
+
+my $allocate_link = sub {
+  my $block = shift;
+  if ($block->router) { 
+    if (scalar($block->svc_broadband) == 0) { 
+      &{$confirm}('deallocate', $block->blocknum);
+    } else { 
+      "";
+    } 
+  } else { 
+    include( '/elements/popup_link_onclick.html',
+             'action' => "${p2}edit/allocate.html?blocknum=". $block->blocknum,
+             'actionlabel' => 'Allocate block to router',
+           );
+  } 
+}; 
+
+my $split_link = sub {
+  my $block = shift;
+  my $ref = [ '', '' ];
+  $ref = [ &{$confirm}('split', $block->blocknum), '' ]
+    unless ($block->router);
+  $ref;
+}; 
+
 </%init>
index a52f609..9d856f6 100644 (file)
@@ -1,76 +1,43 @@
-<% include('/elements/header.html', 'Routers') %>
-
-<% include('/elements/error.html') %>
-
-%my $hidecustomerrouters = 0;
-%my $hideurl = '';
-%if ($cgi->param('hidecustomerrouters') eq '1') {
-%  $hidecustomerrouters = 1;
-%  $cgi->param('hidecustomerrouters', 0);
-%  $hideurl = '<A HREF="' . $cgi->self_url() . '">Show customer routers</A>';
-%} else {
-%  $hidecustomerrouters = 0;
-%  $cgi->param('hidecustomerrouters', 1);
-%  $hideurl = '<A HREF="' . $cgi->self_url() . '">Hide customer routers</A>';
-%}
-
-<A HREF="<%$p2%>edit/router.cgi">Add a new router</A>&nbsp;|&nbsp;<%$hideurl%>
-
-<% include('/elements/table-grid.html') %>
-% my $bgcolor1 = '#eeeeee';
-%   my $bgcolor2 = '#ffffff';
-%   my $bgcolor = '';
-
-  <TR>
-    <TH CLASS="grid" BGCOLOR="#cccccc">Router name</TH>
-    <TH CLASS="grid" BGCOLOR="#cccccc">Address block(s)</TH>
-  </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, '&nbsp;';
-%     }
-%
-%    if ( $bgcolor eq $bgcolor1 ) {
-%      $bgcolor = $bgcolor2;
-%    } else {
-%      $bgcolor = $bgcolor1;
-%    }
-
-  <TR>
-
-    <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
-      <A HREF="<%$p2%>edit/router.cgi?<%$router->routernum%>"><%$router->routername%></A>
-    </TD>
-
-    <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
-      <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
-
-%       foreach my $block ( @addr_block ) { 
-
-          <TR>
-            <TD><%UNIVERSAL::isa($block, 'FS::addr_block') ? $block->NetAddr : '&nbsp;'%></TD>
-          </TR>
-%       } 
-      </TABLE>
-    </TD>
-
-  </TR>
-
-% } 
-
-</TABLE>
-
-<% include('/elements/footer.html') %>
-
+<% include('elements/browse.html',
+                'title'           => 'Routers',
+                'menubar'         => [ @menubar ],
+                'name_singular'   => 'router',
+                'query'           => { 'table'     => 'router',
+                                       'hashref'   => {},
+                                       'extra_sql' => $extra_sql,
+                                     },
+                'count_query'     => "SELECT count(*) from router $extra_sql",
+                'header'          => [ 'Router name',
+                                       'Address block(s)',
+                                     ],
+                'fields'          => [ 'routername',
+                                       sub { join( '<BR>', map { $_->NetAddr }
+                                                               shift->addr_block
+                                                 );
+                                           },
+                                     ],
+                'links'           => [ [ "${p2}edit/router.cgi?", 'routernum' ],
+                                       '',
+                                     ],
+          )
+%>
 <%init>
 
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 
-my @router = qsearch('router', {});
 my $p2 = popurl(2);
+my $extra_sql = '';
+
+my @menubar = ( 'Add a new router', "${p2}edit/router.cgi" );
+
+if ($cgi->param('hidecustomerrouters') eq '1') {
+  $extra_sql = 'WHERE svcnum > 0';
+  $cgi->param('hidecustomerrouters', 0);
+  push @menubar, 'Show customer routers', $cgi->self_url();
+} else {
+  $cgi->param('hidecustomerrouters', 1);
+  push @menubar, 'Hide customer routers', $cgi->self_url();
+}
 
 </%init>
diff --git a/httemplate/edit/allocate.html b/httemplate/edit/allocate.html
new file mode 100644 (file)
index 0000000..29c16ae
--- /dev/null
@@ -0,0 +1,26 @@
+<% include('elements/edit.html',
+                'name'        => 'Allocation',
+                'table'       => 'addr_block',
+                'labels'      => { 'NetAddr'   => 'Block',
+                                   'routernum' => 'Router',
+                                 },
+                'fields'      => [ { 'field'         => 'NetAddr',
+                                     'type'          => 'fixed',
+                                   },
+                                   { 'field'         => 'routernum',
+                                     'type'          => 'select-table',
+                                     'table'         => 'router',
+                                     'name_col'      => 'routername',
+                                     'disable_empty' => 1,
+                                   },
+                                 ],
+                'post_url'    => "process/addr_block/allocate.cgi",
+                'popup'       => 1,
+          )
+%>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+</%init>
index 85780c6..e9f9b97 100755 (executable)
 %} 
 %
 
+<%init>
+
+my $conf = new FS::Conf;
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+</%init>
index a94c032..d1bd73f 100755 (executable)
@@ -1,26 +1,14 @@
-%
-%my $error = '';
-%my $blocknum = $cgi->param('blocknum');
-%my $routernum = $cgi->param('routernum');
-%
-%my $addr_block = qsearchs('addr_block', { blocknum => $blocknum });
-%my $router = qsearchs('router', { routernum => $routernum });
-%
-%if($addr_block) {
-%  if ($router) {
-%    $error = $addr_block->allocate($router);
-%  } else {
-%    $error = "Cannot find router with routernum $routernum";
-%  }
-%} else {
-%  $error = "Cannot find block with blocknum $blocknum";
-%}
-%
-%if ( $error ) {
-%  $cgi->param('error', $error);
-%  print $cgi->redirect(popurl(4). "browse/addr_block.cgi?" . $cgi->query_string);
-%} else { 
-%  print $cgi->redirect(popurl(4). "browse/addr_block.cgi");
-%}
-%
+<% include( '../elements/process.html',
+            'table'          => 'addr_block',
+            'copy_on_empty'  => [ fields 'addr_block' ],
+            'error_redirect' => popurl(3). 'allocate.html?',
+            'popup_reload'   => 'Block allocated',
+          )
+%>
+<%init>
 
+my $conf = new FS::Conf;
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+</%init>
index 494c19f..95e1b7e 100755 (executable)
 %}
 %
 
+<%init>
+
+my $conf = new FS::Conf;
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+</%init>
index 617c3f8..b3a33b1 100755 (executable)
 %} 
 %
 
+<%init>
+
+my $conf = new FS::Conf;
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+
+</%init>