/** * Funcion de procesado de inscripciones * revisa la inscripcion * ajusta orden de salida * crea entradas en tabla de resultados * @param {integer} $p ID de prueba * @param {integer} $i ID de inscripcion */ function procesaInscripcion($p, $i) { $myConfig = Config::getInstance(); $myLogger = new Logger("procesaInscripcion", $myConfig->getEnv("debug_level")); $am = new AuthManager("procesaInscripcion"); // si la prueba o la inscripcion son nulas genera error try { if ($p <= 0) { throw new Exception("ID de prueba invalida: {$p}"); } if ($i <= 0) { throw new Exception("ID de inscripcion invalida"); } $am->access(PERMS_OPERATOR); // grant access or throw exception // buscamos las jornadas de que consta la Prueba $jobject = new Jornadas("procesaInscripcion", $p); $jp = $jobject->searchByPrueba(); if (!$jp) { throw new Exception("No encuentro jornadas para la prueba: {$p}"); } // buscamos las jornadas en las que esta inscrito $iobject = new Inscripciones("procesaInscripcion", $p); $inscripcion = $iobject->selectByID($i); if (!$inscripcion) { throw new Exception("No encuentro la inscripcion con ID: {$i}"); } $idp = $inscripcion['Perro']; // obtenemos los datos del perro $pobj = new Dogs("procesaInscripcion()"); $perro = $pobj->selectByID($idp); if (!$perro) { throw new Exception("No hay datos para el perro a inscribir con id: {$idp}"); } // TODO: check Dog Federation against Prueba Federation // contrastamos la lista de jornadas de la prueba con la lista de jornadas en las que esta inscrito foreach ($jp['rows'] as $jornada) { $numj = $jornada['Numero'] - 1; // obtenemos el numero de jornada $idj = $jornada['ID']; if ($jornada['Cerrada'] == 1) { $myLogger->info("La jornada {$idj} de la prueba {$p} esta cerrada"); continue; // no tocamos las jornadas cerradas } if (($inscripcion['Jornadas'] & 1 << $numj) != 0) { $myLogger->info("El perro {$idp} esta inscrito en la jornada {$idj} de la prueba {$p}"); inscribePerroEnJornada($inscripcion, $jornada, $perro); } else { $myLogger->info("El perro {$idp} NO esta inscrito en la jornada {$idj} de la prueba {$p}"); borraPerroDeJornada($inscripcion, $jornada, $perro); } } } catch (Exception $e) { do_log($e->getMessage()); echo json_encode(array('errorMsg' => $e->getMessage())); } }
/** * retrieve all inscriptions of stored prueba and jornada * @param {int} $jornadaID ID de jornada * @param {boolean} $pagination: use http_request to retrieve page and rows (true) or disable it(false) */ function inscritosByJornada($jornadaID, $pagination = true) { $this->myLogger->enter(); $pruebaid = $this->pruebaID; // Cogemos la lista de jornadas abiertas de esta prueba $j = new Jornadas("inscripciones::inscritosByJornada()", $this->pruebaID); $jornadas = $j->searchByPrueba(1, 1); // allowClosed=1, hideUnassigned=1 if ($jornadas === null || $jornadas === "") { return $this->error("{$this->file}::updateOrdenSalida() cannot get list of open Jornadas for prueba:" . $this->pruebaID); } // por cada jornada abierta, miramos a ver si la ID coincide con la que buscamos $mask = 0; foreach ($jornadas["rows"] as $jornada) { if ($jornada['ID'] == $jornadaID) { $mask = 1 << $jornada['Numero'] - 1; } // 1..8 } if ($mask == 0) { return $this->error("{$this->file}::inscritosByJornada() cannot find open Jornada ID: {$jornadaID} in prueba:" . $this->pruebaID); } $limit = ""; if ($pagination) { $page = http_request("page", "i", 1); $rows = http_request("rows", "i", 50); if ($page != 0 && $rows != 0) { $offset = ($page - 1) * $rows; $limit = $offset . "," . $rows; } } // obtenemos la lista de perros inscritos con sus datos $result = $this->__select("Inscripciones.ID AS ID, Inscripciones.Prueba AS Prueba, Inscripciones.Perro AS Perro, Raza,\n\t\t\t\tDorsal, PerroGuiaClub.Nombre AS Nombre, PerroGuiaClub.NombreLargo AS NombreLargo, Genero, Raza, Licencia, LOE_RRC, Categoria, Grado, Celo, Guia, Club, Pais, LogoClub,\n\t\t\t\tNombreGuia, NombreClub,\tInscripciones.Observaciones AS Observaciones, Jornadas, Pagado", "Inscripciones,PerroGuiaClub", "( Inscripciones.Perro = PerroGuiaClub.ID) AND\n\t\t\t\t( Inscripciones.Prueba={$pruebaid} ) AND ( ( Inscripciones.Jornadas&{$mask} ) != 0 ) ", "NombreClub ASC, Categoria ASC , Grado ASC, Nombre ASC, Celo ASC", $limit); $this->myLogger->leave(); return $result; }
case "close": $am->access(PERMS_OPERATOR); $result = $jornadas->close($jornadaid); break; case "update": $am->access(PERMS_OPERATOR); $result = $jornadas->update($jornadaid); break; case "select": $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");