예제 #1
0
 /** deploy a contest->journeys->series->rounds tree */
 function publicweb_deploy()
 {
     $result = array();
     // retrieve contest data
     $result['Prueba'] = $this->prueba;
     // retrieve journeys for this contest
     $result['Jornadas'] = $this->myDBObject->__select("*", "Jornadas", "(Prueba={$this->prueba['ID']}) AND (Nombre != '-- Sin asignar --') ", "", "")['rows'];
     foreach ($result['Jornadas'] as &$jornada) {
         // retrieve rounds for each series
         $jornada['Mangas'] = Jornadas::enumerateMangasByJornada($jornada['ID'])['rows'];
         // retrieve series for each journey
         $tnd = new Tandas("publicweb_deploy", $this->prueba['ID'], $jornada['ID']);
         $jornada['Tandas'] = $tnd->getTandas(0)['rows'];
         // incluye user defined rounds ( to display timetable )
         // retrieve final results index for each series
         $jornada['Series'] = Jornadas::enumerateRondasByJornada($jornada['ID'])['rows'];
     }
     return $result;
 }
예제 #2
0
 /**
  * Pagina de resultados de la jornada ordenados por grado/categoría/puesto
  * @param {array} $jornada datos de la jornada
  * @param {object} $insc objeto de tipo Inscripcion con las inscripciones de la prueba
  */
 function createJornadaDataPage($jornada, $insc)
 {
     // create Excel sheet
     $jdatapage = $this->myWriter->addNewSheetAndMakeItCurrent();
     $name = $this->normalizeSheetName("Data " . $jornada['Nombre']);
     $jdatapage->setName($name);
     // write table header
     $this->writeTableHeader();
     $rondas = Jornadas::enumerateRondasByJornada($jornada['ID'])['rows'];
     // obtenemos los datos "personales" de los perros de la jornada
     $lista = $insc->inscritosByJornada($jornada['ID'], false)['rows'];
     $eq = new Equipos("excel_printInscripciones", $this->prueba['ID'], $jornada['ID']);
     $inscritos = array();
     foreach ($lista as $perro) {
         // add team information
         $perro['Equipo'] = $eq->getTeamByPerro($perro['Perro'])['Nombre'];
         // reindexamos las inscripciones por el PerroID
         $inscritos[$perro['Perro']] = $perro;
     }
     // obtenemos todas las clasificaciones de la jornada
     $clas = new Clasificaciones("excel_Clasificaciones", $this->prueba['ID'], $jornada['ID']);
     $results = array();
     foreach ($rondas as $ronda) {
         $mangas = array($ronda['Manga1'], $ronda['Manga2']);
         $clasifRonda = $clas->clasificacionFinal($ronda['Rondas'], $mangas, $ronda['Mode']);
         $results = array_merge($results, $clasifRonda['rows']);
     }
     // OK ya tenemos los datos de toda la jornada; ahora a ordenar por grado,categoría y puesto
     usort($results, function ($a, $b) {
         $res = strcmp($a['Grado'], $b['Grado']);
         if ($res != 0) {
             return $res;
         }
         $res = strcmp($a['Categoria'], $b['Categoria']);
         if ($res != 0) {
             return $res;
         }
         return $a['Puesto'] > $b['Puesto'] ? 1 : -1;
     });
     // componemos la fila Excel anyiadiendo datos personales
     //
     // 'Dorsal',
     // 'Nombre','NombreLargo','Genero','Raza','Licencia','LOE_RRC','Categoria','Grado','NombreGuia','NombreClub','Pais', // datos del perro
     // 'Equipo','Celo','Observaciones', // datos de la inscripcion en la jornada
     // 'F1','R1','E1','N1','Tiempo1','Penal1', // datos de la manga 1
     // 'F2','R2','E2','N2','Tiempo2','Penal2', // datos de la manga 2
     //  // TODO: handle series with more than 2 rounds
     // 'Tiempo','Penalizacion','Calificacion'
     foreach ($results as $perro) {
         $row = array();
         // si el perro no esta en la lista de inscritos, marca error e ignora entrada
         if (!array_key_exists($perro['Perro'], $inscritos)) {
             $this->myLogger->error("Encontrada Clasificacion para perro no inscrito:" . $perro['Perro']);
             continue;
         }
         $pdata =& $inscritos[$perro['Perro']];
         $pdata['Done'] = 1;
         // mark perro inscrito _and_ with clasification
         // datos personales
         $row[] = $perro['Dorsal'];
         $row[] = $pdata['Nombre'];
         $row[] = $pdata['NombreLargo'];
         $row[] = $pdata['Genero'];
         $row[] = $pdata['Raza'];
         $row[] = $pdata['Licencia'];
         $row[] = $pdata['LOE_RRC'];
         $row[] = $pdata['Categoria'];
         $row[] = $pdata['Grado'];
         $row[] = $pdata['NombreGuia'];
         $row[] = $pdata['NombreClub'];
         $row[] = $pdata['Pais'];
         // Datos de la inscripcion
         $row[] = $pdata['Equipo'];
         $row[] = $pdata['Celo'];
         $row[] = $pdata['Observaciones'];
         // resultados manga 1
         $row[] = $perro['F1'];
         // Manga 1: faltas + tocados
         $row[] = $perro['R1'];
         // Manga 1: rehuses
         $row[] = $perro['E1'];
         // Manga 1: eliminado
         $row[] = $perro['N1'];
         // manga 1: no presentado
         $row[] = $perro['T1'];
         // manga 1: tiempo
         $row[] = $perro['P1'];
         // manga 1: penalizacion
         // resultados manga 2
         $row[] = $perro['F2'];
         // Manga 2: faltas + tocados
         $row[] = $perro['R2'];
         // Manga 2: rehuses
         $row[] = $perro['E2'];
         // Manga 2: eliminado
         $row[] = $perro['N2'];
         // manga 2: no presentado
         $row[] = $perro['T2'];
         // manga 2: tiempo
         $row[] = $perro['P2'];
         // manga 2: penalizacion
         // datos globales de clasificacion
         $row[] = $perro['Tiempo'];
         $row[] = $perro['Penalizacion'];
         $row[] = $perro['Calificacion'];
         // !!finaly!! add perro to excel table
         $this->myWriter->addRow($row);
     }
     // por ultimo metemos las inscripciones que no tienen resultado asociado
     foreach ($inscritos as $pdata) {
         if (array_key_exists('Done', $pdata)) {
             continue;
         }
         // already done
         $row = array();
         // datos personales
         $row[] = $pdata['Dorsal'];
         $row[] = $pdata['Nombre'];
         $row[] = $pdata['NombreLargo'];
         $row[] = $pdata['Genero'];
         $row[] = $pdata['Raza'];
         $row[] = $pdata['Licencia'];
         $row[] = $pdata['LOE_RRC'];
         $row[] = $pdata['Categoria'];
         $row[] = $pdata['Grado'];
         $row[] = $pdata['NombreGuia'];
         $row[] = $pdata['NombreClub'];
         $row[] = $pdata['Pais'];
         // add perro without results to excel table
         $this->myWriter->addRow($row);
     }
 }
