X-Git-Url: https://git.llucax.com/software/sercom-old.git/blobdiff_plain/5174fa9bd71e4f671d9788707e106296638a3c63..f7e9983536a41de9fcf56d8e9d074092c706abe7:/src/T/Intento.php?ds=inline diff --git a/src/T/Intento.php b/src/T/Intento.php index 6a09a07..1b71b49 100644 --- a/src/T/Intento.php +++ b/src/T/Intento.php @@ -5,6 +5,8 @@ require_once 'DB/DataObject.php'; require_once 'T/code.php'; require_once 'T/Prueba.php'; +define('DATE_FORMAT', '%Y-%m-%d %H:%M:%S.000000'); + /// @todo Poner todos los querys con quoting ('?'). /// @todo Mejorar manejo de errores con PEAR. class T_Intento @@ -34,7 +36,6 @@ class T_Intento $this->entrega = $ent; $this->intento = $intento; $this->cuatrimestre = $cuat; - $this->base_dir = 'intentos'; } /** @@ -70,24 +71,22 @@ EOT; */ function validar_entrega($code, $claves) { - $query = "SELECT C.id, C.anio, C.cuatrimestre, C.curso - FROM alumno A JOIN cuatrimestre C ON (A.id_cuatrimestre = C.id) - WHERE A.padron = {$this->padron} AND C.activo = 1"; $inscripto = DB_DataObject::factory('inscripto'); if (!$inscripto->getFrom($this->padron)) return 'El alumno no está inscripto'; $inscripto->getLinks(); $cuat = $inscripto->_curso_id->toLine(); + $this->inscripto = $inscripto; $this->cuatrimestre = $cuat; if (!T_chequear_codigo($code, $this->padron, $claves)) return 'La clave de la entrega no es válida'; $this->llegada = time(); - $date = date('Y-m-d H:i:s', $this->llegada); + $date = strftime(DATE_FORMAT, $this->llegada); $entrega = DB_DataObject::factory('entrega'); $entrega->getFrom($inscripto->curso_id, $this->ejercicio, $this->entrega); if (!($entrega->desde <= $date and $entrega->hasta >= $date)) return 'El ejercicio está siendo entregado fuera de fecha'; $intento = DB_DataObject::factory('intento'); - $intento->id_entrega = $entrega->id; - $intento->id_inscripto = $inscripto->id; + $intento->entrega_id = $entrega->id; + $intento->inscripto_id = $inscripto->id; $cant = $intento->find(); $this->intento = 1 + $cant; $this->id_entrega = $entrega->id; @@ -108,85 +107,11 @@ EOT; $intento->inscripto_id = $this->id_inscripto; $intento->entrega_id = $this->id_entrega; $intento->numero = $this->intento; - $intento->llegada = date('Y-m-d H:i:s', $this->llegada); + $intento->llegada = strftime(DATE_FORMAT, $this->llegada); $intento->mail_respuesta = $mail; return $intento->insert(); } - /** - * Pone en los atributos publicos cuatrimestre, padron, entrega, ejercicio e intento - * retorna true si encuentra alguno y false sino. - */ - function proximo_a_probar() - { - $result = $this->db->getRow("SELECT cuatrimestre, padron, ejercicio, entrega, intento, mail - FROM intento - WHERE inicio_pruebas is null - ORDER BY llegada - LIMIT 1"); - if (DB::isError($result) or is_null($result)) return false; - $date = date('YmdHis'); - $this->cuatrimestre = $result[0]; - $this->padron = $result[1]; - $this->ejercicio = $result[2]; - $this->entrega = $result[3]; - $this->intento = $result[4]; - $this->db->query("UPDATE intento SET inicio_pruebas = '$date' - WHERE cuatrimestre = {$this->cuatrimestre} AND - padron = {$this->padron} AND - ejercicio = {$this->ejercicio} AND - entrega = {$this->entrega} AND - intento = {$this->intento}"); - return $result[5]; - } - - /** - * Toma de los atributos publicos cuatrimestre, padron, entrega, ejercicio e intento - * el parametro indica si compilo ok es true, sino es false - */ - function informar_compilacion($compilo_ok) - { - if ($compilo_ok) $compilo_ok = 1; - else $compilo_ok = 0; - $date = date('YmdHis'); - - return $this->db->query(" - UPDATE intento SET fin_pruebas = '$date' AND compila_ok = $compilo_ok - WHERE cuatrimestre = {$this->cuatrimestre} AND - padron = {$this->padron} AND - ejercicio = {$this->ejercicio} AND - entrega = {$this->entrega} AND - intento = {$this->intento}"); - } - - /** - * Toma de los atributos publicos cuatrimestre, padron, entrega, ejercicio e intento - * carga el atributo publico caso_de_prueba con el proximo caso de prueba a usar - * devuelve true si encuentra alguno, sino devuelve false - */ - function pedir_caso_de_prueba() - { - $prueba = $this->db->getRow(" - SELECT C.caso_de_prueba, C.privado, C.descripcion, C.parametros, C.salidas - FROM caso_de_prueba as C - WHERE C.cuatrimestre = $this->cuatrimestre AND - C.ejercicio = $this->ejercicio AND - C.entrega = $this->entrega AND - C.caso_de_prueba NOT IN ( - SELECT P.caso_de_prueba from prueba as P - WHERE P.cuatrimestre = $this->cuatrimestre - AND P.entrega = $this->entrega - AND P.ejercicio = $this->ejercicio - AND P.padron = $this->padron - AND P.intento = $this->intento - )"); - if (!is_null($prueba) && !DB::isError($prueba)) { - list($id, $priv, $desc, $params, $salidas) = $prueba; - return new T_Prueba($id, $priv, $desc, $params, $salidas); - } - return $prueba; - } - /** * Toma de los atributos publicos cuatrimestre, padron, entrega, ejerciico e intento * Carga los resultados de una prueba en un nuevo registro en prueba @@ -258,23 +183,17 @@ EOT; return $mail; } - /** - * Obtiene el directorio en el cual se almacena el intento. - */ - function path() { - return $this->base_path() . "/{$this->padron}/{$this->intento}"; - } - /** * Obtiene el directorio base de la entrega. * El directorio base no contempla los datos propios del intento, como * padrón e intento. - * @param base_dir Directorio base, si no se especifica se usa el directorio - * base del intento. + * @param base_dir Directorio base. */ - function base_path($base_dir = null) { - if (is_null($base_dir)) $base_dir = $this->base_dir; - return "$base_dir/{$this->cuatrimestre}/{$this->ejercicio}-{$this->entrega}"; + function path($base_dir) { + $curso = $this->inscripto->_curso_id; + return "$base_dir/{$curso->anio}.{$curso->cuatrimestre}/" + . "{$curso->curso}.{$this->ejercicio}.{$this->entrega}/" + . "{$this->padron}.{$this->intento}"; } }