#!/usr/bin/perl -T # This script tests the CGIRequest object # Modification History # 0.01 (20011210) tallan - Created. # 0.02 (20011213) tallan - Added header/footer support. # 0.03 (20011215) tallan - Added CGIForm support. # 0.04 (20011219) tallan - Add country drop down and validation. # 0.05 (20020223) tallan - Added menu. # 0.06 (20020305) tallan - allow an admin user to add a new user with partial info. # 0.07 (20021206) tallan - allow submission to be closed. # 0.08 (20040305) tallan - closed submission error message to users. # 0.09 (20050324) tallan - add text to event message. # 0.10 (20060412) tallan - allow udmin to specify a serid with no password. # 0.11 (20070209) tallan - check if logged-on before testing is_admin() my $version = "0.11 (20070209)"; use strict; use warnings; use lib '../../lib'; use Data::Dumper; use APMS; use APMS::Instrument; use APMS::CGIRequest; use APMS::CGIResponse; use APMS::CGIForm; use APMS::User; use APMS::Paper; use APMS::Event; # ----------------------------------------------------------------------------- # Initialisation... my $config = new APMS::Config(); $config->version($version); my $debug = 0; my $instrument = new APMS::Instrument(); my $request = new APMS::CGIRequest(5000); my $login; if ($request->param('login')) { $login = APMS::login($request, $instrument); } my $response = new APMS::CGIResponse($request, 200); unless ($response->template('abstract')) { printf($config->get_resource('template') . "\n", 'abstract'); } # ----------------------------------------------------------------------------- # Did we get a good event? my $event; my $event_name; if ($event = $request->param('event')) { $response->param('event', $event); $event_name = $config->get('event', $event, 'name'); if ($event_name) { $response->param('event_name', $event_name); } else { $response->push_param('errors', {'error' => sprintf($config->get_resource('bad-event'), $event)}); my $bytes = $response->finalise(); $instrument->stop('failed'); exit 0; } } else { $response->push_param('errors', {'error' => $config->get_resource('no-event')}); my $bytes = $response->finalise(); $instrument->stop('failed'); exit 0; } # ----------------------------------------------------------------------------- my $customer = $config->get('customer.name'); $response->param('title', "$customer - Abstract Submission for $event_name"); $response->param('title1', "Abstract Submission for $event_name"); $response->param('menu', [ { url => "/$event/", label => "$event_name" }, { url => '/apps/user/', label => 'User Functions' }, ] ); $response->no_more('menu'); $response->param('customer', $customer); $response->param('width', '20%'); # see if submission is still open my $closed_sub = $config->get("event.$event.close-abstract") || 0; if ($closed_sub) { $response->param('closed_sub', "true"); print STDERR "$customer - $event Abstract Submission Closed.\n"; } my $command = $request->param('cmd') || ''; if ($command eq 'edit') { $response->push_param('errors', {'error' => $config->get_resource('edit')}); } my $user; my $flag_new_user = 0; my $old_user_id; # define a new user, just in case my $new_user = new APMS::User(); my $form = new APMS::CGIForm($request, $response, 'abstract'); $form->process( sub { my ($parm, $value) = @_; if ($parm) { $new_user->set($parm, $value); print STDERR "[abstract] setting $parm to $value\n" if($debug); } }); # Add a list of countries my $country = $request->param('person.country') || 'Australia'; $response->param('countries', APMS::CGIForm::Countries($country)); $response->no_more('countries'); if ($command) { if (my $userid = $request->param('userid')) { $user = new APMS::User($userid); if ($user) { $user->authenticate($request->param('password')); if ($login) { if ($login->is_admin()) { $response->param('user', $user->as_string()); $response->param('userid', $userid); $response->push_param('details', $user->get_all()); $response->no_more('details'); $old_user_id = $userid; } } elsif ($user->is_authenticated()) { $response->param('user', $user->as_string()); $response->param('userid', $userid); $response->param('password', $request->param('password')); $response->push_param('details', $user->get_all()); $response->no_more('details'); $old_user_id = $userid; } else { $response->push_param('errors', {'error' => $config->get_resource('bad-userid')}); $form->validate('password'); } } else { $response->push_param('errors', {'error' => $config->get_resource('in-userid')}); } } else { $flag_new_user = 1; $form->validate('person.title'); $form->validate('person.firstname'); $form->validate('person.lastname'); $form->validate('person.position'); $form->validate('person.company'); $form->validate('person.address1'); $form->validate('person.address2'); $form->validate('person.city'); $form->validate('person.state'); $form->validate('person.postcode'); $form->validate('person.country'); $form->validate('person.telephone'); $form->validate('person.mobile'); $form->validate('person.facsimile'); $form->validate('person.email'); } $form->validate('presenter.rookie'); $form->validate('paper.title'); $form->validate('paper.abstract'); my $abstract_display = APMS::CGIResponse::Escape($request->param('paper.abstract')) || ''; $abstract_display =~ s/\n/
/g; $response->param_clean('paper.abstract.display', $abstract_display); } foreach my $e ($form->errors()) { $response->push_param('errors', {'error' => $e}); } $response->no_more('errors'); # admin users can add incomplete data my $form_errors = $form->errors(); if ($login) { if ($login->is_admin()) { $form_errors = 0; $response->param('admin', 'true'); } } $response->no_more('admin'); if ($command eq 'validate') { if ($form_errors) { $response->param('form', 'true'); } else { $response->param('check', 'true'); } } elsif ($command eq 'process') { my $new_user_id; if ($form_errors) { $response->param('form', 'true'); } else { $response->param('submission', 'true'); if ($flag_new_user) { # values already added to the object $new_user_id = $new_user->add(); if ($new_user_id) { $response->param('new_user_id', $new_user_id); APMS::Event::Record("new-user", "NOTICE", "Creating new user $new_user_id - $new_user."); } } my $new_paper = new APMS::Paper(); my $first_state = $config->get('paper.workflow.01') || 'Unknown'; $new_paper->set('paper.status', $first_state); $new_paper->set('paper.event', $event); my $id = $new_user_id || $old_user_id; $response->param('id', $id); $new_paper->set('presenter.userid', $id); if (my $x = $request->param('presenter.rookie')) { $new_paper->set('presenter.rookie', $x); } if (my $x = $request->param('paper.title')) { $new_paper->set('paper.title', $x); } if (my $x = $request->param('paper.abstract')) { $new_paper->set('paper.abstract', $x); } my $new_paper_id = $new_paper->add(); if ($new_paper_id) { $response->param('new_paper_id', $new_paper_id); APMS::Event::Record("new-paper", "NOTICE", "Creating new paper $new_paper_id for userid $id - $new_paper."); } } } else { # new form unless ($closed_sub) { $response->param('form', 'true'); } } # ----------------------------------------------------------------------------- my $bytes = $response->finalise(); $instrument->stop('good', $bytes, 'byte');