default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / httemplate / edit / process / agent.cgi
index 2b49913..5549929 100755 (executable)
@@ -1,73 +1,56 @@
-<%
-#
-# $Id: agent.cgi,v 1.1 2001-07-30 07:36:04 ivan Exp $
-#
-# ivan@sisd.com 97-dec-12
-#
-# Changes to allow page to work at a relative position in server
-#       bmccane@maxbaud.net     98-apr-3
-#
-# lose background, FS::CGI ivan@sisd.com 98-sep-2
-#
-# $Log: agent.cgi,v $
-# Revision 1.1  2001-07-30 07:36:04  ivan
-# templates!!!
-#
-# Revision 1.7  1999/01/25 12:09:57  ivan
-# yet more mod_perl stuff
-#
-# Revision 1.6  1999/01/19 05:13:47  ivan
-# for mod_perl: no more top-level my() variables; use vars instead
-# also the last s/create/new/;
-#
-# Revision 1.5  1999/01/18 22:47:49  ivan
-# s/create/new/g; and use fields('table_name')
-#
-# Revision 1.4  1998/12/30 23:03:26  ivan
-# bugfixes; fields isn't exported by derived classes
-#
-# Revision 1.3  1998/12/17 08:40:16  ivan
-# s/CGI::Request/CGI.pm/; etc
-#
-# Revision 1.2  1998/11/23 07:52:29  ivan
-# *** empty log message ***
-#
+<% include( 'elements/process.html',
+              'table'            => 'agent',
+              'viewall_dir'      => 'browse',
+              'viewall_ext'      => 'cgi',
+              'process_m2m'      => { 'link_table'   => 'access_groupagent',
+                                      'target_table' => 'access_group',
+                                    },
+              'process_m2name'   => {
+                      'link_table'  => 'agent_currency',
+                      'name_col'    => 'currency',
+                      'names_list'  => [ $conf->config('currencies') ],
+                      'param_style' => 'link_table.value checkboxes',
+              },
+              'edit_ext'         => 'cgi',
+              'noerror_callback' => $process_agent_pkg_class,
+          )
+%>
+<%init>
 
-use strict;
-use vars qw ( $cgi $agentnum $old $new $error );
-use CGI;
-use CGI::Carp qw(fatalsToBrowser);
-use FS::UID qw(cgisuidsetup);
-use FS::Record qw(qsearch qsearchs fields);
-use FS::agent;
-use FS::CGI qw(popurl);
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 
-$cgi = new CGI;
+my $conf = new FS::Conf;
 
-&cgisuidsetup($cgi);
+if ( $conf->exists('disable_acl_changes') ) {
+  errorpage('ACL changes disabled in public demo.');
+  die "shouldn't be reached";
+}
 
-$agentnum = $cgi->param('agentnum');
+my $process_agent_pkg_class = sub {
+  my( $cgi, $agent ) = @_;
 
-$old = qsearchs('agent',{'agentnum'=>$agentnum}) if $agentnum;
+  #surprising amount of false laziness w/ edit/agent.cgi
+  my @pkg_class = qsearch('pkg_class', { 'disabled'=>'' });
+  foreach my $pkg_class ( '', @pkg_class ) {
+    my %agent_pkg_class = ( 'agentnum' => $agent->agentnum,
+                            'classnum' => $pkg_class ? $pkg_class->classnum : ''
+                          );
+    my $agent_pkg_class =
+      qsearchs( 'agent_pkg_class', \%agent_pkg_class )
+      || new FS::agent_pkg_class   \%agent_pkg_class;
 
-$new = new FS::agent ( {
-  map {
-    $_, scalar($cgi->param($_));
-  } fields('agent')
-} );
+    my $param = 'classnum'. $agent_pkg_class{classnum};
 
-if ( $agentnum ) {
-  $error=$new->replace($old);
-} else {
-  $error=$new->insert;
-  $agentnum=$new->getfield('agentnum');
-}
+    $agent_pkg_class->commission_percent( $cgi->param($param) );
 
-if ( $error ) {
-  $cgi->param('error', $error);
-  print $cgi->redirect(popurl(2). "agent.cgi?". $cgi->query_string );
-} else { 
-  print $cgi->redirect(popurl(3). "browse/agent.cgi");
-}
+    my $method = $agent_pkg_class->agentpkgclassnum ? 'replace' : 'insert';
 
-%>
+    my $error = $agent_pkg_class->$method;
+    die $error if $error; #XXX push this down into agent.pm w/better/transactional error handling
+
+  }
+
+};
+
+</%init>