Beispiel #1
0
 /**
  * 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);
     }
 }