11 % # #? 'primary_key' => #required when the dbdef doesn't know...???
18 % # 'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
20 % # 'redirect' => 'view/table.cgi?', # value of primary key is appended
22 % # 'error_redirect' => popurl(2).'edit/table.cgi?', #query string appended
24 % # 'edit_ext' => 'html', #defaults to 'html', you might want 'cgi' while the
25 % # #naming is still inconsistent
27 % # 'copy_on_empty' => [ 'old_field_name', 'another_old_field', ... ],
29 % # 'clear_on_error' => [ 'form_field1', 'form_field2', ... ],
31 % # 'process_m2m' => { 'link_table' => 'link_table_name',
32 % # 'target_table' => 'target_table_name',
34 % # 'process_m2name' => { 'link_table' => 'link_table_name',
35 % # 'link_static' => { 'column' => 'value' },
36 % # 'num_col' => 'column', #if column name is different in
37 % # #link_table than source_table
38 % # 'name_col' => 'name_column',
39 % # 'names_list' => [ 'list', 'names' ],
44 % #false laziness w/edit.html
45 % my $table = $opt{'table'};
46 % my $class = "FS::$table";
47 % my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} ||
48 % my $fields = $opt{'fields'}
49 % #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ];
50 % || [ fields($table) ];
52 % my $pkeyvalue = $cgi->param($pkey);
54 % my $old = qsearchs( $table, { $pkey => $pkeyvalue } ) if $pkeyvalue;
56 % my $new = $class->new( {
58 % $_, scalar($cgi->param($_));
62 % if ($old && exists($opt{'copy_on_empty'})) {
63 % foreach my $field (@{$opt{'copy_on_empty'}}) {
64 % $new->set($field, $old->get($field))
65 % unless scalar($cgi->param($field));
71 % $error = $new->replace($old);
73 % $error = $new->insert;
74 % $pkeyvalue = $new->getfield($pkey);
77 % if ( !$error && $opt{'process_m2m'} ) {
78 % $error = $new->process_m2m( %{ $opt{'process_m2m'} },
79 % 'params' => scalar($cgi->Vars),
83 % if ( !$error && $opt{'process_m2name'} ) {
84 % $error = $new->process_m2name( %{ $opt{'process_m2name'} },
85 % 'params' => scalar($cgi->Vars),
92 % $cgi->param('error', $error);
93 % if (scalar(@{$opt{'clear_on_error'}})) {
94 % foreach my $field (@{$opt{'clear_on_error'}}) {
95 % $cgi->param($field, '')
98 % my $edit_ext = $opt{'edit_ext'} || 'html';
99 % my $url = $opt{'error_redirect'} || popurl(2)."$table.$edit_ext?";
100 % print $cgi->redirect($url. $cgi->query_string );
101 % } elsif ( $opt{'redirect'} ) {
102 % print $cgi->redirect( $opt{'redirect'}. $pkeyvalue );
104 % print $cgi->redirect( popurl(3).
105 % ( $opt{'viewall_dir'} || 'search' ).