Exemple #1
0
// 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] : '&nbsp;') . '</td>' . '<td style="font-size:22px;">' . $myRow['CountryCode' . $i] . ' - ' . ($myRow['CountryName' . $i] != '' ? $myRow['CountryName' . $i] . (intval($myRow['SubTeamCode' . $i]) <= 1 ? '' : ' (' . $myRow['SubTeamCode' . $i] . ')') : '&nbsp') . '</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' : '&nbsp;')) . '</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);
             }
         }
     }
 }
Exemple #6
0
                    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';
Exemple #7
0
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;
}