#!/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__