X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fedit%2Felements%2Fedit.html;h=a32e99c0c189e3ee5f78cc859467521c81e0d20d;hp=7b02994d1a307d0b30709069e5ab606475dbf893;hb=dac9051f94d03903c00a46117f6edf8315ec57dc;hpb=c422010521a7c09673a8d4d0068d3fd482dd2dbc diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html index 7b02994d1..a32e99c0c 100644 --- a/httemplate/edit/elements/edit.html +++ b/httemplate/edit/elements/edit.html @@ -7,7 +7,7 @@ Example: # (preferred, will be pluralized automatically) 'name' => #name for the record # (deprecated, will be pluralized simplistically) - 'table' => + 'table' => #database table #? 'primary_key' => #required when the dbdef doesn't know...??? 'labels' => { @@ -114,6 +114,9 @@ Example: #we're in a popup (no title/menu/searchboxes) 'popup' => 1, + #if you need to access the submit button + 'submit_id' => 'mysubmitbuttonid', + #we're embedded (rows only: no header at all, no html_init, no error # display, no
, no hidden fields for table name or primary key, no # display of primary key, no submit button, no html_foot, no footer) @@ -135,6 +138,8 @@ Example: 'form_init' => '', #after html_init, error and the opening , but #before any other form contents + 'html_table_class' => '', #HTML 'html_table_bottom' => '', @@ -238,6 +243,7 @@ Example: % my $url = $opt{'post_url'} || popurl(1)."process/$table.html"; +% $js_form_validate = { 'edit_topform' => { 'name' => 'edit_topform' } }; - + <% defined($opt{'form_init'}) ? ( ref($opt{'form_init'}) @@ -270,7 +276,11 @@ Example: % } % my $tablenum = $opt{'tablenum'} || 0; -
+
+> % my $g_row = 0; % my @g_row_stack = (); @@ -351,21 +361,23 @@ Example: % #contact % 'custnum' => $f->{'custnum'}, % 'prospectnum' => $f->{'prospectnum'}, +% % ); % % $include_common{$_} = $f->{$_} foreach grep exists($f->{$_}), % qw( js_only html_only select_only layers_only cell_style ),#selectlayers,? % qw( empty_label ), # select-* -% qw( value_col compare_sub order_by ), # select-table +% qw( value_col compare_sub order_by addl_from ), # select-table % qw( table name_col ), #(select,checkboxes)-table % qw( target_table link_table ), #checkboxes-table % qw( hashref agent_virt agent_null agent_null_right ),#*-table % qw( formatted_value ), #fixed % qw( country ), #select-country % qw( width height config ), #htmlarea -% qw( alt_format ), #select-cust_location +% qw( is_optional alt_format ), #select-cust_location % qw( classnum ), # select-inventory_item % qw( aligned ), # columnstart +% qw( debug ), # select-table % ; % % #select-table @@ -389,6 +401,8 @@ Example: % % my $layer_prefix_on = ''; % +% my $submitid = $opt{submit_id} ? $opt{submit_id} : ''; +% % my $include_sub = sub { % my %opt = @_; % @@ -401,11 +415,19 @@ Example: % $include_common{'layer_prefix'} = "$field$fieldnum." % if $layer_prefix_on; % +% ## set conditionname field values for validation. +% if ($field eq 'conditionname') { +% my $validate_field = $field . $fieldnum . '.after_event.run_delay'; +% $js_form_validate->{edit_topform}->{validate_fields}{$validate_field} = 'digits: true'; +% $js_form_validate->{edit_topform}->{error_message}{$validate_field} = 'Please only enter numbers here.'; +% } +% % my @include = % ( "/elements/$include.html", % 'field' => "$field$fieldnum", % 'id' => "$field$fieldnum", #separate? % 'label_id' => $field."_label$fieldnum", #don't want field0_label0... +% 'submit_id' => $submitid, % %include_common, % %opt, % ); @@ -493,12 +515,15 @@ Example: % } % foreach my $name_obj ( @existing ) { % +% my $m2_label = $f->{'m2_label'}; +% $m2_label = &{ $f->{'m2_label_callback'} }($name_obj) if $f->{'m2_label_callback'}; +% % my $ex_label = ' '. ($f->{'m2_label'} || $field ). ' '; +% '> '. ($m2_label || $field ). ' '; % % if ( $f->{'layer_values_callback'} ) { % my %switches = ( 'mode' => $mode ); @@ -615,7 +640,7 @@ Example: // only spawn if we're the last element... return if not - var field_regex = /(\d+)(_[a-z_]+)?$/; + var field_regex = /(\d+)(_[a-z_0-9]+)?$/; var match = field_regex.exec(what.name); if ( !match ) { alert(what.name + " didn't match for " + what); @@ -625,6 +650,15 @@ Example: return; } +% if ( exists( $f->{'js_spawn_test'} ) ) { + // XXX check a passed-in hook here and optionall return + if ( <% $f->{'js_spawn_test'} %> ) { + // then go ahead and spawn + } else { + return; + } +% } + // change the label on the last entry & add a remove button var prev_label = document.getElementById('<% $field %>_label' + <%$field%>_fieldnum ); prev_label.innerHTML = ' <% $f->{'m2_label'} || $field %>'; @@ -644,7 +678,7 @@ Example: var newrow = <% include(@layer_opt, html_only=>1) |js_string %>; % #until the rest have html/js_only -% if ( $type eq 'selectlayers' || $type =~ /^select-cgp_rule_/ ) { +% if ( ($type eq 'selectlayers') || ($type eq 'selectlayersx') || ($type =~ /^select-cgp_rule_/) || ($type eq 'contact') ) { var newfunc = <% include(@layer_opt, js_only=>1) |js_string %>; % } else { var newfunc = ''; @@ -670,7 +704,7 @@ Example: var row = table.insertRow(<%$field%>_rownum++); - var label_cell = document.createElement('TD'); + var label_cell = document.createElement('TH'); label_cell.id = '<% $field %>_label' + <%$field%>_fieldnum; @@ -789,6 +823,18 @@ Example: : $opt{'html_bottom'} %> +% ## set extra field values for validation. ie price plan fields +% my $extra_fields_to_validate = $opt{'extra_fields_validate'}; +% my %validate_error_messages = ( +% 'digits: true' => 'Please only enter numbers here.', +% 'email: true' => 'Please enter a valid email here.', +% ); +% foreach my $extra_fields (keys %$extra_fields_to_validate) { +% my $validate_type = $extra_fields_to_validate->{$extra_fields}; +% $js_form_validate->{edit_topform}->{validate_fields}{$extra_fields} = $validate_type; +% $js_form_validate->{edit_topform}->{error_message}{$extra_fields} = $validate_error_messages{$validate_type}; +% } + % unless ($opt{'embed'}) {
@@ -827,13 +873,18 @@ Example: : $opt{'html_foot'} %> - <% include("/elements/footer.html") %> +% my %footerdata = ( +% 'formvalidation' => $js_form_validate, +% ); + + <% include("/elements/footer.html", %footerdata) %> % } <%init> my(%opt) = @_; +my $conf = new FS::Conf; my $curuser = $FS::CurrentUser::CurrentUser; #false laziness w/process.html @@ -843,7 +894,13 @@ my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} || my $fields = $opt{'fields'} #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ]; || [ grep { $_ ne $pkey } fields($table) ]; -#my @actualfields = map { ref($_) ? $_->{'field'} : $_ } @$fields; +my @actualfields = map { ref($_) ? $_->{'field'} : $_ } @$fields; + +push @actualfields, $pkey; +push @actualfields, 'ip_addr' if $table eq 'svc_broadband'; +push @actualfields, 'usergroup' if ($table eq 'svc_broadband' && $conf->exists('svc_broadband-radius')); + +my $js_form_validate = {}; my( $mode, $object); my $clone = ''; @@ -884,7 +941,7 @@ if ( $opt{'embed'} ) { $mode = 'error'; $object = $class->new( { - map { $_ => scalar($cgi->param($_)) } fields($table) + map { $_ => scalar($cgi->param($_)) } @actualfields }); &{$opt{'error_callback'}}( $cgi, $object, $fields, \%opt )