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

] if ($action ne 'selectComp'); $h1Header='Admin'; $h1Header.=' - Viewing' if ($action=~/^(select|update)/); $h1Header.=' - Editing' if ($action=~/^(add|edit)/); $h1Header.=' Round' if ($action=~/Round$/); $h1Header.=' Match' if ($action=~/Match$/); $h1Header.=' Competition' if ($action=~/Comp$/); $h1Header.=' Venue' if ($action=~/Venue$/); $h1Header.=' Team' if ($action=~/Team$/); $h1Header.='e' if ($action=~/(select|update)Match/); $h1Header.='s' if ($action=~/^(select|update)/); my $compVerb=' in '; if ($action=~/Match$/ and ($roundDesc ne ' ')) { $h1Header.=" in $roundDesc"; $compVerb=' of '; } $h1Header.=$compVerb.$memberComp_ref->{$fields{'compID'}} if (not($action=~/(Venue|Comp)$/)); }; #REJECT GROUP INVITATION if ($action eq 'rejectGroupInvite') { #my ($fields$groupid, $email, $memberid, $db) = @_; $body.=rejectGroupInvite($fields{'groupID'}, $memberEmail, $memberID, $db); $action='welcome'; } #REQUEST TO JOIN GROUP if ($action eq 'requestJoinGroup') { $body.= requestJoinGroup ($db, $fields{'groupID'}, $memberID, $memberEmail, $displayName, $clientConfig); $action='welcome'; } #PAGE FROM HTML FILE if ($action eq 'html') { $fields{'f'}=~s/\W//g; $body.=getFile($clientConfig, $fields{'f'},$clientConfig->getConfig('clientID')); } #PROCESS NEW LOGIN if ($action=~/^welcome$/) { my $memberCompCount=getOrAddMemberComps ($db, \%fields,$memberID); $body.=showInstructions($db, \%fields,$isAdmin,($action eq "updateWelcome"),$memberEmail,$compCount,$memberCompCount, $memberID, $clientConfig); $h1Header="Welcome to $sitename"; } #SHOW CONFIG if ($action=~/^(show|update)Config$/) { $body.=showConfig(\%fields,$memberEmail, $clientConfig, $memberComp_ref, $db, $compCount, $memberID); $h1Header='My Details'; } #SHOW EMAIL if ($action=~/^(show|update)Email$/) { $body.=showEmail($db, $clientConfig, $memberComp_ref, $memberID); $h1Header='Email Registration'; } #SHOW ADMIN "SELECT" SCREEN $body.=generateSelect($db,\%fields,$action,$memberID, $clientConfig, $roundCount) if ($action=~/^(select|delete)($editEntities)$/); #IF SHOWING ADMIN COMPS, SHOW VENUES AS WELL $body.='
' . generateSelect($db,\%fields,'selectVenue',$memberID, $clientConfig, $roundCount) if ($action eq 'selectComp'); #SHOW ADMIN "EDIT" SCREEN $body.=generateEdit($db, \%fields, $action,$newID, $clientConfig) if ($action=~/^(add|edit)($editEntities)$/); #SHOW REGISTER COMP if ($action=~/^(select|update)RegisterComp$/) { $body.=generateRegisterComp($db, $memberComp_ref, $clientConfig); $h1Header="Register to Competition"; } #SHOW RESULTS if ($action=~/^(show|add)Results$/) { $body.=showTips($db,\%fields,$memberID, 'RESULTS',$memberName,$roundID, $clientConfig, $memberComp_ref, $compName); $h1Header="Results for $roundDesc"; } #SHOW TIPS if ($action=~/^(show|add)Tips$/) { $body.=showTips($db, \%fields,$memberID,'TIPS',$memberName, $roundID, $clientConfig, $memberComp_ref, $compName); $h1Header="Tips for $compName"; } #SHOW STANDINGS if ($action eq "showStandings") { $body.=showStandings($db, $memberID, \%fields, $memberComp_ref, $roundOrder, $clientConfig, $compCount, $compName); my $standingsGroupName = $groupName ? "($groupName)": ''; #$h1Header="Standings for $compName $standingsGroupName"; $h1Header="Standings"; $h1Header.=" for $compName" if ($compName and $compCount>1); $showBox=0; my ($tempBody,$tempRoundOrder,$tempRoundDesc)=addRoundHeader($db,\%fields,$action,$roundID,$clientConfig,0,1, $fields{'groupID'},$showBox); $body.='
'.$tempBody; } if ($action eq 'leaveGroup') { $body.=leaveGroup($db, $fields{'groupID'}, $memberID) } if ($action eq 'updateGroup') { my ($tempBody, $success, $newGroupID)=updateGroup($db, $fields{'compID'}, $fields{'groupID'} || 0, $memberID, $fields{'name'} || '', $fields{'password'} || '', $fields{'mInvites'} || 0, $fields{'anyoneView'} || 0, $fields{'postback'} || 0, $clientConfig); $body.=$tempBody; $action=$success ? 'selectGroup' : 'showGroup'; } if ($action eq "sendInviteEmails") { my ($tempBody, $returnStatus)=sendInvites($db, $memberID, $isAdmin, $fields{'compID'},$fields{'groupID'}, \%fields, $clientConfig); $body.=$tempBody; $action = 'inviteMembers' if ($returnStatus==0); $action = 'selectGroup' if ($returnStatus==1); } my $tempJoinGroupBody=''; if ($action=~/(select|delete|leave|join)Group/) { my $joinGroupID= ($action=~/(delete|leave|select)Group/) ? 0 : $fields{'groupID'}; my ($tempBody, $returnStatus) = joinGroup($db, $memberID, $memberEmail, $joinGroupID || 0, $fields{'password'} || '', $fields{'postback'} || 0, $clientConfig); $tempJoinGroupBody.=$tempBody; $action='selectGroup' if ($returnStatus==1); } if ($action eq 'showGroup') { $body.=showGroup($db, $memberID, $fields{'compID'}, $fields{'groupID'} || 0, $isAdmin, \%fields, $clientConfig); $h1Header=$fields{'groupID'} ? 'Edit Group' : 'Create Group'; } if ($action eq 'showGroups') { $body.=showGroups($db); $h1Header='Join Group'; } #SHOW PERSON TIPS if ($action eq "showPersonTips") { my $viewingMember=$fields{'vMemberID'} || $memberID; $body.=showPersonTips($db, $fields{'compID'} || 1, $memberID, $viewingMember, $fields{'topRank'} || 1, $clientConfig, $fields{'roundID'},$fields{'groupID'}, $fields{'CorG'} || 'c'); my ($unusedMemberName, $unusedEmail, $unusedPassword, $standingsName)=getMemberDetails($db, $viewingMember, $clientConfig); $h1Header="$compName - Details for $standingsName"; } #SHOW ROUND TIPS if ($action eq 'showRoundTips') { $body.= roundStats($db, $memberID, \%fields, $fields{'roundID'}, $clientConfig); $h1Header='Round Stats'; } #SHOW TEAM FIXTURE if ($action eq "showTeamFixture") { my ($tempbody,$teamName, $compName)=showTeamDraw($db, $fields{'compID'}, $fields{'teamID'}, $clientConfig); $body.=$tempbody; $h1Header=($compCount==1) ? "Fixture for $teamName" : "$compName - Fixture for $teamName"; } if ($action eq 'deleteGroup') { $body.=deleteGroup($db, $fields{'groupID'} || 0, $memberID, $fields{'compID'}, $isAdmin, $fields{'postback'} || 0, $clientConfig); } #SELECT GROUP if ($action=~/^(select|delete|leave|join)Group$/) { $body.=selectGroup($db, $memberID, $isAdmin, $clientConfig, my $showHomePageView=0); $body.=$tempJoinGroupBody; $h1Header="My Groups"; } #SHOW INVITE TO GROUP if ($action eq "inviteMembers") { my $tempBody; ($tempBody, $h1Header)=inviteMembers($db, $memberID, $isAdmin, $fields{'compID'}, $fields{'groupID'} || 1, \%fields, $clientConfig); $body.=$tempBody; } #SHOW FAQ/TERMS if ($action eq "showTerms") { $body.=showFAQandTerms($clientConfig); $h1Header="$sitename Terms and Conditions"; } print_pageGen($sitename, $topMenu, $h1Header, $body, $sideLists, $showListsAtTop, $cookieheader, $clientConfig); if ($action eq "sendEmail"){sendDailyReminders($db, $clientConfig)} disconnectDB($db); } 1;