/** * Constructor * @param {integer} $prueba Prueba ID * @param {integer} $jornada Jormada ID * @param {integer} $manga Manga ID * @throws Exception */ function __construct($prueba, $jornada, $manga) { parent::__construct('Portrait', "print_entradaDeDatosEquipos4", $prueba, $jornada); if ($prueba <= 0 || $jornada <= 0) { $this->errormsg = "print_datosEquipos4: either prueba or jornada data are invalid"; throw new Exception($this->errormsg); } // comprobamos que estamos en una jornada por equipos $flag = intval($this->jornada->Equipos3) + intval($this->jornada->Equipos4); if ($flag == 0) { $this->errormsg = "print_datosEquipos4: Jornada {$jornada} has no Team competition declared"; throw new Exception($this->errormsg); } // guardamos info de la manga $this->manga = $this->myDBObject->__getObject("Mangas", $manga); // Datos del orden de salida de equipos $m = new OrdenSalida("ordenSalidaEquipos4", $manga); $teams = $m->getTeams(); $this->equipos = $teams['rows']; // anyadimos el array de perros del equipo foreach ($this->equipos as &$equipo) { $equipo['Perros'] = array(); } $r = $this->myDBObject->__select("*", "Resultados", "(Manga={$manga})", "", ""); foreach ($r['rows'] as $perro) { foreach ($this->equipos as &$equipo) { if ($perro['Equipo'] == $equipo['ID']) { array_push($equipo['Perros'], $perro); break; } } } }
/** * Constructor * @param {integer} $prueba Prueba ID * @param {integer} $jornada Jormada ID * @param {integer} $manga Manga ID * @throws Exception */ function __construct($prueba, $jornada, $manga) { parent::__construct('Portrait', "print_ordenDeSalida", $prueba, $jornada); if ($prueba <= 0 || $jornada <= 0 || $manga <= 0) { $this->errormsg = "printOrdenDeSalida: either prueba/jornada/ manga/orden data are invalid"; throw new Exception($this->errormsg); } // Datos de la manga $m = new Mangas("printOrdenDeSalida", $jornada); $this->manga = $m->selectByID($manga); // Datos del orden de salida $o = new OrdenSalida("printOrdenDeSalida", $manga); $os = $o->getData(); $this->orden = $os['rows']; $this->categoria = "L"; $this->cellHeader = array(_('Order'), _('Dorsal'), _('Name'), _('Breed'), _('Lic'), _('Handler'), $this->strClub, _('Heat'), _('Comments')); // obtenemos los datos de equipos de la jornada indexados por el ID del equipo $eq = new Equipos("print_ordenDeSalida", $prueba, $jornada); $this->teams = array(); foreach ($eq->getTeamsByJornada() as $team) { $this->teams[$team['ID']] = $team; } }
<?php /* clubFunctions.php Copyright 2013-2016 by Juan Antonio Martinez ( juansgaviota at gmail dot com ) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ require_once __DIR__ . "/../server/logging.php"; require_once __DIR__ . "/../server/tools.php"; require_once __DIR__ . "/../server/database/classes/OrdenSalida.php"; $os = new OrdenSalida("reassign", 11); $os->reassignDorsal();
/** * Obtiene $after+$before+1 perros ordenados segun el orden de salida * @param $perro ID de perro tomado como referencia * if ID==0 means at begin of queue * if ID<0 means at end of queue * @param $before numero de perros a buscar que hayan salido antes del de referencia * @param $after numero de perros a introducir que tengan que salir despues del de referencia */ function videowall_windowCall($perro, $before, $after) { $this->myLogger->enter(); $nitems = $before + $after + 1; // obtenemos listado ordenado de perros de la manga $osobj = new OrdenSalida("VideoWall-ng", $this->mangaid); $os = $osobj->getData(false); // omit inserting team info rows // obtenemos categoria y grado de la tanda $catstr = Tandas::$tipo_tanda[$this->tandatype]['Categoria']; // categoria $gradostr = Tandas::$tipo_tanda[$this->tandatype]['Grado']; // grado ("-" means any grade) // componemos un array de $before+1+$after perros $result = array(); // reserve $before +1 empty slots before dog list for ($n = 0; $n < $before + 1; $n++) { array_unshift($result, $this->getEmptyData()); } $found = -1; // add dog list, setting up starting orden $orden = 0; // if dog found, mark index foreach ($os['rows'] as &$item) { if (strstr($catstr, $item['Categoria']) === false) { continue; } // category does not match, ignore if ($gradostr !== '-' && $gradostr !== $item['Grado']) { continue; } // grade differs, ignore entry // same category and (if required) grade $orden++; $item['Orden'] = $orden; array_unshift($result, $item); // if item matches requested dog, cut if ($item['Perro'] == $perro) { $found = count($result) - 1; } if ($found <= 0) { continue; } // not yet found if (count($result) - $found > $after) { break; } // enought dogs; iteration no longer needed } // fill array with $after empty rows for ($n = 0; $n < $after; $n++) { array_unshift($result, $this->getEmptyData()); // if dogID<0 means seek at end of list if ($perro >= 0) { continue; } if ($n != 0) { continue; } $found = count($result) - 1; } // if dog is not provided nor found, just assume default if ($found < 0) { $found = $before; } // and return 3 arrays: $res = array("before" => array_slice($result, -$found, $before), "current" => array_slice($result, -($found + 1), 1), "after" => array_slice($result, -($found + 1 + $after), $after)); echo json_encode($res); return 0; }
function delete($id) { $this->myLogger->enter(); $jornada = $this->jornadaID; if ($id < 0) { return $this->error("Equipos::delete():Invalid Equipo ID:{$id} provided"); } // fase 1: buscamos datos del equipo a borrar $team = $this->__getArray("Equipos", $id); if (!is_array($team)) { return $this->error("Equipos::delete(): No encuentro el equipo {$id} en la lista de equipos de esta jornada"); } // fase 2: comprobamos que no sea el equipo por defecto if (intval($team['DefaultTeam']) != 0) { return $this->error("Equipos::delete():Cannot delete default team for this Contest"); } // fase 3: reasignamos los perros al equipo por defecto $dteam = $this->getDefaultTeam()['ID']; $res = $this->query("UPDATE Resultados SET Equipo={$dteam} WHERE (Equipo={$id})"); if (!$res) { return $this->error($this->conn->error); } // fase 4: borramos el equipo del orden de salida de equipos de la manga $mng = $this->__select("*", "Mangas", "(Jornada={$jornada})", "", ""); // list of mangas for this jornada foreach ($mng['rows'] as $manga) { $this->myLogger->trace("Eliminando el equipo:{$id} de Orden_Equipos jornada:{$jornada} manga:{$manga['ID']}"); $osobj = new OrdenSalida("Equipos::remove", $manga['ID']); // add team to Orden_Equipos in every related mangas $osobj->removeFromTeamList($id); } // fase 5: finalmente borramos el equipo antiguo de la base de datos $res = $this->query("DELETE FROM Equipos WHERE (ID={$id})"); if (!$res) { return $this->error($this->conn->error); } $this->myLogger->leave(); return ""; }
/** * Obtiene la lista ordenada de perros de esta jornada asociadas a la sesion, y tandas especificadas * @param {integer} $s session id. * 0: ANY sesion * 1: ANY BUT User defined sessions * -1: User defined sessions * n: Session number "n" * -n: Session number "n" PLUS User defined sessions * @param {number} $t Tanda ID. * $t=0; mira todos los perros de todas las tandas de la sesion indicada * $t>0; mira SOLO los perros de la tanda * $t<0; mira todos los perros A PARTIR DE la tanda (-$t) * @param {number} $pendientes Pendientes $p==0 -> muestra todos los perros; else muestra los $p primeros pendientes de salir */ private function getListaPerros($s = 0, $t = 0, $pendientes = 0) { $count = $pendientes; // contador de perros pendientes de listar $manga = 0; // variable para controlar manga "activa" $perrosmanga = null; // {array} lista de perros ordenada segun ordensalida de la manga $do_iterate = false; // indica si debe analizar los perros de la tanda $rows = array(); // donde iremos guardando los resultados $result = array(); // resultado a devolver en formato json // obtenemos la lista de tandas $lista_tandas = $this->getTandas($s); $club = new Clubes("Tandas::getListaPerros", $this->prueba->RSCE); // iteramos la lista de tandas foreach ($lista_tandas['rows'] as $tanda) { $this->myLogger->info("Analizando tanda \n" . json_encode($tanda)); // Comprobamos si debemos analizar la tanda if ($t > 0) { $do_iterate = $tanda['ID'] == abs($t) ? true : false; } // iterar solo la tanda if ($t < 0) { if ($tanda['ID'] == abs($t)) { $do_iterate = true; } } // iterar a partir de la tanda if ($t == 0) { $do_iterate = true; } // iterar TODAS las tandas if (!$do_iterate) { continue; } // this tanda is not the one we are looking for if ($tanda['Manga'] == 0) { continue; } // user defined tandas, has no manga associated // comprobamos ahora si hay cambio de manga if ($manga != $tanda['Manga']) { // cambio de manga $manga = $tanda['Manga']; // en cada manga cogemos los perros ordenados segun el orden de salida $os = new OrdenSalida("Tandas::getListaPerros()", $manga); $perrosmanga = $os->getData(false); // false: do not include extra team information rows } // OK ya tenemos la lista ordenada de los perros de cada manga // Ahora vamos a sacar la lista por cada tanda foreach ($perrosmanga['rows'] as &$perro) { // si el perro no pertenece a la tanda skip (comprobar categoria) if (strpos($tanda['Categoria'], $perro['Categoria']) === false) { continue; } $perro['Tanda'] = $tanda['Nombre']; $perro['ID'] = $tanda['ID']; // replace resultadoID por tandaID TODO: revise why if ($pendientes == 0) { // include all $perro['LogoClub'] = $club->getLogoName('NombreClub', $perro['NombreClub']); array_push($rows, $perro); continue; } if ($perro['Pendiente'] == 0) { continue; } // not pendiente: skip if ($count > 0) { // not yet at count: insert $count--; $perro['LogoClub'] = $club->getLogoName('NombreClub', $perro['NombreClub']); array_push($rows, $perro); continue; } // arriving here means that every requested dogs are filled $this->myLogger->debug("Tandas::getListaPerros() Already have {$pendientes} dogs"); // so return $result['rows'] = $rows; $result['total'] = count($rows); $this->myLogger->leave(); return $result; } // no more dogs in this tanda. go to next } $result['rows'] = $rows; $result['total'] = count($rows); $this->myLogger->leave(); return $result; }
break; } $rowcount++; $orden++; } // Línea de cierre $this->Cell(array_sum($this->pos), 0, '', 'T'); $this->myLogger->leave(); } } // Consultamos la base de datos try { $prueba = http_request("Prueba", "i", 0); $jornada = http_request("Jornada", "i", 0); $manga = http_request("Manga", "i", 0); $mode = http_request("Mode", "i", 0); // Datos de la manga y su manga hermana $m = new Mangas("printEntradaDeDatos", $jornada); $mangas = $m->getHermanas($manga); // Datos del orden de salida $o = new OrdenSalida("printEntradaDeDatos", $manga); $orden = $o->getData(); // Creamos generador de documento $pdf = new EntradaDeDatos($prueba, $jornada, $mangas, $orden['rows'], $mode); $pdf->AliasNbPages(); $pdf->composeTable(); $pdf->Output("entradaDeDatos.pdf", "D"); // "D" means open download dialog } catch (Exception $e) { die("Error accessing database: " . $e->getMessage()); }
$p = http_request("Prueba", "i", 0); $j = http_request("Jornada", "i", 0); $m = http_request("Manga", "i", 0); $d = http_request("Perro", "i", 0); // los siguiente campos se usan para drag and drop $f = http_request("From", "i", 0); $t = http_request("To", "i", 0); $w = http_request("Where", "i", 0); $tv = http_request("TeamView", "b", false); $team = http_request("Equipo", "i", 0); $mode = http_request("Mode", "i", 8); // sort everything LMST by default if ($p <= 0 || $j <= 0 || $m <= 0) { throw new Exception("Call to ordenSalidaFunctions with Invalid Prueba:{$p} Jornada:{$j} or manga:{$m} ID"); } $os = new OrdenSalida($file, $m); switch ($operation) { case "random": $am->access(PERMS_OPERATOR); $result = $os->random($mode); break; case "reverse": $am->access(PERMS_OPERATOR); $result = $os->reverse($mode); break; case "sameorder": $am->access(PERMS_OPERATOR); $result = $os->sameorder($mode); break; case "getData": $result = $os->getData($tv);
/** * Comprueba y actualiza las referencias de una inscripcion en una jornada * @param {object} $inscripcion Datos de la inscripcion * @param {object} $jornada Datos de la jornada * @param {object} $perro Datos del perro */ function inscribePerroEnJornada($inscripcion, $jornada, $perro) { $myConfig = Config::getInstance(); $myLogger = new Logger("inscribePerroEnJornada", $myConfig->getEnv("debug_level")); $j = $jornada['ID']; $p = $jornada['Prueba']; $idperro = $inscripcion['Perro']; $g = $perro['Grado']; // buscamos la lista de mangas de esta jornada $mobj = new Mangas("inscribePerroEnJornada", $jornada['ID']); $mangas = $mobj->selectByJornada(); if (!$mangas) { throw new Exception("No hay mangas definidas para la jornada {$j} de la prueba {$p}"); } foreach ($mangas['rows'] as $manga) { $mid = $manga['ID']; $mtype = $manga['Tipo']; $mgrado = $manga['Grado']; $inscribir = false; // comprobamos si el perro tiene que estar en esta manga switch ($mtype) { case 1: // 'Pre Agility Manga 1', 'P.A.' if ($g === 'P.A.') { $inscribir = true; } break; case 2: // 'Pre Agility Manga 2', 'P.A.' if ($g === 'P.A.') { $inscribir = true; } break; case 3: // 'Agility Grado I Manga 1', 'GI' // 'Agility Grado I Manga 1', 'GI' case 4: // 'Agility Grado I Manga 2', 'GI' if ($g === 'GI') { $inscribir = true; } break; case 5: // 'Agility Grado II', 'GII' if ($g === 'GII') { $inscribir = true; } break; case 6: // 'Agility Grado III', 'GIII' if ($g === 'GIII') { $inscribir = true; } break; case 7: // 'Agility Abierta', '-' // 'Agility Abierta', '-' case 8: // 'Agility Equipos (3 mejores)', '-' // 'Agility Equipos (3 mejores)', '-' case 9: // 'Agility Equipos (Conjunta)', '-' $inscribir = true; break; case 10: // 'Jumping Grado II', 'GII' if ($g === 'GII') { $inscribir = true; } break; case 11: // 'Jumping Grado III', 'GIII' if ($g === 'GIII') { $inscribir = true; } break; case 12: // 'Jumping Abierta', '-' // 'Jumping Abierta', '-' case 13: // 'Jumping Equipos (3 mejores)', '-' // 'Jumping Equipos (3 mejores)', '-' case 14: // 'Jumping Equipos (Conjunta)', '-' // 'Jumping Equipos (Conjunta)', '-' case 15: // 'Ronda K.O.', '-' // 'Ronda K.O.', '-' case 16: // 'Manga especial', '-' $inscribir = true; break; default: throw new Exception("Tipo de manga {$mtype} desconocido. Manga:{$mid} Jornada:{$j} Prueba:{$p}"); break; } // Verificamos el orden de salida de la manga $os = new OrdenSalida("inscribePerroEnJornada", $manga['ID']); $orden = $os->getOrden(); $myLogger->info("OrdenDeSalida Prueba:{$p} Jornada:{$j} Manga:{$mid} Tipo:{$mtype} Grado:{$mgrado} es:\n{$orden}"); if ($inscribir == false) { $myLogger->info("Eliminando Perro:{$idperro} Grado:{$g} del orden de salida grado:{$mgrado}"); $os->removeFromList($idperro); } else { $myLogger->info("Insertando Perro:{$idperro} Grado:{$g} en del orden de salida gradp:{$mgrado}"); $os->insertIntoList($idperro); } $orden = $os->getOrden(); $myLogger->info("Nuevo OrdenDeSalidada: \n{$orden}"); // verificamos la tabla de resultados de esta manga $rs = new Resultados("inscribePerroEnJornada::Resultados", $jornada['Prueba'], $mid); if ($inscribir == false) { $myLogger->info("Borrando Perro:{$idperro} Grado:{$g} de Resultados manga:{$mid}"); // borramos entrada del perro en la tabla de resultados de la manga $rs->delete($idperro); } else { $eqobj = new Equipos("inscribePerroEnJornada", $p, $j); // nos aseguramos de que existe una entrada $myLogger->info("Insertando Perro:{$idperro} Grado:{$g} en Resultados manga:{$mid}"); // en la tabla de resultados de esta manga para este perro $res = $rs->insertByData($perro, $inscripcion, $eqobj->getTeamByPerro($idperro)); if ($res !== "") { // esta funcion es in "insert on duplicate key update"... // no deberia fallar si ya existe una entrada en la tabla de resultados $myLogger->error("Failed: Insert into Resultados perro:{$idperro} Prueba:{$p} Jornada:{$j} Manga:{$mid}"); $myLogger->error($res); } } } /* foreach */ }