// primary o secondary (secco) $where = "Team1.CTEventCode IN(" . join(",", $Events) . ") AND Team2.CTEventCode=Team1.CTEventCode " . "AND CTG.CTGRound IN(" . join(",", $Round) . ") " . "AND Team1.CTPhase = " . $Phase . " " . "AND TeamScore1.CTSPrimary = " . $Primary . " "; $limit = $PartiDa . "," . $Righe; $Rs = sql_getMatchesPhase1($where, $limit); /* $limit= $PartiDa . "," . $Righe; $Events='OLMT'; $Round=1; $Phase=1; $Primary=1; $Rs=getMatchesPhase1($Events,$Round,$Primary,$Phase,"",$limit);*/ $html = ""; $curGroup = 'xxx'; $curEvent = 'xxx'; if ($Rs) { while ($myRow = safe_fetch_assoc($Rs)) { if ($curGroup != $myRow['Group']) { if ($curGroup != 'xxx') { $html .= '</table><br/>' . "\n"; } $html .= '<table>' . "\n"; if ($curEvent != $myRow['EventName']) { $html .= '<tr><th class="Title" colspan="4" style="font-size:25px;">' . $myRow['EventCode'] . ' - ' . $myRow['EventName'] . '<br/>' . '<span style="font-size:12px">(' . ('Ranking Matches ' . $myRow['Round']) . ')</span>' . '</th></tr>' . "\n"; } $html .= '<tr><th colspan="4" style="font-size:20px;">- ' . get_text('Group#', 'Tournament', $myRow['Group']) . ' -</th></tr>' . "\n" . '<tr>' . '<th style="width: 5%;font-size:20px;">' . get_text('Target') . '</th>' . '<th style="width: 75%;font-size:20px;">' . get_text('Country') . '</th>' . '<th style="width: 10%;font-size:20px;">' . get_text('Total') . '</th>' . '<th style="width: 10%;font-size:20px;">Tie</td>' . '</tr>' . "\n"; } ++$PartiDa; for ($i = 1; $i <= 2; ++$i) { $html .= '<tr>' . '<td style="font-size:22px;">' . ($myRow['TargetNo' . $i] != '' ? $myRow['TargetNo' . $i] : ' ') . '</td>' . '<td style="font-size:22px;">' . $myRow['CountryCode' . $i] . ' - ' . ($myRow['CountryName' . $i] != '' ? $myRow['CountryName' . $i] . (intval($myRow['SubTeamCode' . $i]) <= 1 ? '' : ' (' . $myRow['SubTeamCode' . $i] . ')') : ' ') . '</td>' . '<td style=" text-align:right;font-size:22px;">' . $myRow['Score' . $i] . '</td>' . '<td style=" text-align:right;font-size:22px;">' . ($myRow['Tie' . $i] == 1 ? '*' : ($myRow['Tie' . $i] == 2 ? 'Bye' : ' ')) . '</td>' . '</tr>' . "\n"; } $html .= '<tr style="height: 3px;"><td colspan="4"></td></tr>';
function comboFromRs($rs, $valueField, $displayField, $rsType = 0, $selected = null, $noSelEl = null, $id = null, $name = null, $opts = array()) { $out = '<select'; if (!is_null($name)) { $out .= ' name="' . $name . '"'; } if (!is_null($id)) { $out .= ' id="' . $id . '"'; } if (count($opts) > 0) { foreach ($opts as $k => $v) { $out .= ' ' . $k . '="' . $v . '"'; } } $out .= '>'; if (!is_null($noSelEl)) { $out .= '<option value="' . $noSelEl[0] . '">' . $noSelEl[1] . '</option>' . "\n"; } while ($myRow = $rsType == 0 ? safe_fetch_assoc($rs) : current($rs)) { $v = $myRow[$valueField]; $d = $myRow[$displayField]; $sel = !is_null($selected) && $selected == $v ? ' selected' : ''; $out .= '<option value="' . $v . '"' . $sel . '>' . $d . '</option>' . "\n"; if ($rsType == 1) { next($rs); } } $out .= '</select>' . "\n"; return $out; }
/** * calculate() * * @Override * * (non-PHPdoc) * @see ianseo/Common/Rank/Obj_Rank#calculate() */ public function calculate() { $f = $this->safeFilter(); $filter = $f !== false ? $f : ""; $orderBy = "TeEvent, TeScore DESC, TeGold DESC, TeXnine DESC, CoCode, TeSubTeam "; $q = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tTeTournament,TeCoId,TeSubTeam,CoCode,TeEvent,\r\n\t\t\t\t\tTeScore, TeGold, TeXnine,\r\n\t\t\t\t\tIF(EvFinalFirstPhase=0,9999,IF(EvFinalFirstPhase=48, 104, IF(EvFinalFirstPhase=24, 56, (EvFinalFirstPhase*2)))) AS QualifiedNo,\r\n\t\t\t\t\tTeRank AS ActualRank\r\n\t\t\t\t FROM\r\n\t\t\t\t \tTeams\r\n\t\t\t\t \tINNER JOIN\r\n\t\t\t\t \t\tCountries\r\n\t\t\t\t \tON TeCoId=CoId AND CoTournament=TeTournament\r\n\t\t\t\t \tINNER JOIN\r\n\t\t\t\t \t\tEvents\r\n\t\t\t\t \tON TeEvent=EvCode AND TeTournament=EvTournament AND EvTeamEvent=1\r\n\t\t\t\t WHERE\r\n\t\t\t\t \tTeTournament={$this->tournament} AND TeFinEvent=1 AND TeScore<>'0'\r\n\t\t\t\t \t{$filter}\r\n\t\t\t\t ORDER BY\r\n\t\t\t\t \t{$orderBy}\r\n\t\t\t"; //print $q;exit; $r = safe_r_sql($q); if (!$r) { return false; } if (safe_num_rows($r) > 0) { $curGroup = ""; $myRank = 1; $myPos = 0; $endQualified = false; $myScoreOld = 0; $myGoldOld = 0; $myXNineOld = 0; $myEndScore = -1; $myGroupStartPos = 0; $currentRow = -1; while ($myRow = safe_fetch($r)) { ++$currentRow; if ($curGroup != $myRow->TeEvent) { $curGroup = $myRow->TeEvent; $myRank = 1; $myPos = 0; $myScoreOld = 0; $myGoldOld = 0; $myXNineOld = 0; $endQualified = false; $myGroupStartPos = $currentRow; /* * Carico l'ultimo punteggio per entrare. * Vado a brancare la riga con l'ultimo Score buono */ if (safe_num_rows($r) > $myGroupStartPos + $myRow->QualifiedNo) { safe_data_seek($r, $myGroupStartPos + $myRow->QualifiedNo - 1); $tmpMyRow = safe_fetch($r); if ($curGroup == $tmpMyRow->TeEvent) { $myEndScore = $tmpMyRow->TeScore; $tmpMyRow = safe_fetch($r); //Controllo se c'è parimerito per entrare if ($myEndScore != $tmpMyRow->TeScore || $curGroup != $tmpMyRow->TeEvent) { $myEndScore *= -1; } } else { $myEndScore = -1; } $tmpMyRow = NULL; } else { safe_data_seek($r, safe_num_rows($r) - 1); $tmpMyRow = safe_fetch($r); $myEndScore = -1; } safe_data_seek($r, $myGroupStartPos + 1); } ++$myPos; $so = -1; // Se non ho parimerito il ranking è uguale alla posizione if ($myEndScore == $myRow->TeScore) { if ($myRow->TeScore != $myScoreOld) { $myRank = $myPos; } $so = 1; // rosso } else { if (!($myRow->TeScore == $myScoreOld && $myRow->TeGold == $myGoldOld && $myRow->TeXnine == $myXNineOld)) { $myRank = $myPos; } } if ($myRank > $myRow->QualifiedNo) { $so = 0; } $myScoreOld = $myRow->TeScore; $myGoldOld = $myRow->TeGold; $myXNineOld = $myRow->TeXnine; $x = false; if ($myRow->ActualRank != 0 && array_key_exists('skipExisting', $this->opts) && $this->opts['skipExisting'] == 1) { $x = $this->setRow(array(array('team' => $myRow->TeCoId, 'subteam' => $myRow->TeSubTeam, 'event' => $myRow->TeEvent, 'so' => $so * $myRank))); } else { $x = $this->setRow(array(array('team' => $myRow->TeCoId, 'subteam' => $myRow->TeSubTeam, 'event' => $myRow->TeEvent, 'so' => $so * $myRank, 'rank' => $myRank, 'tiebreak' => ''))); } //print '..'.$x.'<br>'; if ($x === false) { return false; } } } /* * Adesso faccio la stessa cosa che o fatto per la classifica DivClass a partire dalla parte due * limitandomi agli eventi con fase iniziale a zero */ $q = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tTeTournament,TeCoId,TeSubTeam,TeEvent,\r\n\t\t\t\t\tTeScore, TeGold, TeXnine,\r\n\t\t\t\t\tTeRank,\r\n\t\t\t\t\tGROUP_CONCAT(CAST(QuScore AS CHAR(10)) ORDER BY QuScore DESC SEPARATOR '|') AS `_Tupla`\r\n\t\t\t\t FROM\r\n\t\t\t\t \tTeams\r\n\t\t\t\t \tINNER JOIN\r\n\t\t\t\t \t\tCountries\r\n\t\t\t\t \tON TeCoId=CoId AND CoTournament=TeTournament\r\n\t\t\t\t \tINNER JOIN\r\n\t\t\t\t \t\tEvents\r\n\t\t\t\t \tON TeEvent=EvCode AND TeTournament=EvTournament AND EvTeamEvent=1 AND TeFinEvent=1 AND EvFinalFirstPhase=0 \r\n\t\t\t\t \tINNER JOIN\r\n\t\t\t\t\t\tTeamComponent AS tc\r\n\t\t\t\t\tON Teams.TeCoId=tc.TcCoId AND Teams.TeSubTeam=tc.TcSubTeam AND Teams.TeEvent=tc.TcEvent AND Teams.TeTournament=tc.TcTournament AND Teams.TeFinEvent=tc.TcFinEvent\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tEntries\r\n\t\t\t\t\tON TcId=EnId\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tQualifications\r\n\t\t\t\t\tON EnId=QuId\r\n\t\t\t\t WHERE\r\n\t\t\t\t \tTeTournament={$this->tournament} AND TeRank<=3\r\n\t\t\t\t \t{$filter}\r\n\t\t\t\t GROUP BY \r\n\t\t\t\t\tTeTournament, TeCoId, TeSubTeam, TeEvent, TeScore, TeGold, TeXnine\r\n\t\t\t\t ORDER BY\r\n\t\t\t\t \t{$orderBy}\r\n\t\t\t"; //print $q;exit; // debug_svela($tmpChris); $rows = array(); $r = safe_r_sql($q); if ($r && safe_num_rows($r) > 0) { while ($row = safe_fetch_assoc($r)) { $tmp = array(); foreach ($row as $k => $v) { if (substr($k, 0, 1) != '_') { $tmp[$k] = $v; } } // esplodo $parts = explode('|', $row['_Tupla']); $tmp['p1'] = $parts[0]; $tmp['p2'] = $parts[1]; $tmp['p3'] = $parts[2]; $rows[] = $tmp; } } /* * Terza parte: * con array_multisort ordino la struttura precedente sui campi TeEvent ASC,TeRank ASC,p1 DESC,p2 DESC e p3 DESC * in modo da avere i dati ordinati per applicare l'algoritmo standard pos/rank */ $ranks = array(); $p1s = array(); $p2s = array(); $p3s = array(); foreach ($rows as $k => $row) { $ranks[$k] = $row['TeRank']; $p1s[$k] = $row['p1']; $p2s[$k] = $row['p2']; $p3s[$k] = $row['p3']; } // print '<pre>'; // print_r($ranks); // print_r($p1s); // print_r($p2s); // print_r($p3s); // print '</pre>'; array_multisort($ranks, SORT_ASC, $p1s, SORT_DESC, $p2s, SORT_DESC, $p3s, SORT_DESC, $rows); // print '<pre>'; // print_r($rows); // print '</pre>'; // algoritmo rank/pos $rank = 1; $pos = 0; $oldRank = 0; // ocio che qui rank sarebbe lo score quindi questo sarebbe oldScore, NON confondersi con $rank che è quella normale $oldPs = array(-1, -1, -1); $curEvent = ''; foreach ($rows as $k => $v) { if ($v['TeEvent'] != $curEvent) { $rank = 1; $pos = 0; $oldRank = 0; $oldPs = array(-1, -1, -1); $curEvent = ''; $curEvent = $v['TeEvent']; } ++$pos; /* * Una volta che ho assegnato rank=4, tutti quelli dopo saranno rank=4. * Il motivo è il seguente: * qui sto lavorando solo sulle prime 3 posizioni e potrebbe succedere di avere a cavallo del bronzo dei parimeriti. * Se per la tupla non ho parimeriti al terzo posto con chi è a cavallo, chi resta fuori dal podio è quarto pari * perchè se no la sua rank l'avrebbe sistemata la prima parte e qui non sarebbero venuti fuori. * Esempio: ho 5 primi quindi le prime posizioni saranno 1,1,1,1,1,6,.... * La query della seconda parte mi tira fuori tutti gli 1. * Ho pari i primi 2 quindi otterrò 1,1,3,x,x. Le x saranno 3 se c'è il parimerito se no saranno 4 e otterrò giustamente alla fine * 1,1,3,4,4,6,... * */ if ($rank < 4) { if (!($v['TeRank'] == $oldRank && $v['p1'] == $oldPs[0] && $v['p2'] == $oldPs[1] && $v['p3'] == $oldPs[2])) { $rank = $pos; } } // non tocco il timestamp perchè tengo buono quello calcolato prima $q = "\r\n\t\t\t\t\tUPDATE\r\n\t\t\t\t\t\tTeams\r\n\t\t\t\t\tSET\r\n\t\t\t\t\t\tTeRank={$rank}\r\n\t\t\t\t\tWHERE\r\n\t\t\t\t\t\tTeTournament={$this->tournament} AND TeCoId={$v['TeCoId']} AND TeSubTeam={$v['TeSubTeam']} AND\r\n\t\t\t\t\t\tTeFinEvent=1 AND TeEvent='{$v['TeEvent']}'\r\n\r\n\t\t\t\t"; $r = safe_w_sql($q); $oldRank = $v['TeRank']; $oldPs = array($v['p1'], $v['p2'], $v['p3']); } return true; }
/** * calculate() * * @Override * * (non-PHPdoc) * @see ianseo/Common/Rank/Obj_Rank#calculate() */ public function calculate() { $filter = $this->safeFilter(); $orderBy = "TeEvent,TeScore DESC, TeGold DESC, TeXnine DESC "; // Prima parte: come la normale $q = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tToId,TeCoId,TeSubTeam,TeEvent,\r\n\t\t\t\t\tTeScore, TeGold, TeXnine\r\n\t\t\t\tFROM\r\n\t\t\t\t\tTournament\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tTeams\r\n\t\t\t\t\tON ToId=TeTournament AND TeFinEvent=0\r\n\t\t\t\t\tleft JOIN\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\tSELECT CONCAT(DivId, ClId) DivClass, Divisions.*, Classes.*\r\n\t\t\t\t\t\t\tFROM\r\n\t\t\t\t\t\t\t\tDivisions\r\n\t\t\t\t\t\t\t\t\tINNER JOIN Classes\r\n\t\t\t\t\t\t\t\tON DivTournament=ClTournament\r\n\t\t\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\t\tDivAthlete and ClAthlete\r\n\t\t\t\t\t\t) AS DivClass\r\n\t\t\t\t\tON TeEvent=DivClass AND TeTournament=DivTournament\r\n\t\t\t\tWHERE\r\n\t\t\t\t\tToId={$this->tournament} AND\r\n\t\t\t\t\tTeScore<>0\r\n\t\t\t\t\t{$filter}\r\n\t\t\t\tORDER BY\r\n\t\t\t\t\t{$orderBy}\r\n\t\t\t"; //print $q;exit; $r = safe_r_sql($q); if (!$r) { return false; } $myEv = ''; $myTeam = ''; $rank = 1; $pos = 0; $scoreOld = 0; $goldOld = 0; $xNineOld = 0; if (safe_num_rows($r) > 0) { while ($row = safe_fetch($r)) { if ($myEv != $row->TeEvent) { $myEv = $row->TeEvent; $rank = 1; $pos = 0; $scoreOld = 0; $goldOld = 0; $xNineOld = 0; $myTeam = ''; } if ($myTeam != $row->TeCoId) { $myTeam = $row->TeCoId; ++$pos; if (!($row->TeScore == $scoreOld && $row->TeGold == $goldOld && $row->TeXnine == $xNineOld)) { $rank = $pos; } $date = date('Y-m-d H:i:s'); $q = "\r\n\t\t\t\t\t\t\tUPDATE\r\n\t\t\t\t\t\t\t\tTeams\r\n\t\t\t\t\t\t\tSET\r\n\t\t\t\t\t\t\t\tTeRank={$rank},\r\n\t\t\t\t\t\t\t\tTeTimeStamp='{$date}'\r\n\t\t\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\t\tTeTournament={$this->tournament} AND TeCoId={$row->TeCoId} AND TeSubTeam={$row->TeSubTeam} AND\r\n\t\t\t\t\t\t\t\tTeFinEvent=0 AND TeEvent='{$row->TeEvent}'\r\n\r\n\t\t\t\t\t\t"; safe_w_sql($q); } $scoreOld = $row->TeScore; $goldOld = $row->TeGold; $xNineOld = $row->TeXnine; } } /* * Seconda parte: * dalla rank calcolata prima tiro fuori le prime tre posizioni per poter risolvere con la regola della tupla. * Dato che non posso fare un order by sulla tupla (perchè se il migliore di uno è 987 e l'altro 1239, verrebbe fuori che * 987 è prima di 1239 dato che la stringa 987 è prima di 1239) tiro fuori le righe e le sbatto in un array esplodendo * le tuple in tre elementi del record così poi ordino da lì. */ $q = "\r\n\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tToId,TeCoId,TeSubTeam,TeEvent,TeFinEvent,TeScore,TeHits,TeGold,TeXnine,TeRank,\r\n\t\t\t\t\tGROUP_CONCAT(CAST(QuScore AS CHAR(10)) ORDER BY QuScore DESC SEPARATOR '|') AS `_Tupla`\r\n\t\t\t\tFROM\r\n\t\t\t\t\tTournament\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tTeams\r\n\t\t\t\t\tON ToId=TeTournament AND TeFinEvent=0\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tTeamComponent\r\n\t\t\t\t\tON TeCoId=TcCoId AND TeSubTeam=TcSubTeam AND TeEvent=TcEvent AND TeTournament=TcTournament AND TeFinEvent=TcFinEvent\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\tQualifications\r\n\t\t\t\t\tON TcId=QuId\r\n\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\tSELECT CONCAT(DivId, ClId) DivClass, Divisions.*, Classes.*\r\n\t\t\t\t\t\t\tFROM\r\n\t\t\t\t\t\t\t\tDivisions\r\n\t\t\t\t\t\t\t\t\tINNER JOIN Classes\r\n\t\t\t\t\t\t\t\tON DivTournament=ClTournament\r\n\t\t\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\t\tDivAthlete and ClAthlete\r\n\t\t\t\t\t\t) AS DivClass\r\n\t\t\t\t\tON TeEvent=DivClass AND TeTournament=DivTournament\r\n\t\t\t\tWHERE\r\n\t\t\t\t\tToId={$this->tournament} AND\r\n\t\t\t\t\tTeRank<=3\r\n\t\t\t\t\t{$filter}\r\n\t\t\t\tGROUP BY\r\n\t\t\t\t\tToId, TeCoId, TeSubTeam, TeEvent, TeScore, TeGold, TeXnine\r\n\t\t\t\tORDER BY\r\n\t\t\t\t\tToId,TeEvent,TeRank\r\n\r\n\r\n\t\t\t"; //print $q;exit; $rows = array(); $r = safe_r_sql($q); if ($r && safe_num_rows($r) > 0) { while ($row = safe_fetch_assoc($r)) { $tmp = array(); foreach ($row as $k => $v) { if (substr($k, 0, 1) != '_') { $tmp[$k] = $v; } } // esplodo $parts = explode('|', $row['_Tupla']); $tmp['p1'] = $parts[0]; $tmp['p2'] = $parts[1]; $tmp['p3'] = $parts[2]; $rows[] = $tmp; } } /* * Terza parte: * con array_multisort ordino la struttura precedente sui campi TeEvent ASC,TeRank ASC,p1 DESC,p2 DESC e p3 DESC * in modo da avere i dati ordinati per applicare l'algoritmo standard pos/rank */ $ranks = array(); $p1s = array(); $p2s = array(); $p3s = array(); foreach ($rows as $k => $row) { $ranks[$k] = $row['TeRank']; $p1s[$k] = $row['p1']; $p2s[$k] = $row['p2']; $p3s[$k] = $row['p3']; } // print '<pre>'; // print_r($ranks); // print_r($p1s); // print_r($p2s); // print_r($p3s); // print '</pre>'; array_multisort($ranks, SORT_ASC, $p1s, SORT_DESC, $p2s, SORT_DESC, $p3s, SORT_DESC, $rows); // print '<pre>'; // print_r($rows); // print '</pre>'; // algoritmo rank/pos $rank = 1; $pos = 0; $oldRank = 0; // ocio che qui rank sarebbe lo score quindi questo sarebbe oldScore, NON confondersi con $rank che è quella normale $oldPs = array(-1, -1, -1); $curEvent = ''; foreach ($rows as $k => $v) { if ($v['TeEvent'] != $curEvent) { $rank = 1; $pos = 0; $oldRank = 0; $oldPs = array(-1, -1, -1); $curEvent = ''; $curEvent = $v['TeEvent']; } ++$pos; /* * Una volta che ho assegnato rank=4, tutti quelli dopo saranno rank=4. * Il motivo è il seguente: * qui sto lavorando solo sulle prime 3 posizioni e potrebbe succedere di avere a cavallo del bronzo dei parimeriti. * Se per la tupla non ho parimeriti al terzo posto con chi è a cavallo, chi resta fuori dal podio è quarto pari * perchè se no la sua rank l'avrebbe sistemata la prima parte e qui non sarebbero venuti fuori. * Esempio: ho 5 primi quindi le prime posizioni saranno 1,1,1,1,1,6,.... * La query della seconda parte mi tira fuori tutti gli 1. * Ho pari i primi 2 quindi otterrò 1,1,3,x,x. Le x saranno 3 se c'è il parimerito se no saranno 4 e otterrò giustamente alla fine * 1,1,3,4,4,6,... * */ if ($rank < 4) { if (!($v['TeRank'] == $oldRank && $v['p1'] == $oldPs[0] && $v['p2'] == $oldPs[1] && $v['p3'] == $oldPs[2])) { $rank = $pos; } } // non tocco il timestamp perchè tengo buono quello calcolato prima $q = "\r\n\t\t\t\t\tUPDATE\r\n\t\t\t\t\t\tTeams\r\n\t\t\t\t\tSET\r\n\t\t\t\t\t\tTeRank={$rank}\r\n\t\t\t\t\tWHERE\r\n\t\t\t\t\t\tTeTournament={$this->tournament} AND TeCoId={$v['TeCoId']} AND TeSubTeam={$v['TeSubTeam']} AND\r\n\t\t\t\t\t\tTeFinEvent=0 AND TeEvent='{$v['TeEvent']}'\r\n\r\n\t\t\t\t"; $r = safe_w_sql($q); $oldRank = $v['TeRank']; $oldPs = array($v['p1'], $v['p2'], $v['p3']); } return true; }
/** * trainingAndFinal() * Popola le righe che riguardano il warmup e le finali (se richieste) * * @return void */ protected function trainingAndFinal() { $queries = array(); /* * Se sono state richieste le righe di FinTraining e il filtro sul tipo di righe * è F oppure * allora le metto */ if (($this->opts['sessionType'] == '*' || $this->opts['sessionType'] == 'F') && $this->opts['training']) { $warmup = get_text('WarmUp', 'Tournament'); $caseTeam = "(CASE FteTeamEvent "; $caseTeam .= "WHEN 0 THEN '" . get_text('Individual') . "' "; $caseTeam .= "WHEN 1 THEN '" . get_text('Team') . "' "; $caseTeam .= "END) "; $queries[] = "\r\n\t\t\t\t(\r\n\t\t\t\t\tSELECT\r\n\t\t\t\t\t\t1 AS `schOrder`,CONCAT(FtScheduledDate,' ',FtScheduledTime) AS `dateStart`, ADDDATE(CONCAT(FtScheduledDate,' ',FtScheduledTime), INTERVAL FtScheduledLen MINUTE) AS `dateEnd`,\r\n\t\t\t\t\t\t'W' AS `sessionType`,\r\n\t\t\t\t\t\tCONCAT('{$warmup}',' ',CONCAT({$caseTeam},' ',group_concat(FteEvent separator '-'))) AS `descr`\r\n\t\t\t\t\tFROM\r\n\t\t\t\t\t\tFinTraining\r\n\t\t\t\t\t\tLEFT JOIN\r\n\t\t\t\t\t\t\tFinTrainingEvent\r\n\t\t\t\t\t\tON FteTournament=FtTournament and FteScheduledDate=FtScheduledDate and FteScheduledTime=FtScheduledTime and FteTargetFrom=FtTargetFrom\r\n\t\t\t\t\tWHERE\r\n\t\t\t\t\t\tFtTournament={$this->tourId} AND FtScheduledDate!='0000-00-00' \r\n\t\t\t\t\tGROUP BY \r\n\t\t\t\t\t\tFtTournament, FtScheduledDate, FtScheduledTime/*, FtTargetFrom*/ \r\n\t\t\t\t)\r\n\t\t\t\t/*ORDER BY \r\n\t\t\t\tFtScheduledDate ASC, FtScheduledTime ASC*/\r\n\t\t\t"; } /* * Se sono state richieste le righe di FinSchedule e il filtro sul tipo di righe * è F oppure * allora le metto */ if (($this->opts['sessionType'] == '*' || $this->opts['sessionType'] == 'F') && $this->opts['final']) { $phases = getPhasesId(-1); $casePhase = "(CASE GrPhase "; foreach ($phases as $p) { if (in_array($p, array(64, 32))) { $txt1 = get_text($p . '_Phase'); $txt2 = ''; if ($p == 64) { $txt2 = get_text('48_Phase'); } elseif ($p == 32) { $txt2 = get_text('24_Phase'); } if ($p == 64) { $casePhase .= " WHEN {$p} THEN IF( EvFinalFirstPhase=64,'{$txt1}','{$txt2}' ) "; } elseif ($p == 32) { $casePhase .= " WHEN {$p} THEN IF( EvFinalFirstPhase=32,'{$txt1}','{$txt2}' ) "; } } else { $txt = get_text($p . '_Phase'); $casePhase .= " WHEN {$p} THEN '{$txt}' "; } } $casePhase .= "END) "; //print '<br>'.$casePhase.'<br><br>'; $caseTeam = "(CASE FSTeamEvent "; $caseTeam .= "WHEN 0 THEN '" . get_text('Individual') . "' "; $caseTeam .= "WHEN 1 THEN '" . get_text('Team') . "' "; $caseTeam .= "END) "; $final = get_text('MenuLM_Final Rounds'); $queries[] = "\r\n\t\t\t\t(\r\n\t\t\t\t\tSELECT DISTINCT\r\n\t\t\t\t\t\t1 AS `schOrder`,CONCAT(FSScheduledDate,' ',FSScheduledTime) AS `dateStart`, ADDDATE(CONCAT(FSScheduledDate,' ',FSScheduledTime), INTERVAL FSScheduledLen MINUTE) AS `dateEnd`,\r\n\t\t\t\t\t\t'F' AS `sessionType`,\r\n\t\t\t\t\t\tCONCAT('{$final}',' ',group_concat(DISTINCT CONCAT({$caseTeam},' ',FSEvent,' (',{$casePhase},')' ) separator ' - ')) AS `descr`\r\n\t\t\t\t\tFROM\r\n\t\t\t\t\t\tFinSchedule\r\n\t\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\t\tEvents\r\n\t\t\t\t\t\tON EvCode=FSEvent AND EvTeamEvent=FSTeamEvent AND EvTournament=FSTournament\r\n\t\t\t\t\t\tINNER JOIN\r\n\t\t\t\t\t\t\tGrids\r\n\t\t\t\t\t\tON FSMatchNo=GrMatchNo AND GrPhase<=(IF(EvFinalFirstPhase=24,32, IF(EvFinalFirstPhase=48,64,EvFinalFirstPhase )))\r\n\t\t\t\t\tWHERE\r\n\t\t\t\t\t\tFSTournament={$this->tourId} AND FSScheduledDate!='0000-00-00'\r\n\t\t\t\t\tGROUP BY\r\n\t\t\t\t\t\tschOrder,dateStart/*,FSMatchNo, GrPhase*/ \r\n\t\t\t\t)\r\n\t\t\t\t\r\n\t\t\t\t/*ORDER BY\r\n\t\t\t\t\tFSScheduledDate ASC, FSScheduledTime ASC*/\r\n\t\t\t"; } // se ho query parto se no termino if (count($queries) > 0) { $q = implode(' UNION ALL ', $queries) . " ORDER BY dateStart ASC "; //print $q;exit; $r = safe_r_sql($q); if ($r) { while ($row = safe_fetch_assoc($r)) { $row['timeLabel'] = dateRenderer($row['dateStart'], 'H:i'); if ($row['dateEnd'] != '0000-00-00 00:00:00' && $row['dateStart'] != $row['dateEnd']) { $row['timeLabel'] .= ' - ' . dateRenderer($row['dateEnd'], 'H:i'); } // cerco dove infilare la riga $day = substr($row['dateStart'], 0, 10); $found = false; // print '<pre>'; // print_r($this->data); // print '</pre>'; if (array_key_exists($day, $this->data['days'])) { foreach ($this->data['days'][$day]['items'] as &$v) { if ($v['sessionType'] == 'F') { if ($row['dateStart'] >= $v['dateStart'] && $row['dateStart'] < $v['dateEnd']) { $found = true; /* * ... e metto la riga nel giorno * Se il padre ha il Follow=0 * - la timeLabel è quella preparata prima * Se il padre ha il Follow=1 * - se il figlio precedente è di tipo diverso oppure non ci sono precedenti, * la timeLabel è quella preparata prima * - se il figlio precedente è dello stesso tipo * la timeLabel cambia */ if ($v['follow'] == 1) { if (count($v['children']) != 0 && $v['children'][count($v['children']) - 1]['sessionType'] == $row['sessionType']) { $row['timeLabel'] = get_text('ToFollow', 'Tournament'); } } $v['children'][] = $row; break; } } } } if (!$found && ($this->opts['trainingOrphans'] && $row['sessionType'] == 'W' || $this->opts['finalOrphans'] && $row['sessionType'] == 'F')) { //$day=substr($row['dateStart'],0,10); if (!array_key_exists($day, $this->data['days'])) { $this->data['days'][$day] = array('dateLabel' => dateRenderer($day, get_text('DateFmt')), 'items' => array()); } $this->data['days'][$day]['items'][] = $row; } $this->sortDayItems($day); } } } }
continue; } $SQL[] = $f . '=' . StrSafe_DB($v); } safe_w_sql("insert ignore into IdCardElements set " . implode(',', $SQL)); CheckPictures(); } } } if (!empty($_REQUEST['ExportLayout'])) { $Layout = array(); $q = safe_r_SQL("select * from IdCards where IcTournament={$_SESSION['TourId']}"); if ($r = safe_fetch_assoc($q)) { $Layout['IdCards'] = $r; $q = safe_r_SQL("select * from IdCardElements where IceTournament={$_SESSION['TourId']}"); while ($r = safe_fetch_assoc($q)) { $Layout['IdCardElements'][] = $r; } // We'll be outputting a gzipped TExt File in UTF-8 pretending it's binary header('Content-type: application/octet-stream'); // It will be called ToCode-IdCard.ianseo header("Content-Disposition: attachment; filename=\"{$_SESSION['TourCode']}-IdCard.ianseo\""); ini_set('memory_limit', sprintf('%sM', 512)); echo gzcompress(serialize($Layout), 9); die; } } if (!empty($_REQUEST['DoPrint'])) { $FIELDS = "EnId"; $SORT = 'EnId'; require_once 'CommonCard.php';
function export_tournament($TourId, $Complete = false, $InfoSystem = false) { $Gara = array(); // Inizia prendendo il torneo... $Select = "SELECT * FROM Tournament WHERE ToId=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); if (!$Rs || safe_num_rows($Rs) != 1) { print get_text('CrackError'); exit; } $Gara['Tournament'] = safe_fetch_assoc($Rs); // prendo le Countries $Select = "SELECT * FROM Countries WHERE CoTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['Countries'][$MyRow['CoId']] = $MyRow; } // prendo le entries $Select = "SELECT * FROM Entries WHERE EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['Entries'][$MyRow['EnId']] = $MyRow; } $tabs = array('AccColors' => 'Ac', 'AccEntries' => 'AE', 'AccPrice' => 'AP', 'ACL' => 'Acl', 'AclDetails' => 'AclDt', 'AvailableTarget' => 'At', 'Awards' => 'Aw', 'Awarded' => 'Aw', 'BackNumber' => 'Bn', 'CasScore' => 'CaS', 'CasTeam' => 'Ca', 'CasTeamFinal' => 'CTF', 'CasTeamTarget' => 'CTT', 'Classes' => 'Cl', 'ClubTeam' => 'CT', 'ClubTeamScore' => 'CTS', 'Divisions' => 'Div', 'DistanceInformation' => 'Di', 'Eliminations' => 'El', 'Emails' => 'Em', 'EventClass' => 'Ec', 'Events' => 'Ev', 'F2FGrid' => 'F2F', 'F2FEntries' => 'F2F', 'F2FFinal' => 'F2F', 'FinalReportA' => 'Fra', 'Finals' => 'Fin', 'FinSchedule' => 'FS', 'FinTraining' => 'Ft', 'FinTrainingEvent' => 'Fte', 'FinWarmup' => 'Fw', 'GuessWho' => 'Gw', 'GuessWhoData' => 'Gwd', 'HhtData' => 'Hd', 'HhtEvents' => 'He', 'HhtSetup' => 'Hs', 'IdCardElements' => 'Ice', 'IdCards' => 'Ic', 'Images' => 'Im', 'Individuals' => 'Ind', 'ModulesParameters' => 'Mp', 'PrintOutsRules' => 'Por', 'RecTournament' => 'Rt', 'Reviews' => 'Rev', 'Scheduler' => 'Sch', 'Session' => 'Ses', 'SubClass' => 'Sc', 'TargetFaces' => 'Tf', 'TargetGroups' => 'Tg', 'TeamComponent' => 'Tc', 'TeamFinals' => 'Tf', 'TeamFinComponent' => 'Tfc', 'Teams' => 'Te', 'TournamentDistances' => 'Td', 'TournamentInvolved' => 'Ti', 'TourRecords' => 'Tr', 'TVContents' => 'TVC', 'TVOut' => 'TV', 'TVParams' => 'TVP', 'TVRules' => 'TVR', 'TVSequence' => 'TVS', 'VegasAwards' => 'Va'); if (!$InfoSystem) { // $tabs['']=''; } // Tabs where there is an EnID $tabsEnId = array('AccEntries' => 'AEId', 'Awarded' => 'AwEntry', 'ElabQualifications' => 'EqId', 'Eliminations' => 'ElId', 'ExtraData' => 'EdId', 'Qualifications' => 'QuId', 'F2FEntries' => 'F2FEnId', 'F2FFinal' => 'F2FEnId', 'Finals' => 'FinAthlete', 'GuessWhoData' => array('GwdAthlete1', 'GwdAthlete2'), 'HhtData' => 'HdEnId', 'Individuals' => 'IndId', 'Photos' => 'PhEnId', 'Qualifications' => 'QuId', 'TeamComponent' => 'TcId', 'TeamFinComponent' => 'TfcId', 'Vegas' => 'VeId'); // Tabs where there is an CoID $tabsCoId = array('CasTeam' => 'CaTeam', 'ClubTeam' => 'CTTeam', 'TeamComponent' => 'TcCoId', 'TeamFinComponent' => 'TfcCoId', 'Teams' => 'TeCoId'); $Gara['Photos'] = array(); $Gara['Flags'] = array(); if ($Complete) { // Adds localized Flags $Select = "SELECT distinct Flags.* FROM Entries\n\t\t\t\t\tinner join Countries on EnCountry=CoId\n\t\t\t\t\tinner join Flags on CoCode=FlCode and FlTournament in (-1, {$TourId})\n\t\t\t\t\tWHERE EnTournament={$TourId}\n\t\t\t\t\tORDER BY FlCode ASC, FlTournament DESC"; $Rs = safe_r_sql($Select); $oldCode = ''; while ($MyRow = safe_fetch_assoc($Rs)) { if ($oldCode != $MyRow["FlCode"]) { $Gara['Flags'][] = $MyRow; } $oldCode = $MyRow["FlCode"]; } // and Pictures $Select = "SELECT Photos.* FROM Photos inner join Entries on Entries.EnId=Photos.PhEnId WHERE Entries.EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['Photos'][] = $MyRow; } } $noIds = array('AccPrice' => 'APId', 'TournamentInvolved' => 'TiId', 'TVOut' => 'TVId'); // prendo le Tabelle definite nell'array che si estraggono sul Tournament foreach ($tabs as $tab => $code) { $Gara[$tab] = array(); $Select = "SELECT * FROM {$tab} WHERE {$code}Tournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { if (isset($noIds[$tab])) { unset($MyRow[$noIds[$tab]]); } $Gara[$tab][] = $MyRow; } } // ExtraData $Gara['ExtraData'] = array(); $Select = "SELECT ExtraData.* FROM ExtraData inner join Entries on Entries.EnId=ExtraData.EdId WHERE Entries.EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['ExtraData'][] = $MyRow; } // ElabQualifications $Gara['ElabQualifications'] = array(); $Select = "SELECT ElabQualifications.* FROM ElabQualifications inner join Entries on Entries.EnId=ElabQualifications.EqId WHERE Entries.EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['ElabQualifications'][] = $MyRow; } // Qualifications $Gara['Qualifications'] = array(); $Select = "SELECT Qualifications.* FROM Qualifications inner join Entries on Entries.EnId=Qualifications.QuId WHERE Entries.EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['Qualifications'][] = $MyRow; } // Vegas $Gara['Vegas'] = array(); $Select = "SELECT Vegas.* FROM Vegas inner join Entries on EnId=VeId WHERE EnTournament=" . StrSafe_DB($TourId) . " "; $Rs = safe_r_sql($Select); while ($MyRow = safe_fetch_assoc($Rs)) { $Gara['Vegas'][] = $MyRow; } if ($InfoSystem) { // adjust EnId foreach ($tabsEnId as $tab => $Ids) { if (is_array($Ids)) { foreach ($Ids as $Id) { foreach ($Gara[$tab] as $k => $v) { if ($v[$Id] and !empty($Gara['Entries'][$v[$Id]]['EnOnlineId'])) { // the user has an Online ID $Gara[$tab][$k][$Id] = $Gara['Entries'][$v[$Id]]['EnOnlineId']; } else { // unset the record... will be send later on the next cycle unset($Gara[$tab][$k]); } } } } else { foreach ($Gara[$tab] as $k => $v) { if ($v[$Ids] and !empty($Gara['Entries'][$v[$Ids]]['EnOnlineId'])) { // the user has an Online ID $Gara[$tab][$k][$Ids] = $Gara['Entries'][$v[$Ids]]['EnOnlineId']; } else { // unset the record... will be send later on the next cycle unset($Gara[$tab][$k]); } } } } // adjust CoId foreach ($tabsCoId as $tab => $Id) { foreach ($Gara[$tab] as $k => $v) { if ($v[$Id] and !empty($Gara['Countries'][$v[$Id]]['CoOnlineId'])) { // the user has an Online ID $Gara[$tab][$k][$Id] = $Gara['Countries'][$v[$Id]]['CoOnlineId']; } else { // unset the record... will be send later on the next cycle unset($Gara[$tab][$k]); } } } // adjust ToId foreach ($tabs as $tab => $Id) { foreach ($Gara[$tab] as $k => $v) { $Gara[$tab][$k][$Id . 'Tournament'] = $Gara['Tournament']['ToOnlineId']; } } //adjust Entries $NewEntries = array(); foreach ($Gara['Entries'] as $Id => $Entry) { if (!$Entry['EnOnlineId']) { continue; } // skip the new entries $Entry['EnId'] = $Entry['EnOnlineId']; $Entry['EnTournament'] = $Gara['Tournament']['ToOnlineId']; $Entry['EnCountry'] = $Gara['Countries'][$Entry['EnCountry']]['CoOnlineId']; $NewEntries[$Entry['EnId']] = $Entry; } $Gara['Entries'] = $NewEntries; // adjust Countries $NewEntries = array(); foreach ($Gara['Countries'] as $Id => $Entry) { if (!$Entry['CoOnlineId']) { continue; } // skip the new entries $Entry['CoId'] = $Entry['CoOnlineId']; $Entry['CoTournament'] = $Gara['Tournament']['ToOnlineId']; $NewEntries[$Entry['CoId']] = $Entry; } $Gara['Countries'] = $NewEntries; } return $Gara; }