From: Leandro Lucarella Date: Thu, 10 Feb 2005 23:14:11 +0000 (+0000) Subject: Cambios en el esquema de la DB. X-Git-Tag: svn_import~105 X-Git-Url: https://git.llucax.com/software/sercom-old.git/commitdiff_plain/0e40dd2e846ce3354468ecc08f501a69f8a56929 Cambios en el esquema de la DB. --- diff --git a/doc/schema.dia b/doc/schema.dia index 7989f57..57155d3 100644 Binary files a/doc/schema.dia and b/doc/schema.dia differ diff --git a/doc/schema.sql b/doc/schema.sql index 556ef70..44b0504 100644 --- a/doc/schema.sql +++ b/doc/schema.sql @@ -20,7 +20,7 @@ CREATE TABLE inscripto curso_id INTEGER NOT NULL, -- campos mail VARCHAR(150) NOT NULL, - activo INTEGER(1) NOT NULL DEFAULT 1, + activo BOOLEAN NOT NULL DEFAULT 1, UNIQUE (padron, curso_id) ); @@ -31,7 +31,7 @@ CREATE TABLE docente nombre VARCHAR(150) NOT NULL, -- campos mail VARCHAR(150) NOT NULL, - corrige INTEGER(1) NOT NULL DEFAULT 1, + corrige BOOLEAN NOT NULL DEFAULT 1, UNIQUE (nombre) ); @@ -75,10 +75,11 @@ CREATE TABLE caso_de_prueba ejercicio_id INTEGER NOT NULL, nombre VARCHAR(255) NOT NULL, -- campos - privado INTEGER(1) NOT NULL, - activo INTEGER(1) NOT NULL DEFAULT 1, + privado BOOLEAN NOT NULL, + activo BOOLEAN NOT NULL DEFAULT 1, parametros VARCHAR(255), - salidas VARCHAR(255), + codigo_retorno INTEGER DEFAULT 0, + tiempo_cpu INTEGER DEFAULT NULL, UNIQUE (ejercicio_id, nombre) ); @@ -91,10 +92,12 @@ CREATE TABLE intento numero INTEGER NOT NULL, -- campos llegada DATE NOT NULL, + inicio_compila DATE, + fin_compila DATE, inicio_pruebas DATE, fin_pruebas DATE, - compila_ok INTEGER(1), - notificado INTEGER(1) NOT NULL DEFAULT 0, + compila BOOLEAN, + notificado BOOLEAN NOT NULL DEFAULT 0, mail_respuesta VARCHAR(150) NOT NULL, observaciones VARCHAR(255), UNIQUE (entrega_id, inscripto_id, llegada) @@ -123,8 +126,7 @@ CREATE TABLE prueba -- campos inicio DATE NOT NULL, fin DATE, - memoria_ok INTEGER(1), - salida_ok INTEGER(1), + pasada BOOLEAN, observaciones VARCHAR(255), UNIQUE (intento_id, caso_de_prueba_id) ); diff --git a/src/T/DBO/Caso_de_prueba.php b/src/T/DBO/Caso_de_prueba.php index ccbe0f1..2cf6765 100644 --- a/src/T/DBO/Caso_de_prueba.php +++ b/src/T/DBO/Caso_de_prueba.php @@ -13,7 +13,8 @@ class T_DBO_Caso_de_prueba extends DB_DataObject var $privado; var $activo; var $parametros; - var $salidas; + var $codigo_retorno; + var $tiempo_cpu; /* Static get */ function staticGet($k, $v = NULL) @@ -26,13 +27,14 @@ class T_DBO_Caso_de_prueba extends DB_DataObject function table() { return array( - 'id' => DB_DATAOBJECT_INT, - 'ejercicio_id' => DB_DATAOBJECT_INT, - 'nombre' => DB_DATAOBJECT_STR, - 'privado' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, - 'activo' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, - 'parametros' => DB_DATAOBJECT_STR, - 'salidas' => DB_DATAOBJECT_STR, + 'id' => DB_DATAOBJECT_INT, + 'ejercicio_id' => DB_DATAOBJECT_INT, + 'nombre' => DB_DATAOBJECT_STR, + 'privado' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, + 'activo' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, + 'parametros' => DB_DATAOBJECT_STR, + 'codigo_retorno' => DB_DATAOBJECT_INT, + 'tiempo_cpu' => DB_DATAOBJECT_INT, ); } diff --git a/src/T/DBO/Intento.php b/src/T/DBO/Intento.php index 2295955..ba05463 100644 --- a/src/T/DBO/Intento.php +++ b/src/T/DBO/Intento.php @@ -12,9 +12,11 @@ class T_DBO_Intento extends DB_DataObject var $entrega_id; var $numero; var $llegada; - var $inicio_prueba; - var $fin_prueba; - var $compila_ok; + var $inicio_compila; + var $fin_compila; + var $inicio_pruebas; + var $fin_pruebas; + var $compila; var $notificado; var $mail_respuesta; var $observaciones; @@ -35,9 +37,11 @@ class T_DBO_Intento extends DB_DataObject 'entrega_id' => DB_DATAOBJECT_INT, 'numero' => DB_DATAOBJECT_INT, 'llegada' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'inicio_prueba' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'fin_prueba' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'compila_ok' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, + 'inicio_compila' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'fin_compila' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'inicio_pruebas' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'fin_pruebas' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, + 'compila' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, 'notificado' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, 'mail_respuesta' => DB_DATAOBJECT_STR, 'observaciones' => DB_DATAOBJECT_STR + DB_DATAOBJECT_TXT, diff --git a/src/T/DBO/Prueba.php b/src/T/DBO/Prueba.php index 53fb1ff..87d7407 100644 --- a/src/T/DBO/Prueba.php +++ b/src/T/DBO/Prueba.php @@ -12,8 +12,7 @@ class T_DBO_Prueba extends DB_DataObject var $caso_de_prueba_id; var $inicio; var $fin; - var $memoria_ok; - var $salida_ok; + var $pasada; var $observaciones; /* Static get */ @@ -32,8 +31,7 @@ class T_DBO_Prueba extends DB_DataObject 'caso_de_prueba_id' => DB_DATAOBJECT_INT, 'inicio' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, 'fin' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, - 'memoria_ok' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, - 'salida_ok' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, + 'pasada' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL, 'observaciones' => DB_DATAOBJECT_STR + DB_DATAOBJECT_TXT, ); } diff --git a/src/T/Intento.php b/src/T/Intento.php index 6a09a07..e758a0d 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 @@ -70,9 +72,6 @@ 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(); @@ -81,7 +80,7 @@ EOT; 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'; @@ -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