[freeside-commits] branch FREESIDE_3_BRANCH updated. 19d49567b9f1e07459253f28a41da121bd48811c

Christopher Burger burgerc at freeside.biz
Thu Feb 21 12:37:42 PST 2019


The branch, FREESIDE_3_BRANCH has been updated
       via  19d49567b9f1e07459253f28a41da121bd48811c (commit)
       via  94fede7483100ee585a23f72cd76f39eb76b1691 (commit)
       via  35f72b2a509020cdf9f189681e2d86de39604e99 (commit)
       via  fc5e0d24bb5c23a34a495d224e6c93884f0d3fc5 (commit)
       via  0df2eac272aa26a62431f5cd830c1cb7b1018e32 (commit)
      from  bf62797c5ca86fc7dce62ca2b371bbeb2dacac89 (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 19d49567b9f1e07459253f28a41da121bd48811c
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Feb 21 15:36:45 2019 -0500

    RT# 82092 - v3 display fix

diff --git a/httemplate/edit/elements/svc_Common.html b/httemplate/edit/elements/svc_Common.html
index e5dc55979..0f79238a8 100644
--- a/httemplate/edit/elements/svc_Common.html
+++ b/httemplate/edit/elements/svc_Common.html
@@ -228,7 +228,7 @@
                          $svc_x->pvf($field)->widget( 'HTML',
                                                       'edit', 
                                                       $svc_x->getfield($field),
-                                                      'TH'
+                                                      'TD'
                                                     );
                      }
                    }
diff --git a/httemplate/edit/process/elements/process.html b/httemplate/edit/process/elements/process.html
index c474b1904..f927eae4a 100644
--- a/httemplate/edit/process/elements/process.html
+++ b/httemplate/edit/process/elements/process.html
@@ -209,16 +209,7 @@ process();
   </HTML>
 
 %} else {
-%  my $cookie;
-%  $cookie = CGI::Cookie->new(
-%                        -name    => 'freeside_status',
-%                        -value   => $messages,
-%                        -expires => '+5m',
-%                      ) if $messages;
-   <% $cgi->redirect( -uri    => $redirect,
-                      -cookie => $cookie,
-      )
-   %>
+<% $cgi->redirect($redirect) %>
 %}
 <%init>
 

commit 94fede7483100ee585a23f72cd76f39eb76b1691
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Feb 21 12:56:24 2019 -0500

    RT# 82092 - Removed reload of DB Schema

diff --git a/httemplate/edit/process/part_virtual_field.html b/httemplate/edit/process/part_virtual_field.html
index dc03ea4c8..401e52701 100644
--- a/httemplate/edit/process/part_virtual_field.html
+++ b/httemplate/edit/process/part_virtual_field.html
@@ -29,8 +29,10 @@
             my $dbdef_file = "/usr/local/etc/freeside/dbdef.".datasrc;
             my $dbdef = new_native DBIx::DBSchema $dbh;
             $dbdef->save($dbdef_file);
-            delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
-            reload_dbdef($dbdef_file);
+            ## Stop reload of db schema as only reload current process and not others. Could be a pain to diagnose error.  
+            ## Restart Apache to reload DB Schema for all.
+            #delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
+            #reload_dbdef($dbdef_file);
             
             warn "cf add done schema modification, time=".time;
         }

commit 35f72b2a509020cdf9f189681e2d86de39604e99
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Feb 21 12:17:10 2019 -0500

    RT# 82092 - Updated text to remind customer to restart apache after creating custom field
    
    Conflicts:
            httemplate/elements/header-full.html

diff --git a/httemplate/edit/part_virtual_field.html b/httemplate/edit/part_virtual_field.html
index f3fb53065..8b8b33d0b 100644
--- a/httemplate/edit/part_virtual_field.html
+++ b/httemplate/edit/part_virtual_field.html
@@ -21,8 +21,8 @@
                          ],
             'edit_callback' => $callback,
             'error_callback' => $callback,
-            'html_init'      => 'Please be patient after clicking the button as 
-                                this process may take more than 10 seconds.
+            'html_init'      => 'Please be patient after clicking the button as this process may take more than 10 seconds.<br>
+                                 You will also need to restart Apache after adding the custom field.
                                 <br><br>',
           )
 %>
diff --git a/httemplate/edit/process/elements/process.html b/httemplate/edit/process/elements/process.html
index 6e27ad4e2..c474b1904 100644
--- a/httemplate/edit/process/elements/process.html
+++ b/httemplate/edit/process/elements/process.html
@@ -34,6 +34,11 @@ Example:
 
    'clear_on_error' => [ 'form_field1', 'form_field2', ... ],
 
