#!/usr/bin/perl -wT use strict; use lib "..","."; use DBI; use CGI qw(param :standard escape unescape :cgi); use Utils; use Defs; use PageGen; use Tips; use Standings; use warnings; use Email; use Login; use Admin; use CompRegister; use Groups; use Member; use ClientConfig; use Team; use DeQuote; use RoundStats; #use SiteConfig; use Otp; use HTTP::Request::Common qw(POST); main(); sub main { #VARS my $output = new CGI; my %fields = $output->Vars; my $client = $fields{'cID'} || 0; my $clientConfig=new ClientConfig($client); if (! $clientConfig) { NoClientRedirect(); exit; } my $db= $clientConfig->getDB(); my $roundID = $fields{'roundID'} || 0; my $action = $fields{'action'} || 'login'; if (defined($fields{'compAndGroupID'})) { my @compAndGroup = split(/\|/, $fields{'compAndGroupID'}); $fields{'compID'}=$compAndGroup[0]; $fields{'groupID'}=$compAndGroup[1]; } my $roundOrder; my $mysportRequest = $fields{'mysport'} || 0; my $clientString = $fields{'client'} || ''; my $cookieheader = ''; my $compName = ''; my $groupName= ''; my $isAdmin = 0; my $memberID= -1; my $h1Header; my ($memberEmail, $displayName)=('',''); my $currentRoundOrder=1; my $roundDesc; my ($body, $topMenu, $sideLists) = ('','',''); my $showListsAtTop=0; my ($compCount, $roundCount, $memberCompCount, $showBox)=(0,0,0,0); my $memberComp_ref; my $memberName; #CONSTANTS my $editEntities='Round|Match|Comp|Venue|Team'; my $adminEditActions="(add|edit|delete|select|confDelete|update)($editEntities)"; my $actionIsAdmin=($action=~/^((add|show)Results)|($adminEditActions)$/); my $actionIsDelete=($action=~/^delete($editEntities)$/); my $actionIsConfDelete=($action=~/^confDelete($editEntities)$/); my $sitename=$clientConfig->getConfig('sitename'); my $invalidPrivAction='showStandings'; my $siteUsesOwnLogin=$clientConfig->getConfig('siteUsesOwnLogin'); ###mySport Integration if ($mysportRequest and $clientString) { my $enc = new Otp; $clientString = $enc->Otp(unescape(unescape($clientString)), 'hhpj02dj'); my ($mysportID, $firstName, $surname, $email, $displayName, $password) = split(/\|/, $clientString); #TODO - move this to a seperate module #TODO - check for duplicate display name, append memberID. If this happens, show the user a message $action='submitLogin'; $fields{'username'}=$email; $fields{'password'}=$password; #($mysportID, $firstName, $surname, $email, $displayName, $password) = DeQuote::deQuote2($db, \$mysportID, \$firstName, \$surname, \$email, \$displayName, \$password); if (my $row=getFirstRow($db, qq[SELECT * FROM tblMemberConfig WHERE intMySportID=$mysportID LIMIT 1],'TCGI-1')) { #member exists in tipping - do an update processQuery($db, qq[UPDATE tblMemberConfig SET strDisplayName=$displayName WHERE intMySportID=$mysportID LIMIT 1],'TCGI-2'); my $nameSQL = $clientConfig->getConfig('memberHasSurnameField') ? $clientConfig->getConfig('memberFieldFirstName')."=$firstName, ".$clientConfig->getConfig('memberFieldSurname')."=$surname" : $clientConfig->getConfig('memberFieldFirstName')."=CONCAT($firstName,' ',$surname)"; my $st = "UPDATE ".$clientConfig->getConfig('memberTableName').", tblMemberConfig SET $nameSQL, ".$clientConfig->getConfig('memberFieldEmail')."=$email, ".$clientConfig->getConfig('memberFieldUsername')."=$email,".$clientConfig->getConfig('memberFieldPassword')."=$password WHERE tblMemberConfig.intMySportID=$mysportID AND ".$clientConfig->getConfig('memberFieldID')."=tblMemberConfig.intMemberID"; print STDERR $st; processQuery($db, $st,'TCGI-3'); } else { #member does NOT exist in tipping - do an insert" my $nameFieldSQL = $clientConfig->getConfig('memberHasSurnameField') ? $clientConfig->getConfig('memberFieldFirstName').", ".$clientConfig->getConfig('memberFieldSurname') : $clientConfig->getConfig('memberFieldFirstName'); my $nameValueSQL = $clientConfig->getConfig('memberHasSurnameField') ? qq[$firstName, $surname] : qq[CONCAT($firstName,' ',$surname)]; my $memberTableName=$clientConfig->getConfig('memberTableName'); $memberTableName=~s/AS mem//g; my $st = qq[INSERT INTO ].$memberTableName.qq[ ($nameFieldSQL, ].$clientConfig->getConfig('memberFieldEmail').qq[, ].$clientConfig->getConfig('memberFieldUsername').qq[, ].$clientConfig->getConfig('memberFieldPassword').qq[) VALUES ($nameValueSQL, $email, $email, $password)]; $st=~s/mem\.//g; print STDERR $st; my $query = processQuery($db, $st,'TCGI-4'); $st = qq[INSERT INTO tblMemberConfig (intMemberID, intShowInStandings, strDisplayName, intRegistered, intMySportID) VALUES (].$query->{'mysql_insertid'}.qq[, 1, $displayName, 0, $mysportID)]; print STDERR $st; processQuery($db,$st,'TCGI-5'); } } ###USER VALIDATION #VALIDATE REGISTRATION CONFIRMATION (CLICK FROM EMAIL) if ($action eq 'confReg') { if ($siteUsesOwnLogin) { $body.=validateRegConf($db,\%fields, $clientConfig); $action='noHeader'; } else { $action='login'; } } if ($action eq 'confNewEmail') { if ($siteUsesOwnLogin) { $body.=validateEmailChange($db,\%fields, $clientConfig); $action='noHeader'; } else { $action='login'; } } #VALIDATE REGISTRATION POSTBACK (SUBMIT BUTTON) if ($action eq 'validateRegister') { my $tempBody=''; ($action,$tempBody)=validateRegister($db,\%fields, $clientConfig); $body.=$tempBody; } #VALIDATE USER FOLLOWING LOGIN ATTEMPT my $justIn=0; if ($action eq 'submitLogin') { ($memberID, $action, $cookieheader, $body) = validateLogin($db, $action , \%fields, $clientConfig); $justIn=1; } #VALIDATE COOKIES (if action requires authentication and not just logged in) if (not($justIn or $action=~/^(login|register|forgotPassword|sendForgotPasswordEmail|confReg|noHeader)$/)) { ($action,$memberID) = validateCookies($db, $action, $clientConfig); $body.= generateExpiryMessage() if ($action eq 'login'); } #TERMS ACCEPTED if ($fields{'acceptTerms'}) { $body.=acceptTerms($db, $memberID, $clientConfig); } if ((!$siteUsesOwnLogin) and ($action eq 'register')) {$action='login'}; #REGISTER PLAYER TO COMP (This must be done before generating header) if ($action eq 'updateRegisterComp') { my($tempBody,$alreadyInComp)=updateRegisterComp($db, $fields{'compID'}, $memberID); $body.=$tempBody; $action=$fields{'prevAction'} if ($fields{'prevAction'}); if (!$alreadyInComp) { ($roundID, $roundOrder) = getLatestRound($db, $fields{'compID'},$action, $clientConfig); $body.=addNewMemberTips($db, $memberID, $fields{'compID'}, $clientConfig); } } if ($action eq 'noHeader') {} elsif ($action eq 'register') { $body.=genRegister(\%fields, $clientConfig); $h1Header="Register for $sitename"; } elsif ($action eq 'forgotPassword') { $body.=genForgotPassword($clientConfig); $h1Header="$sitename: Send Password reminder"; } elsif ($action eq 'sendForgotPasswordEmail') { $body.=checkForgotPassword($db, $fields{'email'} || ' ', $clientConfig); $h1Header="$sitename: Send Password reminder"; } elsif ($action=~/^(login|logout)$/) { #SHOW LOGIN if ($action eq 'logout') { $cookieheader=cookie_string(new CGI, -1, '',0, $clientConfig); #Delete Cookie $body.=qq[
Logged Out
]; } $body.=genLogin(\%fields, $clientConfig); $h1Header = $clientConfig->getConfig('hideLogin') ? $sitename : "$sitename Login"; } else { $action='acceptTerms' if (!$fields{'acceptTerms'} and !getAcceptedTerms($db,$memberID)); $showListsAtTop=1 if ($action=~/^((((show|add)(Tips|Results|Standings))|sendResultsEmails)|(show|update)Config)|(select|update|delete)Match$/); if ($action eq 'acceptTerms') { $body=showTerms(1, $clientConfig); } else { my $onlyCompID; ($compCount,$onlyCompID)=getCompCount($db); #GET COMPCOUNT $fields{'compID'}=$onlyCompID if (!(defined($fields{'compID'})) or $fields{'compID'}<1); ($memberCompCount,$memberComp_ref)=getMemberCompCount($db, $memberID); #GET MEMBER COMPCOUNT if ($compCount==1 and $memberCompCount==0) { my ($unused, $alreadyInComp)=updateRegisterComp($db,$fields{'compID'},$memberID); if (!$alreadyInComp) { ($roundID, $roundOrder) = getLatestRound($db, $fields{'compID'}, $action, $clientConfig); $body.=addNewMemberTips($db, $memberID, $fields{'compID'}, $clientConfig); } ($memberCompCount,$memberComp_ref)=getMemberCompCount($db, $memberID); } #ACTION REQUIRES COMP REGISTRATION -> set compID to valid or action to showStandings if (!($action=~/^(((update|join|select|show|delete)Group)|html|(welcome|(select|update)RegisterComp|show(Standings|Member|Team)|showTerms|(show|update)Config))|(show|add)(Tips|Results)|(add|update|delete)Comp$/) and (!$memberComp_ref->{$fields{'compID'}})) { if ($memberCompCount>=1) { foreach my $key (keys %$memberComp_ref) {$fields{'compID'}=$key} } else { $action='showStandings'; } } $compName=getCompName($db, $fields{'compID'}); ($memberName,$memberEmail,undef,$displayName)=getMemberDetails($db, $memberID, $clientConfig); $isAdmin= getMemberIsAdmin($db,$memberID); if (!$roundID) { ($roundID, $roundOrder) = ($fields{'compID'}) ? getLatestRound($db, $fields{'compID'}, $action, $clientConfig) : (0,0); } else { $roundOrder=getRoundOrder($db, $roundID); } $fields{'roundID'}=$roundID; #SEND RESULTS EMAIL if ($isAdmin and $action eq 'sendResultsEmails') { sendResultsEmails($db, $fields{'compID'}, $roundID, $clientConfig); $action='showResults'; } $action=$invalidPrivAction if (!$isAdmin and $actionIsAdmin); $topMenu.= addHeader($action, $memberID, $isAdmin, \%fields, $adminEditActions, $compCount, $memberCompCount, $clientConfig); if ($compCount>1 and (($action=~/^(add|show)(Results|Tips)$/))) { $showBox=0; $sideLists.= addCompHeader($db, $memberComp_ref, $fields{'compID'}, $action, $clientConfig, ($showListsAtTop and $sideLists),$showListsAtTop, $showBox) } if ($action eq 'showStandings') { if (defined($fields{'compOrGroup'}) and $fields{'compOrGroup'} eq 'c') {$fields{'groupID'}=-1}; if ($compCount<2) { my $showBox=0; my ($tempBody, $tempGroupName)=addGroupHeader($db, $memberID, $fields{'compID'}, $fields{'groupID'} || 0, $isAdmin, $action, $clientConfig,($showListsAtTop and $sideLists),$showListsAtTop, $showBox); $sideLists.=$tempBody; $groupName=$tempGroupName; } else { my $tempGroupID; ($sideLists, $groupName, $tempGroupID)=addCompAndGroupHeader($db, $memberID, $fields{'compID'}, $fields{'groupID'} || 0, $isAdmin, $clientConfig, $fields{'CorG'} || 'c'); $fields{'groupID'}=$tempGroupID if (defined($fields{'CorG'}) and $fields{'CorG'} eq 'g'); } } if ($action=~/^((add|show)(Results|Tips|RoundTips))|((delete|select|update)Match)$/) { my $showBox=0; $showListsAtTop=1 if ($action eq 'showRoundTips'); my ($tempBody,$tempRoundOrder,$tempRoundDesc,$tempRoundCount)=addRoundHeader($db,\%fields,$action,$roundID,$clientConfig,($showListsAtTop and $sideLists),$showListsAtTop, $fields{'groupID'}, $showBox); $sideLists.=$tempBody; $currentRoundOrder=$tempRoundOrder; $roundDesc=$tempRoundDesc; $roundCount=$tempRoundCount; } elsif ($action=~/^(add|edit)Match$/) { $roundDesc.=getRoundDesc($db, $fields{'matchID'}); } } } ###PERFORM ANY DB UPDATES #MY DETAILS UPDATE if ($action=~/^updateConfig$/) { my ($tempbody, $tempcookieheader)=updateConfig($db, \%fields, $memberID, $clientConfig, $memberComp_ref); $body.=$tempbody; $cookieheader=$tempcookieheader if ($tempcookieheader); } #EMAILS UPDATE $body.=updateEmail($db, $memberID, \%fields, $memberComp_ref) if ($action eq 'updateEmail'); #RESULTS UPDATE if ($action eq "addResults") { addResults($db, \%fields, $clientConfig); $body.=qq[Results Submitted Successfully. Standings Updated.
]; } #TIP UPDATE if ($action eq "addTips") { addTips($db, \%fields,$memberID); $body.=qq[Tips Submitted Successfully
]; } #ADMIN INSERT my $newID=0; if ($action=~/^add($editEntities)$/) { my ($v1,$v2) = addEntity($db,\%fields,$action,$memberID); $body.=$v1; $newID=$v2; $action='failedInsert' if (!$newID); } #ADMIN DELETE $body.=deleteComp($db,\%fields, $clientConfig) if ($action eq "deleteComp"); $body.=deleteMatch($db,\%fields, $clientConfig) if ($action eq "deleteMatch"); $body.=deleteVenue($db,\%fields, $clientConfig) if ($action eq "deleteVenue"); $body.=deleteRound($db,\%fields, $clientConfig) if ($action eq "deleteRound"); $body.=deleteTeam($db,\%fields, $clientConfig) if ($action eq "deleteTeam"); #ADMIN UPDATE if ($action=~/^update($editEntities)$/) { my ($v1, $v2)=updateEntity($db, \%fields,$action); $body.=$v1; my $updateSuccess=$v2; if ($updateSuccess) { $action=~ s/update/select/g; } else { $action=~ s/update/edit/g; $sideLists=''; } $fields{'postback'}=(!$updateSuccess); } ###SHOW RELEVANT PAGE #ADMIN ACTIONS - SET HEADER, "Admin Home" Link if ($action=~/^$adminEditActions$/) { $body.=qq[Admin Home