number of DOPs to rollover
$dow = 0; //day of week: 0=>Sun ... 6=>Sat
$days = 0;
//$NumDBPlayers = count($Players);
$NumDBPlayers = MyGetPlayerInfo();
$jdStart = CheckForRollover(); //sets $jdStart
CheckForReminder();
//-----------------------
//set max tables for each day
//-----------------------
$jd = $jdStart;
for($d=0; $d<$SUSNoDays; $d++) //for each day of play
{
$k = -1;
while($k < 0) //set max tables for next day of play
{
$dow = jddayofweek($jd,0); //get day of the week
if($SUSDaysUsed[$dow] != 0) //if this is day of play
{
$maxTables[$d] = $SUSMaxTables[$dow]; //set max tables for this day
//$maxTables[$d] = $_SESSION['susmaxtables'][$dow]; //set max tables for this day
$k = 1;
}
$jd++; //try next day
}
}
//--------------------------------------------
//set signup page headings for all DOPs
//--------------------------------------------
for($d=0; $d<$SUSNoDays; $d++)
{
$Headings[$d*2] = $Systemdata['date'][$d];
$Headings[$d*2+1] = $Systemdata['day'][$d];
}
$_SESSION['headings'] = $Headings;
return;
}
//--------------------------------------------------------------------------------
function CheckForRollover() {
//--------------------------------------------------------------------------------
//global $jd;
//global $jdStart;
global $SUSDaysUsed;
global $SUSDaysToSkip;
global $SUSDOPChgHour;
global $SUSNoDays;
global $SUSRemindTime;
global $Players;
global $Status;
global $Systemdata;
//global $maxTables;
$TablesFileName = $_SESSION['path_tables'];
$TablesCsvFileName = $_SESSION['path_tabcsv'];
$PlayersFileName = $_SESSION['path_players'];
$StatusFileName = $_SESSION['path_status'];
$NumDBPlayers = count($Players);
$statLen = $_SESSION['susnostatus'];
$dbjds = 0; //database jdStart
$debug = 0; //controls printing of debug info
$logging = 1; //controls logging
//$jdStart = -1; //julian day for next day of play (DOP)
$daysRollover = 0; //!= 0 => number of DOPs to rollover
$dopChgTime = 0; //time to rollover
$dow = 0; //day of week: 0=>Sun ... 6=>Sat
//-----------------------------------------------
//get julian day number from Systemdata database
//-----------------------------------------------
$jdPlayers = $Systemdata['jdstart'][0];
$jdStart = $jdPlayers;
//-----------------------------
//get today's julian day number
//-----------------------------
$jd = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y"));
$jdToday = $jd;
//------------------------
//return if nothing to do
//------------------------
if($jdPlayers > 0 && $jdToday < $jdPlayers) { return $jdStart; }
//------------------------------------------
//if new or zeroed database set
//fill in the jdstart, date and day name
//in the systemdata table and $Systemdata
//------------------------------------------
if($jdPlayers <= 0) {
$jdStart = MyFillJDStart();
return $jdStart;
}
//---------------------
//find jd for each DOP
//---------------------
$jdDOP = array(); //jd for each DOP
$jdDOPOffset = array(); //jd offset from Today for each DOP
$jd = $jdPlayers;
for($i=0; $i<$SUSNoDays; $i++)
{
$dow = (jddayofweek($jd,0));
$jdDOP[$i] = $jd;
$jdDOPOffset[$i] = $jdDOP[$i] - $jdToday;
if($jdDOPOffset[$i] < 0) { $daysRollover++; }
$jd += $SUSDaysToSkip[$dow];
}
if($logging)
{
$jdDOPstr = "jdDOP: ";
for($i=0; $i<$SUSNoDays; $i++)
{
$jdDOPstr .= "$jdDOP[$i]" . "(" . "$jdDOPOffset[$i]" . ") ";
}
$jdDOPstr .= "\n";
}
//--------------------------------------------
//find jdStart for next day of play
//--------------------------------------------
if($daysRollover >= $SUSNoDays) //if need to rollover entire database
{
$jd= $jdToday;
$jdStart = -1;
while($jdStart < 0) //find jd for next DOP
{
$dow = (jddayofweek($jd,0));
if($SUSDaysUsed[$dow] == 0) { //day not day of play
$jd++;
continue;
}
$jdStart = $jd;
}
} else {
$jdStart = $jdDOP[$daysRollover];
}
$dbjds = $jdStart; //jdStart is jd for next DOP
$rolloverDOW = (jddayofweek($jdStart,0));
if($logging)
{
$str = "jdToday=$jdToday jdStart=$jdStart jdPlayers=$jdPlayers dbjds=$dbjds dow=$dow rolloverDOW=$rolloverDOW";
//WriteToLogFile($str,'data');
}
if($debug) { echo("
jdStart=$jdStart dow=$dow jd=$jd rolloverDOW=$rolloverDOW dbjds=$dbjds"); }
//-------------------------------
//check if rollover is required
//-------------------------------
if($jdDOPOffset[$daysRollover] == 0) //is today the next DOP
{
//-------------------
//check rollover time
//-------------------
//get date/time array
$da = cal_from_jd($jdStart, CAL_GREGORIAN);
//get unix time for rollover
$dopChgTime = mktime($SUSDOPChgHour,0,0,$da['month'],$da['day'],$da['year']);
//get current time
$curTime = time();
if($logging)
{
$mm = $da['month'] ;
$dd = $da['day'];
$yy = $da['year'] ;
$str = "month=$mm day=$dd year=$yy dopChgTime=$dopChgTime curTime=$curTime";
//WriteToLogFile($str,'data');
}
if($debug)
{
echo("
today is next DOP: chghour=$SUSDOPChgHour | dopChgTime=$dopChgTime | time=$curTime
"); print_r($da); } if($curTime >= $dopChgTime) //if past rollover time { //-------------------------------------------- //find new jdStart for next day of play //-------------------------------------------- $jd = $jdStart + 1; $jdStart = -1; while($jdStart < 0) { $dow = (jddayofweek($jd,0)); if($SUSDaysUsed[$dow] == 0) { //day not day of play $jd++; continue; } $jdStart = $jd; } $dbjds = $jdStart; $daysRollover++; //at least one DOP to rollover if($logging) { $str = "Time rollover: NextDOP=> jdStart=$jdStart dbjds=$dbjds"; //WriteToLogFile($str,'data'); } if($debug) { echo("
rollover: curTime=$curTime | dopChgTime=$dopChgTime | new jdStart=$jdStart dbjds=$dbjds"); } } } //--------------------------------- if($daysRollover > $statLen) { $daysRollover = $statLen; } // if move to new day if($daysRollover > 0) { if($debug) { echo("
Perform rollover: daysRollover=$daysRollover statLen=$statLen"); } if($logging) { PruneLogFile(); WriteToLogFile('','header'); WriteToLogFile($jdDOPstr,'data'); $line = "Perform rollover: daysRollover=$daysRollover statLen=$statLen jdStart=$jdStart\n"; WriteToLogFile($line, "data"); } //---------------------------------------- //backup the database before rolling over //---------------------------------------- MyBackupDB($rolloverDOW); $foo = $_SESSION['susname']; if($debug) { echo("
BackupFiles: daysRollover=$daysRollover SUSName=$foo rolloverDOW=$rolloverDOW"); } if($logging) { $line = "BackupFiles: daysRollover=$daysRollover SUSName=$foo rolloverDOW=$rolloverDOW\n"; WriteToLogFile($line, "data"); } //--------------------------- //reset player ptype entries //--------------------------- $rc = MyResetPType(); WriteToLogFile("ResetPType(): $rc resets\n", "data"); //----------------------- //rollover the database //----------------------- for($i=0; $i<$daysRollover; $i++) { if(!is_int($jdStart = MyRollover(0))) { echo "
Rollover:$jdStart"; exit; } //pop the Tables file (tables.ser) if(file_exists($TablesFileName)) { $Tables = unserialize(file_get_contents($TablesFileName)); if($Tables) { ksort($Tables); array_shift($Tables); $Tables[2][0]['table'] = -1; file_put_contents($TablesFileName, serialize($Tables)); } } if($debug) { echo("
PopStatusFile: daysRollover=$daysRollover"); } if($logging) { $line = "PopStatusFile: daysRollover=$daysRollover\n"; WriteToLogFile($line, "data"); //WriteToLogFile("", "blank"); } } //--------------------------------------- //remove the tables csv file (tables.csv) //--------------------------------------- if(file_exists($TablesCsvFileName)) { //fclose($TablesCsvFileName); unlink($TablesCsvFileName); } MyGetPlayerInfo(); //reads player files after writing $SUSRemindTime = abs($SUSRemindTime); //Reset reminder sent status $_SESSION['susremindtime'] = $SUSRemindTime; WriteCfgFile(); //------------------------ //Clean the database //------------------------ /* CleanDB(); //strip_tags() and recalc the high seq values $line = "CleanDB() has finished\n"; WriteToLogFile($line, "data"); */ } return $jdStart; } //-------------------------------------------------------------------------------- function listPids() { //-------------------------------------------------------------------------------- global $Players; $_SESSION['susnoplayers'] = $NumDBPlayers = count($Players); $n=0; $pids = array(); for($p=0; $p<$NumDBPlayers; $p++) { if($Players[$p]['login'] == 'Guest') { continue; } $pids[$n++] = $Players[$p]['pid']; } $nG = $n; for($p=0; $p<$NumDBPlayers; $p++) { if($Players[$p]['login'] != 'Guest') { continue; } $pids[$n++] = $Players[$p]['pid']; } $pids[$n++] = $nG; return $pids; } //-------------------------------------------------------------------------------- function CalcDraw($doTables, $ndxDOP = -1) { //-------------------------------------------------------------------------------- //WriteToLogFile("\nCalcDraw($doTables)","data"); //echo "
CalcDraw: doTables = $doTables ndxDOP = $ndxDOP"; global $SUSMaxGames; global $SUSMaxTables; global $SUSDaysUsed; global $SUSDaysToSkip; global $SUSNumPPG; //Number players per game global $SUSSubEqReg; global $SUSNoDays; global $SUSAllowHalfGames; global $SUSNotifyOnOff; global $Players; global $Status; global $Systemdata; global $maxTables; //max tables for each day of play global $calcCnt; //update player files //writePlayerFiles($_SESSION['susdbname']); $_SESSION['susnoplayers'] = $NumDBPlayers = count($Players); //arrays of available player info $sortPid = array(); //player pid $sortSeq = array(); //player signup sequence $sortType = array(); //player type $sortUsed = array(); //player already used in draw $sortAvg = array(); //player pair's master pt avg $tableTeam = array(); //pids of team partners //'pid1','pid2','posn','seq','mpavg' $GamesPerDay = array(); $nTeam = 0; //number of teams $nATDays = $_SESSION['numtabledays']; //number of days to assign tables //general variables $table = array(); //holding queue to make a table $nT = 0; //number of tables $ppt = 4; //players per table $p = 0; //index into Players array $s = 0; //index into Status array $n = 0; //index into sort arrays $nQ = 0; //number in holding queue $nA = 0; //number in available players //---------------------------------------------------------- //---------------------------- //set max tables for each day //---------------------------- $jd = $Systemdata['jdstart'][0]; for($d=0; $d<$SUSNoDays; $d++) //for each day of play { $k = -1; while($k < 0) //set max tables for next day of play { $dow = jddayofweek($jd,0); //get day of the week if($SUSDaysUsed[$dow] != 0) //if this is day of play { $maxTables[$d] = $SUSMaxTables[$dow]; //set max tables for this day $k = 1; } $jd++; //try next day } } //----------------------- //set status for each day //----------------------- for($d=0; $d<$SUSNoDays; $d++) { $GamesPerDay[$d] = 0; $sortPid = array(); //player pid $sortSeq = array(); //player signup sequence $sortType = array(); //player type $sortUsed = array(); //player already used in draw $sortAvg = array(); //player pair's master pt avg $table = array(); //holding queue to make a table $nTeam = 0; //number of teams $tableTeam = array(); //pids of team partners //'pid1','pid2','posn','seq','mpavg' $n = 0; $nT = 0; //-------------------------------------------- //build arrays of available player information //-------------------------------------------- for($s=0; $s<$NumDBPlayers; $s++) { $status = $Status[$s][$d]['status']; if($status == 'A' || $status == 'P') { $Status[$s][$d]['prevstatus'] = $status; $Status[$s][$d]['status'] = 'A'; $chgpid = $Status[$s][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; $sortUsed[$n] = 0; $sortSeq[$n] = $Status[$s][$d]['seq']; $sortPid[$n] = $Status[$s][$d]['pid']; $p = PlayerIndex($sortPid[$n]); if($d == 0) //account for cutoff ptype { $sortType[$n] = $Players[$p]['ptype']; } else { $sortType[$n] = $Players[$p]['ptype'] & 1; } $n++; } } $nA = $n; if($nA == 0) { continue; } //loop if no available players //------------------------------------- //sort arrays into signup sequence order //------------------------------------- array_multisort($sortSeq, SORT_NUMERIC, SORT_ASC, $sortPid, $sortType); if($SUSSubEqReg == 0) { //array_multisort($sortType, SORT_NUMERIC, SORT_ASC, $sortPid, $sortSeq); //array_multisort is not a stable sort so have to do the following $acnt = count($sortType); $regs_0 = array(); //indexs for regulars $iregs_0 = 0; $regs_10 = array(); //indexs for regulars on waiting list $iregs_10 = 0; $subs_1 = array(); //indexs for subs $isubs_1 = 0; $subs_11 = array(); //indexs for subs on waiting list $isubs_11 = 0; for($i=0; $i<$acnt; $i++) //separate regulars and subs //and sort by player type { switch($sortType[$i]) { case 0: //regular $regs_0[$iregs_0] = $i; $iregs_0++; break; case 10: //regular on waiting list $regs_10[$iregs_10] = $i; $iregs_10++; break; case 1: //sub $subs_1[$isubs_1] = $i; $isubs_1++; break; case 11: //sub on waiting list $subs_11[$isubs_11] = $i; $isubs_11++; break; } } $tempSeq = array(); $tempPid = array(); $tempType = array(); $j = 0; for($i=0; $i<$iregs_0; $i++) //regulars { $tempSeq[$j] = $sortSeq[$regs_0[$i]]; $tempPid[$j] = $sortPid[$regs_0[$i]]; $tempType[$j] = $sortType[$regs_0[$i]]; $j++; } for($i=0; $i<$isubs_1; $i++) //subs { $tempSeq[$j] = $sortSeq[$subs_1[$i]]; $tempPid[$j] = $sortPid[$subs_1[$i]]; $tempType[$j] = $sortType[$subs_1[$i]]; $j++; } for($i=0; $i<$iregs_10; $i++) //regulars on waiting list { $tempSeq[$j] = $sortSeq[$regs_10[$i]]; $tempPid[$j] = $sortPid[$regs_10[$i]]; $tempType[$j] = $sortType[$regs_10[$i]]; $j++; } for($i=0; $i<$isubs_11; $i++) //subs on waiting list { $tempSeq[$j] = $sortSeq[$subs_11[$i]]; $tempPid[$j] = $sortPid[$subs_11[$i]]; $tempType[$j] = $sortType[$subs_11[$i]]; $j++; } for($i=0; $i<$acnt; $i++) //put sorted values back in sort arrays { $sortSeq[$i] = $tempSeq[$i]; $sortPid[$i] = $tempPid[$i]; $sortType[$i] = $tempType[$i]; } } //-------------------------- //set status in Status array //-------------------------- $nQ = 0; $n = 0; while($n<$nA) { if($sortUsed[$n] == 0) { $table[$nQ] = $sortPid[$n]; //add next player to table $sortUsed[$n] = 1; //show player used $s = StatusIndex($sortPid[$n]); //index to players status info $pp = $Status[$s][$d]['partner']; //player's partner if($pp != 0) //if player has a partner { //find player's partner $i = -1; for($j=$n+1; $j<$nA; $j++) { if($sortPid[$j] == $pp && $sortUsed[$j] == 0) { $i = $j; //index of player's partner break; } } } else { //player has no partner //find a partner for the player $i = -1; for($j=$n+1; $j<$nA; $j++) { $s = StatusIndex($sortPid[$j]); //index to players status info $pp = $Status[$s][$d]['partner']; //player's partner if($pp == 0 && $sortUsed[$j] == 0) //if player has no partner { $i = $j; //index of player's partner break; } } } if($i >= 0) //if found a partner { //add both to teams table $tableTeam[$nTeam]['pid1'] = $table[$nQ]; $tableTeam[$nTeam]['pid2'] = $sortPid[$i]; $s = StatusIndex($table[$nQ]); //index to players status info $tableTeam[$nTeam]['posn'] = $Status[$s][$d]['posn']; $tableTeam[$nTeam]['seq'] = $Status[$s][$d]['seq']; if($_SESSION['nmplevels'] > 0) { $ndx = PlayerIndex($table[$nQ]); $avg = $Players[$ndx]['masterpts']; $ndx = PlayerIndex($sortPid[$i]); $avg += $Players[$ndx]['masterpts']; $tableTeam[$nTeam]['mpavg'] = $avg/2; } else { $tableTeam[$nTeam]['mpavg'] = 0; } $nTeam++; //add both to table $nQ++; //add player $table[$nQ] = $sortPid[$i]; //add partner $sortUsed[$i] = 1; //show partner used $nQ++; //add partner } //------------------- //update Status array //------------------- if($nQ == $ppt) { for($i=0; $i<$ppt; $i++) { $s = StatusIndex($table[$i]); //index to players status info //$Status[$s][$d]['prevstatus'] = $Status[$s][$d]['status']; $Status[$s][$d]['status'] = 'P'; $chgpid = $Status[$s][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; } $nQ = 0; $nT++; } } //if player not already used //if($SUSMaxGames > 0 && $nT >= $SUSMaxGames) break; if($maxTables[$d] > 0 && $nT >= $maxTables[$d]) { break; } $n++; } //for each available player if($SUSAllowHalfGames != 0) { if($nQ == 2) { for($i=0; $i<2; $i++) { $s = StatusIndex($table[$i]); //index to players status info //$Status[$s][$d]['prevstatus'] = $Status[$s][$d]['status']; $Status[$s][$d]['status'] = 'P'; $chgpid = $Status[$s][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; } $nQ = 0; $nT++; } } $GamesPerDay[$d] = $nT; //-------------------------------------------- //assign tables and abort if only doing tables //-------------------------------------------- if($d < $nATDays && $doTables != 0) { if($ndxDOP < 0 || ($ndxDOP >= 0 && $ndxDOP == $d)) { if( $nTeam > 0) { $sortAvg = array(); for($i=0; $i<$nTeam; $i++) { $sortAvg[$i] = $tableTeam[$i]['mpavg']; } array_multisort($sortAvg, SORT_NUMERIC, SORT_DESC, $tableTeam); AssignTables($d, $nTeam, $tableTeam); } } } } //for each day //------------------------------- //clean up status for 'A' players //------------------------------- for($s=0; $s<$NumDBPlayers; $s++) { for($d=0; $d<$SUSNoDays; $d++) { if($Status[$s][$d]['status'] == 'A') { $Status[$s][$d]['table'] = 0; $Status[$s][$d]['tableposn'] = 0; $chgpid = $Status[$s][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; } } } //------------------------------------ //Send Notifications and update ptype //------------------------------------ $cnt = 0; for($s=0; $s<$NumDBPlayers; $s++) { $pid = $Players[$s]['pid']; $pNdx = PlayerIndex($pid); $statusNdx = StatusIndex($pid); $flag = 0; $PStat = $Status[$statusNdx][0]['prevstatus']; $CStat = $Status[$statusNdx][0]['status']; if($CStat === 'P') //if is playing now then { //reset any residual cutoff ptype if($Players[$pNdx]['ptype'] == 10) { $Players[$pNdx]['ptype'] = 0; $flag++;} if($Players[$pNdx]['ptype'] == 11) { $Players[$pNdx]['ptype'] = 1; $flag++;} if($flag > 0) { $ptype = $Players[$pNdx]['ptype']; MyUpdatePType($pid, $ptype); $flag = 0; } } if($PStat != $CStat) { if($PStat === 'P') //if was playing and not now { SendNotifications($pid, 0); //send not playing notice $Status[$statusNdx][0]['prevstatus'] = $Status[$statusNdx][0]['status']; $chgpid = $Status[$statusNdx][0]['pid']; $_SESSION['changed_pids'][] = $chgpid; $cnt++; } elseif($CStat === 'P') //if was not playing then is now { SendNotifications($pid, 1); //send playing notice $Status[$statusNdx][0]['prevstatus'] = $Status[$statusNdx][0]['status']; $chgpid = $Status[$statusNdx][0]['pid']; $_SESSION['changed_pids'][] = $chgpid; $cnt++; } } } $rc = MyUpdateStatus(); $_SESSION['gamesperday'] = $GamesPerDay; return 0; } //-------------------------------------------------------------------------------- function AssignTables($ndxDOP, $nTeam, $tableTeam) { // $ndxDOP = day index // $nTeam = Number of teams // $tableTeam = See DBIndexGlobals.txt in includes for description //-------------------------------------------------------------------------------- //WriteToLogFile("\nAssignTables($nTeam, $tableTeam)","data"); //echo "
AssignTables: ndxDOP = $ndxDOP nTeam = $nTeam"; //print_r($tableTeam); global $Players; global $Status; global $Systemdata; global $SUSNoDays; global $SUSTitle; global $SUSAllowHalfGames; global $Headings; global $maxTables; //max tables for each day of play $TablesFileName = $_SESSION['path_tables']; if(file_exists($TablesFileName) === FALSE) { $Tables = array(); $nATDays = $_SESSION['numtabledays']; for($i=0; $i<$nATDays; $i++) $Tables[$i][0]['table'] = -1; $rc = file_put_contents($TablesFileName, serialize($Tables)); if($rc === FALSE) { echo("
Cannot initialize $TablesFileName"); } } else { $Tables = unserialize(file_get_contents($TablesFileName)); if($Tables === FALSE) { $Tables = array(); $nATDays = $_SESSION['numtabledays']; for($i=0; $i<$nATDays; $i++) $Tables[$i][0]['table'] = -1; } else { unset($Tables[$ndxDOP]); $Tables[$ndxDOP][0]['table'] = -1; } } $NumDBPlayers = count($Players); $tableTeam[] = array(); //pids of team partners //each[i] has 'pid1','pid2','posn','seq','mpavg' $d = 0; $d = $ndxDOP; $nTables = intval($nTeam / 2); //number of tables $nHalfTables = $nTeam % 2; //Number of half teams $nTT = $nTables + $nHalfTables; //number of total tables //$foo = $maxTables[$ndxDOP]; //echo "
ndxDOP=$ndxDOP | Play=$NumDBPlayers | maxTables=$foo | nTeam=$nTeam | nTables=$nTables | nHalfTables=$nHalfTables | nTT=$nTT"; $_SESSION['tablesfull'][$ndxDOP] = 0; if($nHalfTables == 0 && $nTables >= $maxTables[$ndxDOP]) { $_SESSION['tablesfull'][$ndxDOP] = 1; } $nt = 0; //current index into $table $table[] = array(); //table assignments [table][0=>NS 1=>EW] //ndx into $tableTeam $nNS = 0; //number of teams requesting NS $teamNS = array(); //NS pairs from $tableTeam $nEW = 0; //number of teams requesting EW $teamEW = array(); //EW pairs from $tableTeam $nDC = 0; //number of teams requesting DC $teamDC = array(); //DC pairs from $tableTeam //----------------------------- //init $table array to no teams //----------------------------- for($t=0; $t<$nTT; $t++) { $table[$t][0] = -1; $table[$t][1] = -1; } //------------------------------------------------ //if only one player pair then don't assign tables //------------------------------------------------ if($nTables <= 0) { return; } //------------------------------------------------ //count each position request and save index to it //------------------------------------------------ for($t=0; $t<$nTeam; $t++) { switch($tableTeam[$t]['posn']) { case 0: //Don't Care (DC) $teamDC[$nDC++] = $tableTeam[$t]; break; case 1: //NS requested $teamNS[$nNS++] = $tableTeam[$t]; break; case 2: //EW requested $teamEW[$nEW++] = $tableTeam[$t]; break; } } /* if($ndxDOP == 0) { echo("
\$tableTeam"); print_r($tableTeam); echo("
\$teamNS"); print_r($teamNS); echo("
\$teamEW"); print_r($teamEW); echo("
\$teamDC"); print_r($teamDC); echo("
----------------------------------------------------------------"); } */ //------------------------------------------ //populate NS/EW directions to form tables //------------------------------------------ $moving = 1; while($moving > 0) { if($nNS > $nEW) //if there are more NS than EW { if($nDC > 0) { //if there are DCs available //move DC -> EW $teamEW[$nEW++] = $teamDC[0]; unset($teamDC[0]); $teamDC = array_values($teamDC); $nDC = count($teamDC); } elseif(($nNS-$nEW) > 1) { //if there are extra NSs //move NS -> EW $teamEW[$nEW++] = $teamNS[0]; unset($teamNS[0]); $teamNS = array_values($teamNS); $nNS = count($teamNS); } else { $moving = 0; } } elseif($nEW > $nNS) //if there are more EW than NS { if($nDC > 0) { //if there are DCs available //move DC -> NS $teamNS[$nNS++] = $teamDC[0]; unset($teamDC[0]); $teamDC = array_values($teamDC); $nDC = count($teamDC); } elseif(($nEW-$nNS) > 1) { //if there are extra EWs //move EW -> NS $teamNS[$nNS++] = $teamEW[0]; unset($teamEW[0]); $teamEW = array_values($teamEW); $nEW = count($teamEW); } else { $moving = 0; } } else { //if NS == EW if($nDC > 0) { //if there are DCs available //move DC -> NS $teamNS[$nNS++] = $teamDC[0]; unset($teamDC[0]); $teamDC = array_values($teamDC); $nDC = count($teamDC); } else { $moving = 0; } } } //------------------------------------------ //sort NS/EW directions to match players //------------------------------------------ //-------- //sort NS //-------- $sortAvg = array(); for($i=0; $i<$nNS; $i++) { $sortAvg[$i] = $teamNS[$i]['mpavg']; } array_multisort($sortAvg, SORT_NUMERIC, SORT_DESC, $teamNS); //echo "
teamNS"; //print_r($teamNS); //-------- //sort EW //-------- $sortAvg = array(); for($i=0; $i<$nEW; $i++) { $sortAvg[$i] = $teamEW[$i]['mpavg']; } array_multisort($sortAvg, SORT_NUMERIC, SORT_DESC, $teamEW); //echo "
teamEW"; //print_r($teamEW); //----------------------------------- //update the players status database //and create $Tables file //----------------------------------- for($t=0; $t<$nTT; $t++) { $Tables[$ndxDOP][$t]['table'] = $t+1; if($t < $nNS) { $pid1ns=$teamNS[$t]['pid1']; $ndxS = StatusIndex($pid1ns); $Status[$ndxS][$d]['table'] = $t+1; $Status[$ndxS][$d]['tableposn'] = 1; $chgpid = $Status[$ndxS][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; $pid2ns=$teamNS[$t]['pid2']; $ndxS = StatusIndex($pid2ns); $Status[$ndxS][$d]['table'] = $t+1; $Status[$ndxS][$d]['tableposn'] = 1; $chgpid = $Status[$ndxS][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; //make $Tables entry $Tables[$ndxDOP][$t]['pid1ns'] = $pid1ns; $Tables[$ndxDOP][$t]['pid2ns'] = $pid2ns; $Tables[$ndxDOP][$t]['partns'] = ($Status[$ndxS][$d]['partner'] != 0) ? 1 : 0; $Tables[$ndxDOP][$t]['mpavgns'] = intval($teamNS[$t]['mpavg']); } if($t <= $nTables) { if($t < $nEW) { $pid1ew=$teamEW[$t]['pid1']; $ndxS = StatusIndex($pid1ew); $Status[$ndxS][$d]['table'] = $t+1; $Status[$ndxS][$d]['tableposn'] = 2; $chgpid = $Status[$ndxS][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; $pid2ew=$teamEW[$t]['pid2']; $ndxS = StatusIndex($pid2ew); $Status[$ndxS][$d]['table'] = $t+1; $Status[$ndxS][$d]['tableposn'] = 2; $chgpid = $Status[$ndxS][$d]['pid']; $_SESSION['changed_pids'][] = $chgpid; //make $Tables entry $Tables[$ndxDOP][$t]['pid1ew'] = $pid1ew; $Tables[$ndxDOP][$t]['pid2ew'] = $pid2ew; $Tables[$ndxDOP][$t]['partew'] = ($Status[$ndxS][$d]['partner'] != 0) ? 1 : 0; $Tables[$ndxDOP][$t]['mpavgew'] = intval($teamEW[$t]['mpavg']); } } else { $Tables[$ndxDOP][$t]['pid1ew'] = -1; $Tables[$ndxDOP][$t]['pid2ew'] = -1; $Tables[$ndxDOP][$t]['partew'] = 0; $Tables[$ndxDOP][$t]['mpavgew'] = 0; } } $rc = file_put_contents($TablesFileName, serialize($Tables)); if($rc === FALSE) { echo("
Cannot write $TablesFileName"); } /* if($ndxDOP == 0) { $foo = count($Tables[$ndxDOP]); echo "
ndxDOP = $ndxDOP nT = $foo
"; echo ""; print_r($Tables[$ndxDOP]); echo "
"; } */ /* $cnt = count($Tables); echo("
nTables=$cnt"); print_r($Tables); print_r($tableTeam); exit; */ } //-------------------------------------------------------------------------------- function CheckNotifyTime() { //-------------------------------------------------------------------------------- global $SUSNotifyTime; global $SUSDOPChgHour; global $Systemdata; if($SUSNotifyTime <= 0) { return 1; } //----------------------------------------------- //get julian day number from Systemdata database //----------------------------------------------- $jdPlayers = $Systemdata['jdstart'][0]; if($jdPlayers <= 0) { return 0; } //----------------------------- //get today's julian day number //----------------------------- $jd = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y")); $jdToday = $jd; //------------------------ //return if today not DOP //------------------------ if($jdToday != $jdPlayers) { return 0; } //------------------------ //return if today blocked //------------------------ if($Systemdata['signupblock'][0] != 0) { return 0; } //------------------- //check notify time //------------------- //get date/time array $da = cal_from_jd($jdPlayers, CAL_GREGORIAN); //get unix time for notify $nt = $SUSDOPChgHour - $SUSNotifyTime; $notifyTime = mktime($nt,0,0,$da['month'],$da['day'],$da['year']); //get current time $curTime = time(); if($curTime >= $notifyTime) //if past notify time { return 1; } return 0; } //-------------------------------------------------------------------------------- function SendNotifications($pid, $type) { //-------------------------------------------------------------------------------- global $SUSNoDays; global $SUSTitle; global $SUSAdminEmail; global $SUSNotifyAdmin; global $SUSNotifyOnOff; global $Headings; global $Players; global $Status; global $Systemdata; $flname = array(); if($SUSNotifyOnOff <= 0) { return; } $playerNdx = PlayerIndex($pid); $flname = MakeFLName($Players[$playerNdx]['name']); //send the admins an email if($SUSNotifyAdmin != 0 && strlen($SUSAdminEmail) > 0) { if(CheckNotifyTime() != 0) { $toAddr = $SUSAdminEmail; //$fromAddr = "postmaster@bridgesignup.com"; $fromAddr = "no-reply@bridgesignup.com"; $msgTitle = "Notification from $SUSTitle"; $stat = ($type == 0) ? '"Not Playing"' : '"Playing"'; $msgBody = "$flname: Playing status changed to $stat."; SendSMTPMail($toAddr, $fromAddr, $msgTitle, $msgBody, ""); //echo "
SendNotifications: $toAddr, $fromAddr, $msgTitle, $msgBody"; } } if($Players[$playerNdx]['login'] == 'Guest' || $Players[$playerNdx]['notify'] == 0) { return; } $date = $_SESSION['headings'][0]; $toAddr = $Players[$playerNdx]['email']; //$fromAddr = "postmaster@bridgesignup.com"; $fromAddr = "no-reply@bridgesignup.com"; $msgTitle = "Notification from $SUSTitle"; $msgBody = "$flname, \n"; if($type == 0) { $msgBody .= "Your playing status for the next game on $date has changed to \"Not Playing\"."; } else { $msgBody .= "Your playing status for the next game on $date has changed to \"Playing\"."; } $msgFlag = 1; SendSMTPMail($toAddr, $fromAddr, $msgTitle, $msgBody, ""); //echo "
SendNotifications: $toAddr, $fromAddr, $msgTitle, $msgBody"; return; } //-------------------------------------------------------------------------------- //==============PHP End ======================================================== ?>