#!/usr/local/bin/perl
#
# ** Need to add STATE ABBREV -> STATE NAME
#
#
#################################################################
################ OPS -- EMERGENCY PROCEDURE #####################
### set this variable to 1, and redeploy THIS FILE to all front-end servers
$SERVER_IS_MELTING=0;
#####
#################################################################
#################################################################
#
# Program: Olympics Athlete Guide
# Lynn Ranen 11/01 - hacked over from NBA Draft
# Purpose: allow user to see data sorted by NAME/SPORT/HOMETOWN (STATE)
#
# Modifications:
#
#
#
## TESTING ENVIRONMENT ##
my $DEVELOPMENT=0;
my $DEBUG=0;
my $TOPDIR;
### load libraries and handle compile errors ###
BEGIN{
use lib qw(/html/u/lranen/PERL/modules);
use FindBin;
$TOPDIR = $FindBin::Bin;
chdir $TOPDIR;
use DataManager;
use output::cgiHTML_;
print "Content-type: text/html\n\n";
use CGI;
use CGI::Carp qw(carpout);
open (ERROR, "> $TOPDIR/error.log")
|| die "cant open error.log \n $!";
carpout(*ERROR);
}
if ($SERVER_IS_MELTING) {
my $emergency_file = qq(/u/olympics/2002/athleteguide/index.html);
my $HTML_obj = create_custom_HTML_obj('','','');
$HTML_obj->printFile($emergency_file);
exit(0);
}
## * hard-coded * ##
my $print_back_to_index=1;
my $app_indexpage = qq(/u/olympics/2002/athleteguide/index.html);
my $DRAFTCGI = qq(/u/olympics/2002/athleteguide/athleteguide.cgi);
my $allplayer_dat = "$TOPDIR/DATA/allplayer.dat";
my $states_dat = "$TOPDIR/DATA/states.dat";
my $headerfile = "$TOPDIR/html_templates/spln_athleteguide_header.htm";
my $footerfile = "$TOPDIR/html_templates/spln_athleteguide_footer.htm";
my $formfile = "$TOPDIR/html_templates/draft_banner_form.htm";
my $letter_pulldown = q(/html/u/olympics/2002/athleteguide/includes/letter_include.htm);
my $sport_pulldown = q(/html/u/olympics/2002/athleteguide/includes/sport_include.htm);
my $state_pulldown = q(/html/u/olympics/2002/athleteguide/includes/state_include.htm);
my $HTML_obj = create_custom_HTML_obj($headerfile, $footerfile, $formfile);
my %ABBR2NAME = map {$_->ABBR(), mixCase($_->NAME())} new DataManager($states_dat, '|', "statesdat")->getRecordObjects();
# ---------------------- #
# get the user's request
# ---------------------- #
### CGI CODE GOES HERE ###
my $CGI_obj = new CGI();
map { $form{$_} = $CGI_obj->param($_) } qw(sortby letter sport state);
# $form{sortby} = 'round';
# $form{round} = 1;
## ... print the page ............................................ ##
#print "Content-type: text/html\n\n";
$form{'sortby'} =~ s/Go To//;
$form{'sortby'} =~ s/ +//;
$form{'sortby'} = lc($form{'sortby'});
if ($form{sortby} eq 'state') {
my $pageheader = q(By State);
$HTML_obj->openPage($pageheader);
&printState(\%form, $HTML_obj);
}
elsif ($form{sortby} eq 'sport') {
my $pageheader = q(By Sport);
$HTML_obj->openPage($pageheader);
&printSport(\%form, $HTML_obj);
}
elsif ($form{sortby} eq 'letter') {
my $pageheader = q(Alphabetically);
$HTML_obj->openPage($pageheader);
&printLetter (\%form, $HTML_obj);
}
else{
## no other options ##
}
if ($print_back_to_index) {
$HTML_obj->printParagraph("Back to Athlete Guide");
}
$HTML_obj->closePage();
## ..................................................................... ##
## ....................... SUBROUTINES ................................. ##
## ..................................................................... ##
sub mixCase { return join ' ', map { ucfirst(lc($_)); } split / +/, shift; }
## the &handleCGI does the replacements on the Schoolname
## special-character escapes -- plus (+) and _ampersand_ (&)
## and _apos_ (')
## so the value in $user_school should match the Schoolname
## in the allplayer.dat file
sub printState {
my $ref_form = shift;
my $HTML_obj = shift;
my $user_state = $$ref_form{'state'};
my @selected_objs = new DataManager($allplayer_dat, '|', "playercgi",
sub {
bugs("callback has $_[0] ");
return 1 if $_[0] =~ /\|$user_state/;
return 0;
},
sub {
$_[0]->printDebug() if $DEBUG;
return 1 if $_[0]->STATE()=~ /$user_state/;
return 0;
}
)
->getSortedRecordObjects(
method1 => 'LAST_NAME',
method2 => 'FIRST_NAME');
my $pulldown = `cat $state_pulldown`;
my %OPTIONS = (
Pulldown => $pulldown,
PageHeader => $ABBR2NAME{${$ref_form}{'state'}} );
$HTML_obj->printForm(\%OPTIONS);
unless (@selected_objs){
$HTML_obj->printParagraph("There are no athletes from this state");
return 0;
}
$HTML_obj->openTable();
$HTML_obj->printFieldHeaders( qw(Athlete Sport Hometown));
foreach (@selected_objs){
my ($first, $last, $sport, $hometown, $url, $state) = $_->myVals(qw(FIRST_NAME LAST_NAME SPORT HOMETOWN URL STATE));
$HTML_obj->printDietRow(
map {($_ =~ /\w+/)? $_ : ' '}
(
&getAthleteLink($first, $last, $url),
&makeCGILink('sport', 'sport', $sport, ),
&makeCGILink('state', 'state', $state, $hometown),
)
);
}#end foreach (@selected_objs)
$HTML_obj->closeTable();
}
sub printSport {
my $ref_form = shift;
my $HTML_obj = shift;
my $user_sport = $$ref_form{'sport'};
bugs("sport = $user_sport");
my @selected_objs = new DataManager($allplayer_dat, '|', "playercgi",
sub {
bugs("callback has $_[0] ");
return 1 if $_[0] =~ /\|$user_sport/;
return 0;
},
sub {
$_[0]->printDebug() if $DEBUG;
return 1 if $_[0]->SPORT()=~ /$user_sport/;
return 0;
}
)
->getSortedRecordObjects(
method1 => 'LAST_NAME',
method2 => 'FIRST_NAME');
my %SPORTABBR2NAME = (
alpine => 'Alpine Skiing',
biathlon => 'Biathlon',
bobsled => 'Bobsleigh',
xcountry => 'Cross-Country Skiing',
curling => 'Curling',
figure => 'Figure Skating',
freestyle => 'Freestyle Skiing',
hockey => 'Ice Hockey',
luge => 'Luge',
nordic => 'Nordic Combined',
=> 'Short Track Speedskating',
skeleton => 'Skeleton',
skijump => 'Ski Jumping',
snowboard => 'Snowboarding',
speed => 'Speedskating',
);
my $pulldown = `cat $sport_pulldown`;
my %OPTIONS = (
Pulldown => $pulldown,
PageHeader => ${$ref_form}{'sport'});
$HTML_obj->printForm(\%OPTIONS);
unless (@selected_objs){
$HTML_obj->printParagraph("There are no athletes for this sport");
return 0;
}
$HTML_obj->openTable();
$HTML_obj->printFieldHeaders( qw(Athlete Sport Hometown));
foreach (@selected_objs){
my ($first, $last, $sport, $hometown, $url, $state) = $_->myVals(qw(FIRST_NAME LAST_NAME SPORT HOMETOWN URL STATE));
$HTML_obj->printDietRow(
map {($_ =~ /\w+/)? $_ : ' '}
(
&getAthleteLink($first, $last, $url),
&makeCGILink('sport', 'sport', $sport ),
&makeCGILink('state', 'state', $state, $hometown),
)
);
}#end foreach (@selected_objs)
$HTML_obj->closeTable();
}
sub printLetter {
my $ref_form = shift;
my $HTML_obj = shift;
my $user_letter = ${$ref_form}{'letter'};
bugs("user_letter = $user_letter ");
my @selected_objs = new DataManager($allplayer_dat, '|', "playercgi",
sub {
bugs("callback has $_[0] ");
return 1 if $_[0] =~ /$user_letter/;
return 0;
},
sub {
$_[0]->printDebug() if $DEBUG;
return 1 if substr($_[0]->LAST_NAME(), 0,1) eq $user_letter;
return 0;
}
)
->getSortedRecordObjects(
method1 => 'LAST_NAME',
method2 => 'FIRST_NAME');
my $pulldown = `cat $letter_pulldown`;
my %OPTIONS = (
Pulldown => $pulldown,
PageHeader => ${$ref_form}{'letter'});
$HTML_obj->printForm(\%OPTIONS);
unless (@selected_objs){
$HTML_obj->printParagraph("There are no athletes for this letter");
return 0;
}
$HTML_obj->openTable();
$HTML_obj->printFieldHeaders( qw(Athlete Sport Hometown));
foreach (@selected_objs){
my ($first, $last, $sport, $hometown, $url, $state) = $_->myVals(qw(FIRST_NAME LAST_NAME SPORT HOMETOWN URL STATE));
$HTML_obj->printDietRow(
map {($_ =~ /\w+/)? $_ : ' '}
(
&getAthleteLink($first, $last, $url),
&makeCGILink('sport', 'sport', $sport ),
&makeCGILink('state', 'state', $state, $hometown),
)
);
}#end foreach (@selected_objs)
$HTML_obj->closeTable();
}
sub getAthleteLink{
my $first = shift;
my $last = shift;
my $url = shift;
return "$first $last" unless ($url =~ m#\w+#);
return (-e qq(/html/$url)) ?
qq($first $last ):
qq($first $last);
}
sub makeCGILink{
my $sortby = shift;
my $name = shift;
my $value = shift;
my $linktext = shift;
$linktext ||= $value;
## $value = &makePK($value);
$value =~ s/&/_ampersand_/g;
$value =~ s/'/_apos_/g;
$value =~ tr/ /+/;
return '' unless ($sortby && $name && $value);
return "$linktext";
}
sub bugs {print STDOUT "athleteguide.cgi
\n@_" if $DEBUG;}
#_______________________________________________________
sub createHTML_obj{
my $headerfile = shift;
my $footerfile = shift;
my $formfile = shift;
return new cgiHTML_ (
headerfile => $headerfile,
footerfile => $footerfile,
formfile => $formfile,
);
}
#
# define custom colors
#
sub create_custom_HTML_obj{
my $headerfile = shift;
my $footerfile = shift;
my $formfile = shift;
# ... HEX colors ... # (dont use names - HEX only )
*palegreen2 = \'e0e6df';
*palegrey = \'f0f0f0';
*mediumgrey = \'d1d1d1';
*darkblue = \'00007f';
*white = \'ffffff';
*black = \'000000';
*WSblue = \'d9d9f3';
# -- Olympics colors -- #
my $oly_THcolor = "bedoff";
my $tablecolor = $white;
my $headercolor = $darkblue;
my $thcolor = $palegreen2;
my $tdcolor = $palegrey;
my $rowcolor = $palegrey;
my $altrowcolor = $white;
my $tableFontcolor = undef;
my $headerFontcolor = undef;
my $thFontcolor = undef;
my $tdFontcolor = undef;
my $rowFontcolor = undef;
return new cgiHTML_ (
headerfile => $headerfile,
footerfile => $footerfile,
formfile => $formfile,
TABLEcolor => $tablecolor,
HEADERcolor => $headercolor,
THcolor => $oly_THcolor,
TDcolor => $tdcolor,
ROWcolor => $rowcolor,
ALTROWcolor => $altrowcolor,
TABLEfontcolor => $tableFontcolor,
HEADERfontcolor => $headerFontcolor,
THfontcolor => $thFontcolor,
ROWfontcolor => $rowFontcolor,
TDfontcolor => $tdFontcolor,
FONTclass => undef,
);
}
1;
__END__