3 %# Welcome to generic.cgi.
5 %# This script provides a generic edit/process/ backend for simple table
6 %# editing. All it knows how to do is take the values entered into
7 %# the script and insert them into the table specified by $cgi->param('table').
8 %# If there's an existing record with the same primary key, it will be
9 %# replaced. (Deletion will be added in the future.)
11 %# Special cgi params for this script:
12 %# table: the name of the table to be edited. The script will die horribly
13 %# if it can't find the table.
14 %# redirect_ok: URL to be displayed after a successful edit. The value of
15 %# the record's primary key will be passed as a keyword.
16 %# Defaults to (freeside root)/view/$table.cgi.
17 %# redirect_error: URL to be displayed if there's an error. The original
18 %# query string, plus the error message, will be passed.
19 %# Defaults to $cgi->referer() (i.e. go back where you
23 %use FS::Record qw(qsearchs dbdef);
25 %use DBIx::DBSchema::Table;
31 %my $table = $cgi->param('table');
32 %my $dbdef = dbdef or die "Cannot fetch dbdef!";
34 %my $dbdef_table = $dbdef->table($table) or die "Cannot fetch schema for $table";
36 %my $pkey = $dbdef_table->primary_key or die "Cannot fetch pkey for $table";
37 %my $pkey_val = $cgi->param($pkey);
40 %#warn "new FS::Record ( $table, (hashref) )";
41 %my $new = FS::Record::new ( "FS::$table", {
42 % map { $_, scalar($cgi->param($_)) } fields($table)
45 %#warn 'created $new of class '.ref($new);
47 %if($pkey_val and (my $old = qsearchs($table, { $pkey, $pkey_val} ))) {
49 % $error = $new->replace($old);
52 % $error = $new->insert;
53 % $pkey_val = $new->getfield($pkey);
54 % # New records usually don't have their primary keys set until after
55 % # they've been checked/inserted, so grab the new $pkey_val so we can
59 %my $redirect_ok = (($cgi->param('redirect_ok')) ?
60 % $cgi->param('redirect_ok') : $p3."browse/generic.cgi?$table");
61 %my $redirect_error = (($cgi->param('redirect_error')) ?
62 % $cgi->param('redirect_error') : $cgi->referer());
65 % $cgi->param('error', $error);
66 % print $cgi->redirect($redirect_error . '?' . $cgi->query_string);
68 % print $cgi->redirect($redirect_ok);