예제 #3
0
 function __construct($sessionid, $pruebaid = 0, $jornadaid = 0, $mangaid = 0, $tandatype = 0, $mode = 0)
 {
     $this->config = Config::getInstance();
     $this->myLogger = new Logger("VideoWall.php", $this->config->getEnv("debug_level"));
     $this->myDBObject = new DBObject("Videowall");
     $this->manga = null;
     $this->tanda = null;
     $this->ronda = null;
     $this->mangaid = $mangaid;
     $this->tandatype = $tandatype;
     $tandaid = 0;
     if ($sessionid != 0) {
         // obtenemos los datos desde la sesion abierta en el tablet
         $this->session = $this->myDBObject->__getArray("Sesiones", $sessionid);
         $this->sessionid = $sessionid;
         $pruebaid = $this->session['Prueba'];
         $jornadaid = $this->session['Jornada'];
         $mangaid = $this->session['Manga'];
         $tandaid = $this->session['Tanda'];
         $this->mode = -1;
     } else {
         // obtenemos los datos desde las variables recibidas por http
         $this->session = null;
         $this->sessionid = 0;
         $this->mode = $mode;
     }
     $this->prueba = $this->myDBObject->__getArray("Pruebas", $pruebaid);
     $this->jornada = $this->myDBObject->__getArray("Jornadas", $jornadaid);
     if ($mangaid != 0) {
         $this->manga = $this->myDBObject->__getArray("Mangas", $mangaid);
         $this->manga['Manga'] = $mangaid;
         // manga['ID'] contains extra info and should not be used
         $this->mangaid = $mangaid;
     }
     if ($tandaid != 0) {
         $this->tanda = $this->myDBObject->__getArray("Tandas", $tandaid);
         $this->tandatype = $this->tanda['Tipo'];
     }
     // retrieve rounds for this journey
     if ($mangaid != 0) {
         $rondas = Jornadas::enumerateRondasByJornada($jornadaid)['rows'];
         foreach ($rondas as $ronda) {
             $cat = Tandas::$tipo_tanda[$this->tandatype]['Categoria'];
             $this->myLogger->trace("MangaID {$this->mangaid} Cat: {$cat} Ronda: " . json_encode($ronda));
             if ($ronda['Manga1'] == $this->mangaid) {
                 foreach (str_split($cat) as $c) {
                     if (strpos($ronda['Categoria'], $c) === false) {
                         continue;
                     }
                     $this->ronda = $ronda;
                     break;
                 }
             }
             if ($ronda['Manga2'] == $this->mangaid) {
                 foreach (str_split($cat) as $c) {
                     if (strpos($ronda['Categoria'], $c) === false) {
                         continue;
                     }
                     $this->ronda = $ronda;
                     break;
                 }
             }
         }
     }
     $this->club = $this->myDBObject->__getArray("Clubes", $this->prueba['Club']);
     if ($this->manga != null) {
         // elimina parentesis del nombre
         $str = Mangas::$tipo_manga[$this->manga['Tipo']][1];
         $a = strpos($str, "(");
         if ($a !== FALSE) {
             $str = substr($str, 0, $a);
         }
         $this->manga['Nombre'] = $str;
     }
     $this->myLogger->info("sesion:{$sessionid} prueba:{$this->prueba['ID']} jornada:{$this->jornada['ID']} manga:{$this->mangaid} tanda:{$this->tandatype} mode:{$mode}");
 }
예제 #4
0
         $result = $jornadas->selectByPrueba();
         break;
     case "getbyid":
         $result = $jornadas->selectByID($jornadaid);
         break;
     case "enumerate":
         $result = $jornadas->searchByPrueba($allowClosed, $hideUnassigned);
         break;
     case "rounds":
         $result = $jornadas->roundsByJornada($jornadaid);
         break;
     case "enumerateMangasByJornada":
         $result = Jornadas::enumerateMangasByJornada($jornadaid);
         break;
     case "enumerateRondasByJornada":
         $result = Jornadas::enumerateRondasByJornada($jornadaid);
         break;
     case "access":
         $result = $jornadas->checkAccess($am, $jornadaid, $perms);
         break;
     default:
         throw new Exception("jornadaFunctions:: invalid operation: {$operation} provided");
 }
 if ($result === null) {
     throw new Exception($jornadas->errormsg);
 }
 if ($result === "") {
     echo json_encode(array('success' => true, 'insert_id' => 0, 'affected_rows' => 0));
 } else {
     echo json_encode($result);
 }