* 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 false si hay error
*/
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;
- $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)
+ {
+ return (bool)file_creditos_write($user, $creditos2, $bonus, $dias2);
+ }
+ return true;
}
/**
*/
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);
}
*/
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;
- 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;
}
/**
*/
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);
- 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').
+ *
+ * @returns array con los campos escritos.
*/
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));
- fseek($f, 0);
+ rewind($f);
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;
}