]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/T/Intento.php
Se agrega un timeout a sqlite para que espere si esta lockeada la DB.
[software/sercom-old.git] / src / T / Intento.php
index 6a09a07c3017a3d980c892d20bd369836c47e80e..1b71b49fe0edf743b6942c0980fc1b48e721a06d 100644 (file)
@@ -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}";
     }
 
 }