diff options
author | Mark Wells <mark@freeside.biz> | 2012-02-27 10:31:47 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2012-02-27 10:31:47 -0800 |
commit | eb9d1063e1203231ee0c6922ea5638370f7b5ece (patch) | |
tree | e2d6781d7b0a9239c5e3deb98b27c694426f86c5 /httemplate | |
parent | caba365bbebc7e73ad0c25f9a3a9c75a48ed6140 (diff) |
allow svc_broadband to link directly to a router, #14698
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/browse/router.cgi | 4 | ||||
-rwxr-xr-x | httemplate/edit/router.cgi | 3 | ||||
-rw-r--r-- | httemplate/edit/svc_broadband.cgi | 5 | ||||
-rw-r--r-- | httemplate/elements/select-tiered.html | 12 | ||||
-rw-r--r-- | httemplate/elements/tr-select-router_block_ip.html | 94 | ||||
-rwxr-xr-x | httemplate/search/report_svc_broadband.html | 4 | ||||
-rwxr-xr-x | httemplate/search/svc_broadband.cgi | 4 | ||||
-rw-r--r-- | httemplate/view/svc_broadband.cgi | 9 |
8 files changed, 123 insertions, 12 deletions
diff --git a/httemplate/browse/router.cgi b/httemplate/browse/router.cgi index 069ca9b20..21047d7fc 100644 --- a/httemplate/browse/router.cgi +++ b/httemplate/browse/router.cgi @@ -9,6 +9,7 @@ 'count_query' => "SELECT count(*) from router $count_sql", 'header' => [ 'Router name', 'Address block(s)', + 'IP addressing', 'Action', ], 'fields' => [ 'routername', @@ -16,10 +17,12 @@ shift->addr_block ); }, + sub { shift->auto_addr ? 'Automatic' : 'Manual' }, sub { 'Delete' }, ], 'links' => [ [ "${p2}edit/router.cgi?", 'routernum' ], '', + '', [ "${p}misc/delete-router.html?", 'routernum' ], ], 'agent_virt' => 1, @@ -52,4 +55,5 @@ my $count_sql = $extra_sql. ( $extra_sql =~ /WHERE/ ? ' AND' : 'WHERE' ). 'null_right' => 'Broadband global configuration', ); + </%init> diff --git a/httemplate/edit/router.cgi b/httemplate/edit/router.cgi index 70eaa4576..6672d5d75 100755 --- a/httemplate/edit/router.cgi +++ b/httemplate/edit/router.cgi @@ -6,11 +6,14 @@ 'labels' => { 'routernum' => 'Router', 'routername' => 'Name', 'svc_part' => 'Service', + 'agentnum' => 'Agent', + 'auto_addr' => 'Assign IP addresses automatically', }, 'fields' => [ { 'field'=>'routername', 'type'=>'text', 'size'=>32 }, { 'field'=>'agentnum', 'type'=>'select-agent' }, { 'field'=>'svcnum', 'type'=>'hidden' }, + { 'field'=>'auto_addr','type'=>'checkbox','value'=>'Y'}, ], 'error_callback' => $callback, 'edit_callback' => $callback, diff --git a/httemplate/edit/svc_broadband.cgi b/httemplate/edit/svc_broadband.cgi index ff57ac0ce..8fccb1fa8 100644 --- a/httemplate/edit/svc_broadband.cgi +++ b/httemplate/edit/svc_broadband.cgi @@ -100,10 +100,9 @@ END ; my @fields = ( - qw( description ip_addr speed_down speed_up ), + qw( description speed_down speed_up ), { field=>'sectornum', type=>'select-tower_sector', }, - qw( blocknum ), - { field=>'block_label', type=>'fixed' }, + { field=>'routernum', type=>'select-router_block_ip', }, qw( mac_addr latitude longitude altitude vlan_profile performance_profile authkey plan_id ), ); diff --git a/httemplate/elements/select-tiered.html b/httemplate/elements/select-tiered.html index 35f9e5a60..99b285274 100644 --- a/httemplate/elements/select-tiered.html +++ b/httemplate/elements/select-tiered.html @@ -35,6 +35,7 @@ contain the following: isn't fully tested. - after: an HTML string to be inserted after the select element, before the next one. By default there's nothing between them. +- onchange: an additional javascript function to be called on change. For convenience, "curr_value" and "field" can be passed as part of the main argument list, and will be applied to the last tier. @@ -43,8 +44,13 @@ main argument list, and will be applied to the last tier. % $i = 0; % foreach my $tier (@$tiers) { % my $onchange; -% $onchange="onchange='${pre}select_change(this, $i)'" +% $onchange="${pre}select_change(this, $i)" % if $i < scalar(@$tiers) - 1; +% +% $onchange .= ';'.$tier->{onchange}."(this, $i);" +% if $tier->{onchange}; +% +% $onchange = "onchange='$onchange'" if $onchange; <SELECT NAME="<% $tier->{field} %>" ID="<% $pre."select_".$i %>" @@ -54,7 +60,8 @@ main argument list, and will be applied to the last tier. % if ( $i == 0 ) { % my $options = $tiers_by_key->[0]->{''}; % foreach ( sort keys %$options ) { - <OPTION VALUE="<%$_ |h%>"><% $options->{$_} |h%></OPTION> + <OPTION VALUE="<%$_ |h%>" <% $curr_values->[$i] eq $_ ? 'SELECTED' : ''%>> + <% $options->{$_} |h%></OPTION> % } % } % $i++; @@ -178,7 +185,6 @@ while($i >= 1) { foreach my $key ( %{ $tier->{by_key} } ) { my $options = $tier->{by_key}->{$key}; if ( exists( $options->{$curr_value} ) ) { - warn "tier $i curr_value ($curr_value) found under key $key\n"; $tiers->[$i-1]->{curr_value} = $key; last; } diff --git a/httemplate/elements/tr-select-router_block_ip.html b/httemplate/elements/tr-select-router_block_ip.html new file mode 100644 index 000000000..e6b7bfe7e --- /dev/null +++ b/httemplate/elements/tr-select-router_block_ip.html @@ -0,0 +1,94 @@ +<script type="text/javascript"> +var auto_addr_routernum = <% encode_json(\%auto_addr_routernum) %>; +function hide_if_auto_addr(obj, i) { + var routernum = obj.value; + var select_blocknum = document.getElementsByName('blocknum')[0]; + var label_auto_addr = document.getElementById('label_auto_addr'); + var input_ip_addr = document.getElementById('input_ip_addr'); + var auto = ( auto_addr_routernum[routernum] == 'Y' ); + select_blocknum.style.display = auto ? '' : 'none'; + label_auto_addr.style.display = auto ? '' : 'none'; + input_ip_addr.style.display = !auto ? '' : 'none'; +} +</script> +<& /elements/tr-td-label.html, label => ($opt{'label'} || 'Router') &> +<td> + <& /elements/select-tiered.html, prefix => 'router_', tiers => [ + { + field => 'routernum', + records => \@routers, + name_col => 'routername', + value_col => 'routernum', + onchange => 'hide_if_auto_addr', + curr_value=> $opt{'routernum'}, + }, + { + field => 'blocknum', + table => 'addr_block', + hashref => (exists($fixed{'blocknum'}) ? + { blocknum => $fixed{'blocknum'} } : {} + ), + name_col => 'cidr', + link_col => 'routernum', + empty_label => '(any)', + curr_value => $opt{'blocknum'}, + }, +] +&> +</td></tr> +<& /elements/tr-td-label.html, label => 'IP address' &> +<td> +% if ( $fixed{'ip_addr'} ) { + <input type="hidden" id="input_ip_addr" name="ip_addr" + value="<% $opt{'ip_addr'} |h%>"><% $opt{'ip_addr'} || '' %> +% } +% else { + <input type="text" id="input_ip_addr" name="ip_addr" + style="display:none" value="<% $opt{'ip_addr'} |h%>"> +% } + <span id="label_auto_addr"><% $opt{'ip_addr'} || '' %> + <i>(automatic)</i></span> +</td> </tr> +<script type="text/javascript"> +hide_if_auto_addr(document.getElementsByName('routernum')[0],0); +</script> +<%init> +my %opt = @_; +my @routers; + +my $svc_x = $opt{'object'}; +if ( $svc_x ) { + $opt{$_} = $svc_x->$_ + foreach qw(routernum blocknum ip_addr svcpart); +} + +warn Dumper(\%opt); + +my $svcpart = $opt{'svcpart'} || ''; +my %fixed; # which fields are fixed +$svcpart =~ /^\d*$/ or die "invalid svcpart '$svcpart'"; +if ( $svcpart ) { + my $part_svc = FS::part_svc->by_key($svcpart); + # Traditionally, columnflag 'F' on IP address means that it MUST + # be auto-assigned (or, if null IP addresses are allowed, that + # it must be null). + foreach (qw(routernum blocknum ip_addr)) { + my $psc = $part_svc->part_svc_column($_); + if ( $psc and $psc->columnflag eq 'F' ) { + $fixed{$_} = $psc->columnvalue; + } + } + if ( $fixed{'routernum'} ) { + @routers = (FS::router->by_key($fixed{'routernum'})) + } + else { + @routers = map { $_->router } + qsearch('part_svc_router', { svcpart => $svcpart }); + } +} +else { + @routers = qsearch('router', {}); +} + +my %auto_addr_routernum = map { $_->routernum, $_->auto_addr } @routers; +</%init> diff --git a/httemplate/search/report_svc_broadband.html b/httemplate/search/report_svc_broadband.html index ee4dfce90..37f21b79f 100755 --- a/httemplate/search/report_svc_broadband.html +++ b/httemplate/search/report_svc_broadband.html @@ -26,6 +26,10 @@ 'multiple' => 'multiple', ) %> + <tr> + <td></td> + <td><input type="checkbox" name="routernum" value="none" checked> Include services with no router</td> + </tr> <% include( '/elements/tr-selectmultiple-part_pkg.html', %pkg_search, diff --git a/httemplate/search/svc_broadband.cgi b/httemplate/search/svc_broadband.cgi index 605b829b4..ee62e9084 100755 --- a/httemplate/search/svc_broadband.cgi +++ b/httemplate/search/svc_broadband.cgi @@ -15,8 +15,8 @@ 'fields' => [ 'svcnum', 'svc', sub { - my $blocknum = shift->blocknum or return ''; - $routerbyblock{$blocknum}->routername; + my $router = shift->router; + $router ? $router->routername : ''; }, @tower_fields, 'ip_addr', diff --git a/httemplate/view/svc_broadband.cgi b/httemplate/view/svc_broadband.cgi index 2e93d42fd..05ae632bd 100644 --- a/httemplate/view/svc_broadband.cgi +++ b/httemplate/view/svc_broadband.cgi @@ -27,7 +27,7 @@ $labels{'coordinates'} = 'Latitude/Longitude'; my @fields = ( 'description', - { field => 'router', value => \&router }, + { field => 'routernum', value => \&router }, 'speed_down', 'speed_up', { field => 'ip_addr', value => \&ip_addr }, @@ -48,9 +48,10 @@ push @fields, sub router { my $svc = shift; - my $addr_block = $svc->addr_block or return ''; - my $router = $addr_block->router or return ''; - $router->routernum . ': ' . $router->routername; + my $router = $svc->router or return ''; + my $block = $svc->addr_block; + $block = '; '.$block->cidr if $block; + $router->routernum . ': ' . $router->routername . $block } sub ip_addr { |