]> git.llucax.com Git - z.facultad/75.43/tp1.git/blobdiff - src/lib/file.creditos.php
Se hace que se recupere la sesión.
[z.facultad/75.43/tp1.git] / src / lib / file.creditos.php
index 3b4db65cbcffc4ab6e24049b3968f332a393a0c5..4a9e9235679a1dfa17e0457cf9775806a7dd33c0 100644 (file)
@@ -14,16 +14,27 @@ require_once 'lib/file.php';
  * Actualiza el archivo de créditos al loguearse.
  * Calcula si hay que restar créditos por días sin preguntar.
  *
  * Actualiza el archivo de créditos al loguearse.
  * Calcula si hay que restar créditos por días sin preguntar.
  *
- * @return Array con los nuevos valores de crétigos.
+ * TODO ver si anda por el tema de las preguntas, que se pueden actualizar los
+ *      creditos sin que pregunte. Probablemente haya que agregar una fecha de
+ *      último chequeo para diferenciar entragas por login de entradas por
+ *      evaluar o preguntas (me parece que con 'dias' no alcanza).
+ *
+ * @return array con los campos escritos.
  */
 function file_creditos_login($user)
 {
  */
 function file_creditos_login($user)
 {
-    $row = file_creditos_get($user);
-    if (!$row) return false;
+    if (!($row = file_creditos_get($user))) return false;
     list($fecha, $creditos, $bonus, $dias) = $row;
     list($fecha, $creditos, $bonus, $dias) = $row;
-    $dias = $dias + secs2dias(time() - $fecha);
-    return file_creditos_write($user, $creditos - intval($dias / 30), $bonus,
-        $dias % 30);
+    $dias2 = $dias + secs2dias(time() - $fecha);
+    $creditos2 = $creditos - intval($dias2 / 30);
+    $dias2 %= 30;
+    if ($dias2 != $dias or $creditos2 != $creditos)
+    {
+        $ret = file_creditos_write($user, $creditos2, $bonus, $dias2);
+        if ($ret === false) return false;
+        else return array_slice($ret, 1);
+    }
+    return true;
 }
 
 /**
 }
 
 /**
@@ -35,8 +46,7 @@ function file_creditos_login($user)
  */
 function file_creditos_preguntar($user)
 {
  */
 function file_creditos_preguntar($user)
 {
-    $row = file_creditos_get($user);
-    if (!$row) return false;
+    if (!($row = file_creditos_get($user))) return false;
     list($fecha, $creditos, $bonus, $dias) = $row;
     return file_creditos_write($user, $creditos - 1, $bonus, 0);
 }
     list($fecha, $creditos, $bonus, $dias) = $row;
     return file_creditos_write($user, $creditos - 1, $bonus, 0);
 }
@@ -49,16 +59,21 @@ function file_creditos_preguntar($user)
  */
 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
 {
  */
 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
 {
-    $row = file_creditos_get($user);
-    if (!$row) return false;
+    if (!($row = file_creditos_get($user))) return false;
     list($fecha, $creditos, $bonus, $dias) = $row;
     list($fecha, $creditos, $bonus, $dias) = $row;
-    if ($es_bonus) $bonus++;
-    if ($bonus >= $bonus_cant)
+    $bonus2 = $bonus;
+    $creditos2 = $creditos;
+    if ($es_bonus) $bonus2++;
+    if ($bonus2 >= $bonus_cant)
+    {
+        $creditos2 += intval($bonus2 / $bonus_cant) * $bonus_cant;
+        $bonus2 %= $bonus_cant;
+    }
+    if ($bonus2 != $bonus or $creditos2 != $creditos)
     {
     {
-        $creditos += intval($bonus / $bonus_cant) * $bonus_cant;
-        $bonus %= $bonus_cant;
+        return (bool)file_creditos_write($user, $creditos2, $bonus2, $dias);
     }
     }
-    return file_creditos_write($user, $creditos, $bonus, $dias);
+    return true;
 }
 
 /**
 }
 
 /**
@@ -66,23 +81,52 @@ function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
  */
 function file_creditos_get($user)
 {
  */
 function file_creditos_get($user)
 {
-    if (($f = fopen("data/$user.creditos.csv", 'r')) === false) return false;
+    if (($f = fopen("data/creditos.$user.csv", 'r')) === false) return false;
     $seek = intval(trim(fgets($f, 11)));
     fseek($f, $seek);
     $seek = intval(trim(fgets($f, 11)));
     fseek($f, $seek);
-    return fgetcsv($f, 4096);
+    $row = fgetcsv($f, 4096);
+    fclose($f);
+    return $row;
+}
+
+/**
+ * Agrega $n créditos al usuario $user (false si hay error).
+ */
+function file_creditos_add($user, $n)
+{
+    if (!($row = file_creditos_get($user))) return false;
+    list($fecha, $creditos, $bonus, $dias) = $row;
+    $creditos += $n;
+    return (bool)file_creditos_write($user, $creditos, $bonus, $dias);
 }
 
 /**
  * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
 }
 
 /**
  * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
+ *
+ * @return array con los campos escritos.
  */
 function file_creditos_write($user, $creditos, $bonus, $dias)
 {
  */
 function file_creditos_write($user, $creditos, $bonus, $dias)
 {
-    if (($f = fopen("data/$user.creditos.csv", 'a+')) === false) return false;
+    if (($f = fopen("data/creditos.$user.csv", 'r+')) === false) return false;
+    fseek($f, 0, SEEK_END);
     $seek = ftell($f);
     $fecha = time();
     fputcsv($f, array($fecha, $creditos, $bonus, $dias));
     $seek = ftell($f);
     $fecha = time();
     fputcsv($f, array($fecha, $creditos, $bonus, $dias));
-    fseek($f, 0);
+    rewind($f);
     fwrite($f, sprintf("%010d\n", $seek), 11);
     fwrite($f, sprintf("%010d\n", $seek), 11);
+    fclose($f);
+    return array($fecha, $creditos, $bonus, $dias);
+}
+
+/**
+ * Crea el archivo de créditos para el usuario.
+ */
+function file_creditos_crear($user)
+{
+    if (($f = fopen("data/creditos.$user.csv", 'w')) === false) return false;
+    fwrite($f, sprintf("%010d\n", 11), 11);
+    fputcsv($f, array(time(), 1, 0, 0));
+    fclose($f);
     return true;
 }
 
     return true;
 }