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)
);
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)
);
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)
);
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)
-- 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)
);
var $privado;
var $activo;
var $parametros;
- var $salidas;
+ var $codigo_retorno;
+ var $tiempo_cpu;
/* Static get */
function staticGet($k, $v = NULL)
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,
);
}
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;
'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,
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
*/
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();
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->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