-<%
+%
+%
+% # options example...
+% #
+% ###
+% ##req
+% ##
+% #
+% # 'table' =>
+% #
+% # #? 'primary_key' => #required when the dbdef doesn't know...???
+% # #? 'fields' => []
+% #
+% ###
+% ##opt
+% ###
+% #
+% # 'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
+% # OR
+% # 'redirect' => 'view/table.cgi?', # value of primary key is appended
+% #
+% # 'error_redirect' => popurl(2).'edit/table.cgi?', #query string appended
+% #
+% # 'edit_ext' => 'html', #defaults to 'html', you might want 'cgi' while the
+% # #naming is still inconsistent
+% #
+% # 'process_m2m' => { 'link_table' => 'link_table_name',
+% # 'target_table' => 'target_table_name',
+% # },
+% # 'process_m2name' => { 'link_table' => 'link_table_name',
+% # 'link_static' => { 'column' => 'value' },
+% # 'num_col' => 'column', #if column name is different in
+% # #link_table than source_table
+% # 'name_col' => 'name_column',
+% # 'names_list' => [ 'list', 'names' ],
+% # },
+%
+% my(%opt) = @_;
+%
+% #false laziness w/edit.html
+% my $table = $opt{'table'};
+% my $class = "FS::$table";
+% my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} ||
+% my $fields = $opt{'fields'}
+% #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ];
+% || [ fields($table) ];
+%
+% my $pkeyvalue = $cgi->param($pkey);
+%
+% my $old = qsearchs( $table, { $pkey => $pkeyvalue } ) if $pkeyvalue;
+%
+% my $new = $class->new( {
+% map {
+% $_, scalar($cgi->param($_));
+% } @$fields
+% } );
+%
+% my $error;
+% if ( $pkeyvalue ) {
+% $error = $new->replace($old);
+% } else {
+% $error = $new->insert;
+% $pkeyvalue = $new->getfield($pkey);
+% }
+%
+% if ( !$error && $opt{'process_m2m'} ) {
+% $error = $new->process_m2m( %{ $opt{'process_m2m'} },
+% 'params' => scalar($cgi->Vars),
+% );
+% }
+%
+% if ( !$error && $opt{'process_m2name'} ) {
+% $error = $new->process_m2name( %{ $opt{'process_m2name'} },
+% 'params' => scalar($cgi->Vars),
+% );
+% }
+%
+% # XXX print?!?!
+%
+% if ( $error ) {
+% $cgi->param('error', $error);
+% my $edit_ext = $opt{'edit_ext'} || 'html';
+% my $url = $opt{'error_redirect'} || popurl(2)."$table.$edit_ext?";
+% print $cgi->redirect($url. $cgi->query_string );
+% } elsif ( $opt{'redirect'} ) {
+% print $cgi->redirect( $opt{'redirect'}. $pkeyvalue );
+% } else {
+% print $cgi->redirect( popurl(3).
+% ( $opt{'viewall_dir'} || 'search' ).
+% "/$table.html"
+% );
+% }
+%
+%
- # options example...
- #
- # 'table' =>
- # #? 'primary_key' => #required when the dbdef doesn't know...???
- # #? 'fields' => []
- # 'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
-
- my(%opt) = @_;
-
- #false laziness w/edit.html
- my $table = $opt{'table'};
- my $class = "FS::$table";
- my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} ||
- my $fields = $opt{'fields'}
- #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ];
- || [ fields($table) ];
-
- my $pkeyvalue = $cgi->param($pkey);
-
- my $old = qsearchs( $table, { $pkey => $pkeyvalue } ) if $pkeyvalue;
-
- my $new = $class->new( {
- map {
- $_, scalar($cgi->param($_));
- } @$fields
- } );
-
- my $error;
- if ( $pkeyvalue ) {
- $error = $new->replace($old);
- } else {
- warn $new;
- $error = $new->insert;
- warn $error;
- $pkeyvalue = $new->getfield($pkey);
- }
-
- if ( $error ) {
- $cgi->param('error', $error);
- print $cgi->redirect(popurl(2). "$table.html?". $cgi->query_string );
- } else {
- print $cgi->redirect( popurl(3).
- ( $opt{'viewall_dir'} || 'search' ).
- "/$table.html"
- );
- }
-
-%>