summaryrefslogtreecommitdiff
path: root/httemplate/edit/process/generic.cgi
blob: e3ac113ae69990e53eb0170532c324fdb74e14ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%# Welcome to generic.cgi.
%# 
%# This script provides a generic edit/process/ backend for simple table 
%# editing.  All it knows how to do is take the values entered into 
%# the script and insert them into the table specified by $cgi->param('table').
%# If there's an existing record with the same primary key, it will be 
%# replaced.  (Deletion will be added in the future.)
%# 
%# also see elements/process.html, newer and somewhat along the same lines,
%# though it still makes you setup a process file for the table.
%# perhaps safer, perhaps more of a pain in the ass.
%# 
%# Special cgi params for this script:
%# table: the name of the table to be edited.  The script will die horribly 
%#        if it can't find the table.
%# redirect_ok: URL to be displayed after a successful edit.  The value of 
%#              the record's primary key will be passed as a keyword.
%#              Defaults to (freeside root)/view/$table.cgi.
%# redirect_error: URL to be displayed if there's an error.  The original 
%#                 query string, plus the error message, will be passed.
%#                 Defaults to $cgi->referer() (i.e. go back where you 
%#                 came from).
%
%
%use FS::Record qw(qsearchs dbdef);
%use DBIx::DBSchema;
%use DBIx::DBSchema::Table;
%
%
%my $error;
%my $p2 = popurl(2);
%my $p3 = popurl(3);
%my $table = $cgi->param('table');
%my $dbdef = dbdef or die "Cannot fetch dbdef!";
%
%my $dbdef_table = $dbdef->table($table) or die "Cannot fetch schema for $table";
%
%my $pkey = $dbdef_table->primary_key or die "Cannot fetch pkey for $table";
%my $pkey_val = $cgi->param($pkey);
%
%
%#warn "new FS::Record ( $table, (hashref) )";
%my $new = FS::Record::new ( "FS::$table", {
%    map { $_, scalar($cgi->param($_)) } fields($table) 
%} );
%
%#warn 'created $new of class '.ref($new);
%
%if($pkey_val and (my $old = qsearchs($table, { $pkey, $pkey_val} ))) {
%  # edit
%  $error = $new->replace($old);
%} else {
%  #add
%  $error = $new->insert;
%  $pkey_val = $new->getfield($pkey);
%  # New records usually don't have their primary keys set until after 
%  # they've been checked/inserted, so grab the new $pkey_val so we can 
%  # redirect to it.
%}
%
%my $redirect_ok = (($cgi->param('redirect_ok')) ?
%                    $cgi->param('redirect_ok') : $p3."browse/generic.cgi?$table");
%my $redirect_error = (($cgi->param('redirect_error')) ?
%                       $cgi->param('redirect_error') : $cgi->referer());
%
%if($error) {
%  $cgi->param('error', $error);
%  print $cgi->redirect($redirect_error . '?' . $cgi->query_string);
%} else {
%  print $cgi->redirect($redirect_ok);
%}
%