/** 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; }
/** * 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); } }
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}"); }
$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); }