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
$this->entrega = $ent;
$this->intento = $intento;
$this->cuatrimestre = $cuat;
- $this->base_dir = 'intentos';
}
/**
*/
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;
$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
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}";
}
}