ACLs: finish group edit (agents + rights) & browse
[freeside.git] / httemplate / edit / process / elements / process.html
1 <%
2
3   # options example...
4   # 
5   ###
6   ##req
7   ##
8   # 'table' => 
9   #
10   # #? 'primary_key' => #required when the dbdef doesn't know...???
11   # #? 'fields' => []
12   #
13   ###
14   ##opt
15   ###
16   # 'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
17   # 'process_m2m' => { 'link_table'   => 'link_table_name',
18   #                    'target_table' => 'target_table_name',
19   #                  },
20   # 'process_m2name' => { 'link_table'   => 'link_table_name',
21   #                       'link_static' => { 'column' => 'value' },
22   #                       'num_col' => 'column', #if column name is different in
23   #                                              #link_table than source_table 
24   #                       'name_col' => 'name_column',
25   #                       'names_list' => [ 'list', 'names' ],
26   #                     },
27
28   my(%opt) = @_;
29
30   #false laziness w/edit.html
31   my $table = $opt{'table'};
32   my $class = "FS::$table";
33   my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} || 
34   my $fields = $opt{'fields'}
35                #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ];
36                || [ fields($table) ];
37
38   my $pkeyvalue = $cgi->param($pkey);
39
40   my $old = qsearchs( $table, { $pkey => $pkeyvalue } ) if $pkeyvalue;
41
42   my $new = $class->new( {
43     map {
44       $_, scalar($cgi->param($_));
45     } @$fields
46   } );
47
48   my $error;
49   if ( $pkeyvalue ) {
50     $error = $new->replace($old);
51   } else {
52     $error = $new->insert;
53     $pkeyvalue = $new->getfield($pkey);
54   }
55
56   if ( !$error && $opt{'process_m2m'} ) {
57     $error = $new->process_m2m( %{ $opt{'process_m2m'} },
58                                 'params' => scalar($cgi->Vars),
59                               );
60   }
61
62   if ( !$error && $opt{'process_m2name'} ) {
63     $error = $new->process_m2name( %{ $opt{'process_m2name'} },
64                                    'params' => scalar($cgi->Vars),
65                                  );
66   }
67
68   if ( $error ) {
69     $cgi->param('error', $error);
70     print $cgi->redirect(popurl(2). "$table.html?". $cgi->query_string );
71   } else { 
72     print $cgi->redirect( popurl(3).
73                           ( $opt{'viewall_dir'} || 'search' ).
74                           "/$table.html"
75                         );
76   }
77
78 %>