+   ## message will be returned to redirect page as cookie and read by header.html
+   ## append =status, =warning, =error to change color of message box.  Default is status
+   ## status is green, warning is yellow, and error is red
+   'message'        => [ 'My message=status', 'Please restart=warning' ],
+
                   #pass an arrayref of hashrefs for multiple m2ms or m2names
                   #be certain you incorporate m2m_Common if you see error: param
 
@@ -204,7 +209,16 @@ process();
   </HTML>
 
 %} else {
-<% $cgi->redirect($redirect) %>
+%  my $cookie;
+%  $cookie = CGI::Cookie->new(
+%                        -name    => 'freeside_status',
+%                        -value   => $messages,
+%                        -expires => '+5m',
+%                      ) if $messages;
+   <% $cgi->redirect( -uri    => $redirect,
+                      -cookie => $cookie,
+      )
+   %>
 %}
 <%init>
 
@@ -506,6 +520,8 @@ if ( !$error ) {
   }
 }
 
+my $messages = $opt{'message'} ? $opt{'message'} : '';
+
 my $edit_ext = $opt{'edit_ext'} || 'html';
 my $error_redirect = $opt{'error_redirect'}
                      || popurl(2)."$table.$edit_ext";
diff --git a/httemplate/edit/process/part_virtual_field.html b/httemplate/edit/process/part_virtual_field.html
index 97be7e65e..dc03ea4c8 100644
--- a/httemplate/edit/process/part_virtual_field.html
+++ b/httemplate/edit/process/part_virtual_field.html
@@ -1,6 +1,7 @@
 <% include( 'elements/process.html',
     'table'          => 'part_virtual_field',
     'viewall_dir'    => 'browse',
+    'message'        => [ 'Your custom field has been created, but will not be available untill Apache has been restarted.=warning', ],
     'precheck_callback' => sub {
         my ($cgi) = @_;
         $act = 'edit' if $cgi->param('vfieldpart');
@@ -25,7 +26,7 @@
             $dbh->commit or die $dbh->errstr; 
 
             # reload schema
-            my $dbdef_file = "/usr/local/etc/freeside/dbdef.".datasrc # XXX: fix this
+            my $dbdef_file = "/usr/local/etc/freeside/dbdef.".datasrc;
             my $dbdef = new_native DBIx::DBSchema $dbh;
             $dbdef->save($dbdef_file);
             delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
diff --git a/httemplate/elements/header-full.html b/httemplate/elements/header-full.html
index 3898b536c..cdcb0afa4 100644
--- a/httemplate/elements/header-full.html
+++ b/httemplate/elements/header-full.html
@@ -246,4 +246,4 @@ if ( scalar(@agentnums) == 1 ) {
   $company_url  = $conf->config('company_url');
 }
 
-</%init>
+</%init>
\ No newline at end of file

commit fc5e0d24bb5c23a34a495d224e6c93884f0d3fc5
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Feb 19 15:57:51 2019 -0500

    RT# 82092 - added field validation

diff --git a/httemplate/edit/process/part_virtual_field.html b/httemplate/edit/process/part_virtual_field.html
index 6a8008db7..97be7e65e 100644
--- a/httemplate/edit/process/part_virtual_field.html
+++ b/httemplate/edit/process/part_virtual_field.html
@@ -43,7 +43,9 @@
 my $act = 'add';
 
 ## make cgi->param("name") lowercase
-$cgi->param('name' => lc $cgi->param('name'));
+my $vcf_name = $cgi->param('name');
+$vcf_name =~ s/\s/_/g; $vcf_name =~ s/[^A-Za-z0-9\-_]//g;
+$cgi->param('name' => lc $vcf_name);
 
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');

commit 0df2eac272aa26a62431f5cd830c1cb7b1018e32
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Feb 19 14:42:25 2019 -0500

    RT# 82092 - custom fields now save and fixed so name label is displayed insted of actual field name
    
    Conflicts:
            FS/FS/Record.pm
            httemplate/edit/process/cust_main.cgi

diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 2bffdc377..af8c10196 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -4,7 +4,7 @@ use strict;
 use charnames ':full';
 use vars qw( $AUTOLOAD @ISA @EXPORT_OK $DEBUG
              %virtual_fields_cache
-             $money_char $lat_lower $lon_upper
+             %virtual_fields_hash_cache $money_char $lat_lower $lon_upper
              $me
              $nowarn_identical $nowarn_classload
              $no_update_diff $no_history $qsearch_qualify_columns
@@ -1621,6 +1621,41 @@ sub virtual_fields {
 
 }
 
+=item virtual_fields_hash [ TABLE ]
+
+Returns a list of virtual field records as a hash defined for the table.  This should not
+be exported, and should only be called as an instance or class method.
+
+=cut
+
+sub virtual_fields_hash {
+  my $self = shift;
+  my $table;
+  $table = $self->table or confess "virtual_fields called on non-table";
+
+  confess "Unknown table $table" unless dbdef->table($table);
+
+  return () unless dbdef->table('part_virtual_field');
+
+  unless ( $virtual_fields_hash_cache{$table} ) {
+    $virtual_fields_hash_cache{$table} = [];
+    my $concat = [ "'cf_'", "name" ];
+    my $select = concat_sql($concat).' as name, label, length';
+    my @vfields = qsearch({
+      select => $select,
+      table => 'part_virtual_field',
+      hashref => { 'dbtable' => $table, },
+    });
+
+    foreach (@vfields) {
+      push @{ $virtual_fields_hash_cache{$table} }, $_->{Hash};
+    }
+  }
+
+  @{$virtual_fields_hash_cache{$table}};
+
+}
+
 =item process_batch_import JOB OPTIONS_HASHREF PARAMS
 
 Processes a batch import as a queued JSRPC job
diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm
index b387085f5..7bf3d5aaf 100644
--- a/FS/FS/part_svc.pm
+++ b/FS/FS/part_svc.pm
@@ -708,6 +708,11 @@ sub _svc_defs {
         warn "skipping disabled service FS::$mod" if $DEBUG;
         next;
       }
+
+      foreach ("FS::$mod"->virtual_fields_hash) {
+        $info->{'fields'}->{$_->{'name'}} = $_->{'label'};
+      }
+
       $info{$mod} = $info;
     }
   }
diff --git a/FS/FS/part_virtual_field.pm b/FS/FS/part_virtual_field.pm
index 4e6d2e4bd..1df4984e1 100755
--- a/FS/FS/part_virtual_field.pm
+++ b/FS/FS/part_virtual_field.pm
@@ -62,6 +62,7 @@ Create a new record.  To add the record to the database, see "insert".
 
 sub table { 'part_virtual_field'; }
 sub virtual_fields { () }
+sub virtual_fields_hash { () }
 
 =item widget UI_TYPE MODE [ VALUE ]
 
@@ -84,19 +85,20 @@ VALUE (optional) is the current value of the field.
 
 sub widget {
   my $self = shift;
-  my ($ui_type, $mode, $value) = @_;
+  my ($ui_type, $mode, $value, $header_col_type) = @_;
+  $header_col_type = 'TD' unless $header_col_type;
   my $text;
   my $label = $self->label || $self->name;
 
   if ($ui_type eq 'HTML') {
     if ($mode eq 'view') {
-      $text = q!<TR><TD ALIGN="right">! . $label . 
-              q!</TD><TD BGCOLOR="#ffffff">! . $value .
+      $text = q!<TR><!.$header_col_type.q! ALIGN="right">! . $label .
+              q!</!.$header_col_type.q!><TD BGCOLOR="#ffffff">! . $value .
               q!</TD></TR>! . "\n";
     } elsif ($mode eq 'edit') {
-      $text = q!<TR><TD ALIGN="right">! . $label .
-              q!</TD><TD>!;
-        $text .= q!<INPUT NAME="! . $self->name .
+      $text = q!<TR><!.$header_col_type.q! ALIGN="right">! . $label .
+              q!</!.$header_col_type.q!><TD>!;
+        $text .= q!<INPUT TYPE=text NAME="! . $self->name .
                 q!" VALUE="! . escapeHTML($value) . q!"!;
         if ($self->length) {
           $text .= q! SIZE="! . $self->length . q!"!;
diff --git a/httemplate/browse/router.cgi b/httemplate/browse/router.cgi
index 85512f8df..c7713f313 100644
--- a/httemplate/browse/router.cgi
+++ b/httemplate/browse/router.cgi
@@ -7,24 +7,9 @@
                                        'extra_sql' => $extra_sql,
                                      },
                 'count_query'     => "SELECT count(*) from router $count_sql",
-                'header'          => [ 'Router name',
-                                       'Address block(s)',
-                                       'IP addressing',
-                                       'Action',
-                                     ],
-                'fields'          => [ 'routername',
-                                       sub { join( '<BR>', map { $_->NetAddr }
-                                                               shift->addr_block
-                                                 );
-                                           },
-                                       sub { shift->manual_addr ? 'Manual' : 'Automatic' },
-                                       sub { 'Delete' },
-                                     ],
-                'links'           => [ [ "${p2}edit/router.cgi?", 'routernum' ],
-                                       '',
-                                       '',
-                                       [ "${p}misc/delete-router.html?", 'routernum' ],
-                                     ],
+                'header'          => [ @header_fields ],
+                'fields'          => [ @fields ],
+                'links'           => [ @links ],
                 'agent_virt'      => 1,
                 'agent_null_right'=> "Broadband global configuration",
                 'agent_pos'       => 1,
@@ -32,6 +17,8 @@
 %>
 <%init>
 
+use CGI qw(escapeHTML);
+
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Broadband configuration')
   || $FS::CurrentUser::CurrentUser->access_right('Broadband global configuration');
@@ -52,6 +39,26 @@ if ($cgi->param('hidecustomerrouters') eq '1') {
   $cgi->delete('hidecustomerrouters');
 }
 
+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, escapeHTML($_->{'label'});
+  push @fields, escapeHTML($_->{'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',
diff --git a/httemplate/edit/elements/part_svc_column.html b/httemplate/edit/elements/part_svc_column.html
index 1e1ff79ee..80d325e59 100644
--- a/httemplate/edit/elements/part_svc_column.html
+++ b/httemplate/edit/elements/part_svc_column.html
@@ -98,7 +98,7 @@ that field.
     <TD ROWSPAN=2 CLASS="grid">
       <INPUT NAME="<% $svcdb %>__<% $field %>_label"
              STYLE="text-align: right"
-             VALUE="<% $part_svc_column->columnlabel || $def->{'label'} |h %>">
+             VALUE="<% $part_svc_column->columnlabel || escapeHTML($def->{'label'}) |h %>">
     </TD>
 
     <TD ROWSPAN=1 CLASS="grid">
diff --git a/httemplate/edit/elements/svc_Common.html b/httemplate/edit/elements/svc_Common.html
index e1c309080..e5dc55979 100644
--- a/httemplate/edit/elements/svc_Common.html
+++ b/httemplate/edit/elements/svc_Common.html
@@ -227,7 +227,8 @@
                        $html .=
                          $svc_x->pvf($field)->widget( 'HTML',
                                                       'edit', 
-                                                      $svc_x->getfield($field)
+                                                      $svc_x->getfield($field),
+                                                      'TH'
                                                     );
                      }
                    }
diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi
index e3fa4e6f8..d277e17b1 100755
--- a/httemplate/edit/process/cust_main.cgi
+++ b/httemplate/edit/process/cust_main.cgi
@@ -113,6 +113,11 @@ my $new = new FS::cust_main ( {
 
 $new->invoice_noemail( ($cgi->param('invoice_email') eq 'Y') ? '' : 'Y' );
 
+# add any virtual fields to the new cust_main record
+foreach ($new->virtual_fields) {
+  $new->setfield($_, scalar($cgi->param($_)));
+}
+
 if ( $duplicate_of ) {
   # then negate all changes to the customer; the only change we should
   # make is to order a package, if requested
diff --git a/httemplate/edit/process/part_virtual_field.html b/httemplate/edit/process/part_virtual_field.html
index e734d9616..6a8008db7 100644
--- a/httemplate/edit/process/part_virtual_field.html
+++ b/httemplate/edit/process/part_virtual_field.html
@@ -42,6 +42,9 @@
 
 my $act = 'add';
 
+## make cgi->param("name") lowercase
+$cgi->param('name' => lc $cgi->param('name'));
+
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 

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

Summary of changes:
 FS/FS/Record.pm                                 | 37 ++++++++++++++++++++-
 FS/FS/part_svc.pm                               |  5 +++
 FS/FS/part_virtual_field.pm                     | 14 ++++----
 httemplate/browse/router.cgi                    | 43 ++++++++++++++-----------
 httemplate/edit/elements/part_svc_column.html   |  2 +-
 httemplate/edit/elements/svc_Common.html        |  3 +-
 httemplate/edit/part_virtual_field.html         |  4 +--
 httemplate/edit/process/cust_main.cgi           |  5 +++
 httemplate/edit/process/elements/process.html   |  7 ++++
 httemplate/edit/process/part_virtual_field.html | 14 ++++++--
 httemplate/elements/header-full.html            |  2 +-
 11 files changed, 103 insertions(+), 33 deletions(-)




More information about the freeside-commits mailing list