[freeside-commits] branch master updated. 902d15046334045b5f24c2d9e179b3db6e1ee3f4

Mark Wells mark at 420.am
Wed Apr 11 14:33:02 PDT 2012


The branch, master has been updated
       via  902d15046334045b5f24c2d9e179b3db6e1ee3f4 (commit)
      from  9a4a158c7f3a0f9d2333e867f6f716ba0aef43e9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 902d15046334045b5f24c2d9e179b3db6e1ee3f4
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Apr 11 13:23:07 2012 -0700

    don't override manually entered IP address with auto-assignment, #17163

diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm
index 2b6be2c..64cc377 100755
--- a/FS/FS/svc_broadband.pm
+++ b/FS/FS/svc_broadband.pm
@@ -428,7 +428,8 @@ sub check {
     }
     else {
       my $addr_block = $self->addr_block;
-      unless ( $addr_block and $addr_block->manual_flag ) {
+      if ( $self->ip_addr eq '' 
+           and not ( $addr_block and $addr_block->manual_flag ) ) {
         my $error = $self->assign_ip_addr;
         return $error if $error;
       }
@@ -525,6 +526,12 @@ sub _check_ip_addr {
   else {
     return 'Cannot parse address: '.$self->ip_addr unless $self->NetAddr;
   }
+
+  if ( $self->addr_block 
+      and not $self->addr_block->NetAddr->contains($self->NetAddr) ) {
+    return 'Address '.$self->ip_addr.' not in block '.$self->addr_block->cidr;
+  }
+
 #  if (my $dup = qsearchs('svc_broadband', {
 #        ip_addr => $self->ip_addr,
 #        svcnum  => {op=>'!=', value => $self->svcnum}
diff --git a/httemplate/edit/process/svc_broadband.cgi b/httemplate/edit/process/svc_broadband.cgi
index 31def25..90eab4a 100644
--- a/httemplate/edit/process/svc_broadband.cgi
+++ b/httemplate/edit/process/svc_broadband.cgi
@@ -13,9 +13,9 @@ die "access denied"
 
 sub precheck {
   my $cgi = shift;
-  if ( !defined($cgi->param('ip_addr')) ) {
-    $cgi->param('ip_addr', $cgi->param('prev_ip_addr') || '');
-  }
+  my $ip_addr = $cgi->param('ip_addr');
+  $ip_addr =~ s/[^\d\.]//g; # converts '(automatic)' to null
+  $cgi->param('ip_addr', $ip_addr);
   $cgi->param("usergroup", [ $cgi->param('usergroup') ]);
   ''
 }
diff --git a/httemplate/elements/tr-select-router_block_ip.html b/httemplate/elements/tr-select-router_block_ip.html
index ed8fe81..95d1787 100644
--- a/httemplate/elements/tr-select-router_block_ip.html
+++ b/httemplate/elements/tr-select-router_block_ip.html
@@ -1,23 +1,34 @@
 <script type="text/javascript">
 var manual_addr_routernum = <% encode_json(\%manual_addr_routernum) %>;
 var ip_addr_curr_value = <% $opt{'ip_addr'} |js_string %>;
-function lock_ip_addr(obj, i) {
-  var routernum = obj.value;
-  var select_blocknum = document.getElementsByName('blocknum')[0];
+var blocknum_curr_value = <% $opt{'blocknum'} |js_string %>;
+function update_ip_addr(obj, i) {
+  var routernum = document.getElementById('router_select_0').value;
+  var select_blocknum = document.getElementById('router_select_1');
+  var blocknum = select_blocknum.value;
   var input_ip_addr = document.getElementById('input_ip_addr');
   if ( manual_addr_routernum[routernum] == 'Y' ) {
-%# enable ip_addr, default it to its previous value, and hide block selection
+%# hide block selection and default ip address to its previous value
     select_blocknum.style.display = 'none';
     input_ip_addr.value = ip_addr_curr_value;
-    input_ip_addr.disabled = false;
   }
   else {
 %# the reverse
     select_blocknum.style.display = '';
-    input_ip_addr.disabled = true;
-    input_ip_addr.value = '(automatic)';
+%# default ip address to null, unless the router/block are set to the 
+%# previous value, in which case default it to current value
+    if ( routernum == router_curr_values[0] &&
+         blocknum  == router_curr_values[1] ) {
+      input_ip_addr.value = ip_addr_curr_value;
+    } else {
+      input_ip_addr.value = <% mt('(automatic)') |js_string %>;
+    }
   }
 }
+function clearhint_ip_addr (what) {
+  if ( what.value == <% mt('(automatic)') |js_string %> )
+    what.value = '';
+}
 </script>
 <& /elements/tr-td-label.html, label => ($opt{'label'} || 'Router') &>
 <td>
@@ -27,7 +38,7 @@ function lock_ip_addr(obj, i) {
     records   => \@routers,
     name_col  => 'routername',
     value_col => 'routernum',
-    onchange  => 'lock_ip_addr',
+    onchange  => 'update_ip_addr',
     curr_value=> $opt{'routernum'},
   },
   {
@@ -39,6 +50,7 @@ function lock_ip_addr(obj, i) {
     name_col  => 'cidr',
     link_col  => 'routernum',
     empty_label => '(any)',
+    onchange  => 'update_ip_addr',
     curr_value  => $opt{'blocknum'},
   },
 ]
@@ -52,12 +64,11 @@ function lock_ip_addr(obj, i) {
 % }
 % else {
   <input type="text" id="input_ip_addr" name="ip_addr" 
-  value="<% $opt{'ip_addr'} |h%>">
+  value="<% $opt{'ip_addr'} |h%>" onfocus="clearhint_ip_addr(this)">
 % }
 </td> </tr>
-<input type="hidden" name="prev_ip_addr" value="<% $opt{'ip_addr'} |h%>">
 <script type="text/javascript">
-lock_ip_addr(document.getElementsByName('routernum')[0],0);
+update_ip_addr();
 </script>
 <%init>
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/svc_broadband.pm                             |    9 +++++-
 httemplate/edit/process/svc_broadband.cgi          |    6 ++--
 httemplate/elements/tr-select-router_block_ip.html |   33 +++++++++++++------
 3 files changed, 33 insertions(+), 15 deletions(-)




More information about the freeside-commits mailing list