/** * Costruttore. * Inizializza $this->xmlDoc data la stringa xml $xml * * @param string $xml: stringa xml */ public function __construct($xml) { // Creo un DOMDocument e gli carico la stringa $this->xmlDoc = new DOMDocument(); $x = $this->xmlDoc->loadXML($xml); if ($x === false) { $this->setError(1); return; } // Verifico che la root si chiami 'response' $root = $this->xmlDoc->documentElement; if ($root->nodeName != 'response') { $this->setError(1); return; } // Verifico che <response> abbia dei figli if (!$root->hasChildNodes()) { $this->setError(1); return; } // <reponse> è buona $this->xmlRoot = $root; // verifico la versione $versions = $this->xmlRoot->getElementsByTagName('version'); if ($versions->length != 1) { $this->setError(1); return; } if ($versions->item(0)->textContent != ARF::ARF_INPUT_VERSION) { $this->setError(1); return; } // Verifico che ci sia una SOLA sezione <header> $headers = $this->xmlDoc->getElementsByTagName('header'); if ($headers->length != 1) { $this->setError(1); return; } // e che sia figlia di <response> if ($headers->item(0)->parentNode != $this->xmlRoot) { $this->setError(1); return; } // <header> è buono $this->xmlHeader = $headers->item(0); // Verifico se l'header ha le info giuste $x = $this->makeHeader(); if ($x == 0) { $this->setError($x); return; } list($toId, $phase, $session, $distance, $end, $arrows) = $x; // chiamo il costruttore padre parent::__construct($toId, $phase); // setto gli altri valori $this->setSession($session); $this->setphase($phase); $this->setEnd($end); $this->setDistance($distance); $this->setArrows($arrows); // controllo se la fase è bloccata if ($this->isBlocked()) { $this->setError(999); return; } // max arrows ori e x if ($this->getPhase() == ARF::QUALIFICATION || $this->getPhase() == ARF::ELIMINATION) { /*$query = "SELECT TtGolds,TtXNine,(TtMaxDistScore/TtGolds) AS MaxArrows " . "FROM Tournament INNER JOIN Tournament*Type ON ToType=TtId " . "WHERE ToId=" . $this->getTourId() . " ";*/ $query = "SELECT ToGoldsChars AS TtGolds,ToXNineChars AS TtXNine,(ToMaxDistScore/ToGolds) AS MaxArrows " . "FROM Tournament " . "WHERE ToId=" . $this->getTourId() . " "; $rs = safe_r_sql($query); if (safe_num_rows($rs) == 1) { $myRow = safe_fetch($rs); $this->setMaxArrows($myRow->MaxArrows); $this->G = $myRow->TtGolds; $this->X = $myRow->TtXNine; } } elseif ($this->getPhase() == ARF::INDIVIDUAL_FINAL || $this->getPhase() == ARF::TEAM_FINAL) { $this->setMaxArrows($this->getPhase() == ARF::INDIVIDUAL_FINAL ? MaxFinIndArrows : MaxFinTeamArrows); } }
/** * Inizializza il documento di output * * @param <b>int $tourId</b>: id torneo * @param <b>string $phase</b>: fase presa in considerazione * @param <b>mixed array $options</b>: opzioni * * <br/><br/> * <b>$options</b> assume le seguenti forme: * <ul> * <li> * array($session,$dist) se $phase vale QUALIFICATION.<br/> * </li> * <li> * array($round) se $phase vale ELIMINATION.<br/> * </li> * <li> * array($scheduling) se $phase vale INDIVIDUAL_FINAL.<br/> * </li> * <li> * array($scheduling) se $phase vale TEAM_FINAL * </li> * </ul> * <br/><br/> * <b>$session</b> indica la sessione da esportare,<b>$dist</b> la distanza.<br/> * Se <b>$session</b> vale -1 significa tutte.<br/> * Se <b>$dist</b> vale -1 significa tutte, 0 nessuna.<br/> * <b>$round</b> indica il girone da esportare.<br/> * Se <b>$round</b> vale -1 significa tutti.<br/> * <b>$scheduling</b> è la programmazione dell'orario. Sono ammessi i caratteri % e _ * <br/><br/> * <b>Nessun'altra combinazione è ammessa.</b> * * @todo: gestire il controllo sulla forma di $options */ public function __construct($tourId, $phase, $options) { // Inizializzo il doc xml con la root $this->xmlDoc = new DOMDocument('1.0', 'UTF-8'); $this->xmlRoot = $this->xmlDoc->createElement('response'); $this->xmlDoc->appendChild($this->xmlRoot); // version $xmlVer = $this->xmlDoc->createElement('version', ARF::ARF_OUTPUT_VERSION); $this->xmlRoot->appendChild($xmlVer); // chiamo il costruttore padre per esplicitare l'init parent::__construct($tourId, $phase); $this->makeHeader(); // Inizializzo gli altri valori $this->setDirection('Output'); $totalEndsField = ''; $maxTotalField = ''; $makeRS = ''; // In base a $phase decido i campi da estrarre /*switch ($phase) { case ARF::QUALIFICATION: $totalEndsField='TtNumEnds'; $maxTotalField='TtMaxDistScore'; $makeRS='rsQualification'; break; case ARF::ELIMINATION: $totalEndsField='\'#\''; $maxTotalField='TtMaxDistScore'; $makeRS='rsElimination'; break; case ARF::INDIVIDUAL_FINAL: $totalEndsField='\'#\''; $maxTotalField='TtMaxFinIndScore'; $makeRS='rsIndividualFinal'; break; case ARF::TEAM_FINAL: $totalEndsField='\'#\''; $maxTotalField='TtMaxFinTeamScore'; $makeRS='rsTeamFinal'; break; } $query = "SELECT " . $totalEndsField . " AS TotalEnds," . $maxTotalField . " AS MaxTotal " . "FROM " . "Tournament*Type INNER JOIN Tournament ON TtId=ToType " . "WHERE " . "ToId=" . $this->getTourId() . " ";*/ switch ($phase) { case ARF::QUALIFICATION: $totalEndsField = 'ToNumEnds'; $maxTotalField = 'ToMaxDistScore'; $makeRS = 'rsQualification'; break; case ARF::ELIMINATION: $totalEndsField = '\'#\''; $maxTotalField = 'ToMaxDistScore'; $makeRS = 'rsElimination'; break; case ARF::INDIVIDUAL_FINAL: $totalEndsField = '\'#\''; $maxTotalField = 'ToMaxFinIndScore'; $makeRS = 'rsIndividualFinal'; break; case ARF::TEAM_FINAL: $totalEndsField = '\'#\''; $maxTotalField = 'ToMaxFinTeamScore'; $makeRS = 'rsTeamFinal'; break; } $query = "SELECT " . $totalEndsField . " AS TotalEnds," . $maxTotalField . " AS MaxTotal " . "FROM " . "Tournament " . "WHERE " . "ToId=" . $this->getTourId() . " "; $rs = safe_r_sql($query); if (safe_num_rows($rs) == 1) { $myRow = safe_fetch($rs); $this->setTotalEnds($myRow->TotalEnds); $this->setMaxTotal($myRow->MaxTotal); $this->options = $options; $this->add2header(); call_user_func(array($this, $makeRS), array()); //$this->addData(); $x = new MySql2XML($this->rs, $this->xmlDoc, $this->xmlRoot); // Non serve perchè gli oggetti vengono assegnati per referenza //$this->xmlDoc=$x->getXmlDoc(); } else { $this->setError(1); } }