X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fedit%2Felements%2Fedit.html;h=bf4e51f8c8b2334e3334d9117efa92f792cf869f;hb=e4e9e2f1fe6f48cf22486962c6bf84f50d201358;hp=4fe32c15debcc2682f9facd9305b88ebcd4e644c;hpb=9ad4f8407cc106ef5815e65bce2ee873cd0896c2;p=freeside.git diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html index 4fe32c15d..bf4e51f8c 100644 --- a/httemplate/edit/elements/edit.html +++ b/httemplate/edit/elements/edit.html @@ -2,7 +2,7 @@ Example: - include( 'elements/edit.html', + <& elements/edit.html, 'name_singular' => #singular name for the record # (preferred, will be pluralized automatically) 'name' => #name for the record @@ -40,7 +40,7 @@ Example: 'disabled' => 0, 'onchange' => 'javascript_function', - 'include_opt_callback' => sub { #my $ = @_; + 'include_opt_callback' => sub { my $object = @_; ( 'option' => 'value', ); }, @@ -96,6 +96,7 @@ Example: #agent virtualization 'agent_virt' => 1, + 'agent_null' => 1, #if true, always allow no-agentnum globals 'agent_null_right' => 'Access Right Name', 'agent_clone_extra_sql' => '', #if provided, this overrides the extra_sql #implementing agent virt, for clone @@ -110,6 +111,11 @@ Example: #we're in a popup (no title/menu/searchboxes) 'popup' => 1, + #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) + 'embed' => $object, #need to pass the object + ### # HTML callbacks ### @@ -129,6 +135,9 @@ Example: "html_string"; }, + #javascript function name, will be called with form name as arg + 'onsubmit' => 'check_form_data', + #at the very bottom (well, as low as you can go from here) 'html_foot' => '', @@ -178,41 +187,64 @@ Example: #run before display to manipulate element of the 'fields' arrayref 'field_callback' => sub { my( $cgi, $object, $field_hashref ) = @_; }, - ); + &> -<% include('/elements/header'. ( $opt{popup} ? '-popup' : '' ). '.html', - $title, - include( '/elements/menubar.html', @menubar ), - $opt{'body_etc'}, - ) -%> +% unless ( $opt{embed} ) { +% +% my $title = $opt{action}. ' '. ( $opt{name} || $opt{'name_singular'} ); +% +% my $viewall_url = $p . ( $opt{'viewall_dir'} || 'search' ) . "/$table.html"; +% $viewall_url = $opt{'viewall_url'} if $opt{'viewall_url'}; +% +% my @menubar; +% if ( $opt{'menubar'} ) { +% @menubar = @{ $opt{'menubar'} }; +% } else { +% my $items = $opt{'name'} ? $opt{'name'}.'s' : PL($opt{'name_singular'}); +% @menubar = ( +% "View all $items" => $viewall_url, +% ); +% } -<% defined($opt{'html_init'}) - ? ( ref($opt{'html_init'}) - ? &{$opt{'html_init'}}() - : $opt{'html_init'} - ) - : '' -%> + <% include('/elements/header'. ( $opt{popup} ? '-popup' : '' ). '.html', + $title, + include( '/elements/menubar.html', @menubar ), + $opt{'body_etc'}, + ) + %> -<% include('/elements/error.html') %> + <% defined($opt{'html_init'}) + ? ( ref($opt{'html_init'}) + ? &{$opt{'html_init'}}() + : $opt{'html_init'} + ) + : '' + %> + + <% include('/elements/error.html') %> % my $url = $opt{'post_url'} || popurl(1)."process/$table.html"; - + + > - - + + - -<% ( $opt{labels} && exists $opt{labels}->{$pkey} ) - ? $opt{labels}->{$pkey} - : $pkey -%> - -#<% ( !$clone && $object->$pkey() ) || "(NEW)" %> + + <% ( $opt{labels} && exists $opt{labels}->{$pkey} ) + ? $opt{labels}->{$pkey} + : $pkey + %> + + #<% ( !$clone && $object->$pkey() ) || "(NEW)" %> + +% } % my $tablenum = 0; @@ -250,6 +282,11 @@ Example: % #text and derivitives % 'size' => $f->{'size'}, % 'maxlength' => $f->{'maxlength'}, +% 'postfix' => $f->{'postfix'}, +% +% #textarea +% 'rows' => $f->{'rows'}, +% 'cols' => $f->{'cols'}, % % #checkbox, title, fixed, hidden % #& deprecated weird value hashref used only by reason.html @@ -259,6 +296,7 @@ Example: % 'options' => $f->{'options'}, % 'labels' => $f->{'labels'}, % 'multiple' => $f->{'multiple'}, +% 'label_showkey' => $f->{'label_showkey'}, % 'disable_empty' => $f->{'disable_empty'}, % #select-reason % 'reason_class' => $f->{'reason_class'}, @@ -270,36 +308,42 @@ Example: % % #umm. for select-agent_types at least % 'disabled' => $f->{'disabled'}, -% ); % -% #selectlayers, others? -% $include_common{$_} = $f->{$_} -% foreach grep exists($f->{$_}), -% qw( js_only html_only select_only layers_only cell_style); -% -% #select-* -% $include_common{$_} = $f->{$_} -% foreach grep exists($f->{$_}), qw( empty_label ); -% -% #select-table, checkboxes-table -% $include_common{$_} = $f->{$_} -% foreach grep exists($f->{$_}), qw( table name_col ); -% -% #checkboxes-table -% $include_common{$_} = $f->{$_} -% foreach grep exists($f->{$_}), qw( target_table link_table ); +% #any? +% 'colspan' => $f->{'colspan'}, +% 'required' => $f->{'required'}, +% ); % -% #*-table -% $include_common{$_} = $f->{$_} -% foreach grep exists($f->{$_}), qw( hashref agent_virt agent_null_right ); +% $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 ), # 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 ), #htmlarea +% qw( alt_format ), #select-cust_location +% ; +% +% #select-table +% $include_common{$_} = ref( $f->{$_} ) eq 'CODE' +% ? &{ $f->{$_} }( $cgi, $object ) #, $f ) +% : $f->{$_} +% foreach grep exists($f->{$_}), qw( extra_sql ); % % if ( $type eq 'tablebreak-tr-title' ) { % $include_common{'table_id'} = 'TableNumber'. $tablenum++; +% } +% if ( $type eq 'tablebreak-tr-title' || $type eq 'title' ) { % $include_common{'colspan'} = $f->{colspan} if $f->{colspan}; % } % % if ( $f->{include_opt_callback} ) { -% %include_common = ( %include_common, &{ $f->{include_opt_callback} } ); +% %include_common = ( %include_common, +% &{ $f->{include_opt_callback} }( $object ) +% ); % } % % my $layer_prefix_on = ''; @@ -324,6 +368,19 @@ Example: % %include_common, % %opt, % ); +% +% if ( $include eq 'tr-input-date-field' ) { +% # it's either hacking it here, or changing a lot more stuff +% @include = ( +% "/elements/$include.html", { +% 'name' => $field, +% 'value' => $opt{curr_value}, +% 'label' => $label, +% 'noinit' => $f->{noinit}, +% } +% ); +% } +% % @include; % }; % @@ -352,6 +409,7 @@ Example: % $g_row = 1 if $type eq 'tablebreak-tr-title'; % $g_row++; % $g_row++ if $type eq 'title'; +% $g_row += scalar( @{ $f->{options} } )-1 if $type eq 'radio'; % } else { % if ( $type eq 'columnstart' ) { % push @g_row_stack, $g_row; @@ -407,7 +465,7 @@ Example: % } % warn "layer values: ". Dumper($layer_values) % if $opt{'debug'}; -% +% % my @existing = &{ $include_sub }( % 'label' => $ex_label, % 'fieldnum' => $fieldnum, @@ -515,10 +573,10 @@ Example: // only spawn if we're the last element... return if not - var field_regex = /(\d+)(_[a-z]+)?$/; + var field_regex = /(\d+)(_[a-z_]+)?$/; var match = field_regex.exec(what.name); if ( !match ) { - alert(what.name + " didn't match?!"); + alert(what.name + " didn't match for " + what); return; } if ( match[1] != <%$field%>_fieldnum ) { @@ -543,8 +601,9 @@ Example: var newrow = <% include(@layer_opt, html_only=>1) |js_string %>; -% if ( $type eq 'selectlayers' ) { #until the rest have html/js_only - var newfunc = <% include(@layer_opt, js_only =>1) |js_string %>; +% #until the rest have html/js_only +% if ( $type eq 'selectlayers' || $type =~ /^select-cgp_rule_/ ) { + var newfunc = <% include(@layer_opt, js_only=>1) |js_string %>; % } else { var newfunc = ''; % } @@ -688,18 +747,28 @@ Example: : $opt{'html_bottom'} %> -
+% unless ($opt{'embed'}) { -"> +
- + " + > -<% ref( $opt{'html_foot'} ) - ? &{ $opt{'html_foot'} }( $object ) - : $opt{'html_foot'} -%> + + + <% ref( $opt{'html_foot'} ) + ? &{ $opt{'html_foot'} }( $object ) + : $opt{'html_foot'} + %> -<% include("/elements/footer.html") %> + <% include("/elements/footer.html") %> + +% } <%init> my(%opt) = @_; @@ -715,115 +784,113 @@ my $fields = $opt{'fields'} || [ grep { $_ ne $pkey } fields($table) ]; #my @actualfields = map { ref($_) ? $_->{'field'} : $_ } @$fields; -if ( $cgi->param('redirect') ) { - my $session = $cgi->param('redirect'); - my $pref = $curuser->option("redirect$session"); - die "unknown redirect session $session\n" unless length($pref); - $cgi = new CGI($pref); -} - -&{$opt{'begin_callback'}}( $cgi, $fields, \%opt ) - if $opt{'begin_callback'}; - -my %qsearch = ( - 'table' => $table, - 'extra_sql' => ( $opt{'agent_virt'} - ? ' AND '. $curuser->agentnums_sql( - 'null_right' => $opt{'agent_null_right'} - ) - : '' - ), -); - -my $mode; -my $object; +my( $mode, $object); my $clone = ''; -if ( $cgi->param('error') ) { +if ( $opt{'embed'} ) { - $mode = 'error'; + $object = $opt{'embed'}; + $mode = $cgi->param('error') + ? 'error' + : $object->$pkey() + ? 'edit' + : 'new'; - $object = $class->new( { - map { $_ => scalar($cgi->param($_)) } fields($table) - }); +} else { - &{$opt{'error_callback'}}( $cgi, $object, $fields, \%opt ) - if $opt{'error_callback'}; + #$m->comp('/elements/handle_uri_query'); + if ( $cgi->param('redirect') ) { + my $session = $cgi->param('redirect'); + my $pref = $curuser->option("redirect$session"); + die "unknown redirect session $session\n" unless length($pref); + $cgi = new CGI($pref); + } -} elsif ( $cgi->param('clone') =~ /^(\d+)$/ ) { + &{$opt{'begin_callback'}}( $cgi, $fields, \%opt ) + if $opt{'begin_callback'}; + + my %qsearch = ( + 'table' => $table, + 'extra_sql' => ( $opt{'agent_virt'} + ? ' AND '. $curuser->agentnums_sql( + 'null_right' => $opt{'agent_null_right'} + ) + : '' + ), + ); - $mode = 'clone'; + if ( $cgi->param('error') ) { - $clone = $1; + $mode = 'error'; - $qsearch{'extra_sql'} = ' AND '. $opt{'agent_clone_extra_sql'} - if $opt{'agent_clone_extra_sql'}; + $object = $class->new( { + map { $_ => scalar($cgi->param($_)) } fields($table) + }); - $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $clone } }) - or die "$pkey $clone not found in $table"; + &{$opt{'error_callback'}}( $cgi, $object, $fields, \%opt ) + if $opt{'error_callback'}; - &{$opt{'clone_callback'}}( $cgi, $object, $fields, \%opt ) - if $opt{'clone_callback'}; + } elsif ( $cgi->param('clone') =~ /^(\d+)$/ ) { - #$object->$pkey(''); + $mode = 'clone'; - $opt{action} ||= 'Add'; + $clone = $1; -} elsif ( $cgi->keywords || $cgi->param($pkey) ) { #editing + $qsearch{'extra_sql'} = ' AND '. $opt{'agent_clone_extra_sql'} + if $opt{'agent_clone_extra_sql'}; - $mode = 'edit'; + $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $clone } }) + or die "$pkey $clone not found in $table"; - my $value; - if ( $cgi->param($pkey) ) { - $value = $cgi->param($pkey) - } else { - my( $query ) = $cgi->keywords; - $value = $query; - } - $value =~ /^(\d+)$/ or die "unparsable $pkey"; - $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $1 } }) - or die "$pkey $1 not found in $table"; - - warn "$table $pkey => $1" - if $opt{'debug'}; + &{$opt{'clone_callback'}}( $cgi, $object, $fields, \%opt ) + if $opt{'clone_callback'}; - &{$opt{'edit_callback'}}( $cgi, $object, $fields, \%opt ) - if $opt{'edit_callback'}; + #$object->$pkey(''); -} else { #adding + $opt{action} ||= 'Add'; - $mode = 'new'; + } elsif ( $cgi->keywords || $cgi->param($pkey) ) { #editing - my $hashref = $opt{'new_hashref_callback'} - ? &{$opt{'new_hashref_callback'}} - : {}; + $mode = 'edit'; - $object = $opt{'new_object_callback'} - ? &{$opt{'new_object_callback'}}( $cgi, $hashref, $fields, \%opt ) - : $class->new( $hashref ); + my $value; + if ( $cgi->param($pkey) ) { + $value = $cgi->param($pkey) + } else { + my( $query ) = $cgi->keywords; + $value = $query; + } + $value =~ /^(\d+)$/ or die "unparsable $pkey"; + $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $1 } }) + or die "$pkey $1 not found in $table"; - &{$opt{'new_callback'}}( $cgi, $object, $fields, \%opt ) - if $opt{'new_callback'}; + warn "$table $pkey => $1" + if $opt{'debug'}; -} + &{$opt{'edit_callback'}}( $cgi, $object, $fields, \%opt ) + if $opt{'edit_callback'}; -&{$opt{'end_callback'}}( $cgi, $object, $fields, \%opt ) - if $opt{'end_callback'}; + } else { #adding -$opt{action} ||= $object->$pkey() ? 'Edit' : 'Add'; + $mode = 'new'; -my $title = $opt{action}. ' '. ( $opt{name} || $opt{'name_singular'} ); + my $hashref = $opt{'new_hashref_callback'} + ? &{$opt{'new_hashref_callback'}} + : {}; -my $viewall_url = $p . ( $opt{'viewall_dir'} || 'search' ) . "/$table.html"; -$viewall_url = $opt{'viewall_url'} if $opt{'viewall_url'}; + $object = $opt{'new_object_callback'} + ? &{$opt{'new_object_callback'}}( $cgi, $hashref, $fields, \%opt ) + : $class->new( $hashref ); + + &{$opt{'new_callback'}}( $cgi, $object, $fields, \%opt ) + if $opt{'new_callback'}; + + } + + &{$opt{'end_callback'}}( $cgi, $object, $fields, \%opt ) + if $opt{'end_callback'}; + + $opt{action} ||= $object->$pkey() ? 'Edit' : 'Add'; -my @menubar = (); -if ( $opt{'menubar'} ) { - @menubar = @{ $opt{'menubar'} }; -} else { - my $items = $opt{'name'} ? $opt{'name'}.'s' : PL($opt{'name_singular'}); - @menubar = ( - "View all $items" => $viewall_url, - ); }