#!/usr/bin/perl -T # This script lists information about anstracts and papers # Modification History # 0.01 (20011216) tallan - Created. # 0.02 (20020223) tallan - Added menu. # 0.03 (20020304) tallan - Allow admin and board access to the whole list. # 0.04 (20030616) tallan - Public view of accepted abstracts my $version = "0.04 (20030616)"; 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; # ----------------------------------------------------------------------------- # Initialisation... my $config = new APMS::Config(); $config->version($version); my $debug = 0; my $instrument = new APMS::Instrument(); my $request = new APMS::CGIRequest(); # must be logged on, except for public view my $login; unless (($request->param('select') || '') eq 'accepted') { $login = APMS::login($request, $instrument); } my $response = new APMS::CGIResponse($request, 200); unless ($response->template('list')) { printf($config->get_resource('template') . "\n", 'list'); } # ----------------------------------------------------------------------------- # 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('customer',$customer); $response->param('title', "$customer - Abstracts for $event_name"); $response->param('title1', "Abstracts for $event_name"); $response->param('menu', [ { url => "/$event/", label => "$event_name" }, { url => '/apps/user/', label => 'User Functions' }, ] ); $response->no_more('menu'); my $authorised; if ($login) { $response->param('userid', $login->id()); $response->param('username',$login->as_string()); $authorised = $login->authorise('board') || $login->is_admin(); $response->param('admin', 'true') if ($authorised); } $response->no_more('admin'); my $papers = APMS::Paper::FindAllActive(); $response->param('papers', scalar(keys %$papers)); print STDERR "papers = " . scalar(keys %$papers) . "\n" if ($debug); # narrow to just the event we are interested in my $this_event = APMS::Paper::Search($papers, 'paper.event', 'eq', $event); $response->param('papers_this_event', scalar(keys %$this_event)); print STDERR "search results ($event) = " . scalar(keys %$this_event) . "\n" if ($debug); # show paper user has submitted or all papers if admin user and asked for it all my $results; if ($authorised && (($request->param('select') || '') eq 'all')) { $response->param('show', 'true'); $results = $this_event; } elsif (($request->param('select') || '') eq 'accepted') { $response->param('show-accepted', 'true'); my $partial_results = APMS::Paper::Search($this_event, 'paper.status', 'ne', 'Abstract Rejected'); $results = APMS::Paper::Search($partial_results, 'paper.status', 'ne', 'Preliminary Abstract'); } else { $response->param('show', 'true'); if ($login) { $results = APMS::Paper::Search($this_event, 'presenter.userid', 'eq', $login->id()); } } $response->param('papers_selected', scalar(keys %$results)); $response->param('some_papers', 'true') if (scalar(keys %$results)); $response->param('no_papers', 'true') unless (scalar(keys %$results)); print STDERR "papers_selected = " . scalar(keys %$results) . "\n" if ($debug); foreach my $paperid (sort keys %$results) { my $paper = $$results{$paperid}; my $pru = ''; my $prn = ''; if ($pru = $paper->get('presenter.userid')) { my $user = new APMS::User($pru); if ($user) { $prn = $user->as_string(); } } my $prr = APMS::CGIResponse::Escape($paper->get('presenter.rookie') || ''); my $pas = APMS::CGIResponse::Escape($paper->get('paper.status') || ''); my $pat = APMS::CGIResponse::Escape($paper->get('paper.title') || ''); my $paa = APMS::CGIResponse::Escape($paper->get('paper.abstract') || ''); $paa =~ s/\n/
/g; $response->push_param_clean('paper', { paperid => $paperid, userid => $pru, username => $prn, rookie => $prr, status => $pas, title => $pat, abstract => $paa }); print STDERR "push paper: user = $prn, title = $pat\n" if ($debug); } $response->no_more('paper'); # ----------------------------------------------------------------------------- my $bytes = $response->finalise(); $instrument->stop('good', $bytes, 'byte');