2 // vim: set binary noeol et sw=4 sts=4 :
5 // Lucarella, Schein, Arena
7 // Creado: Leandro Lucarella (lun may 2 20:00:07 ART 2005)
11 require_once 'lib/file.php';
14 * Actualiza el archivo de créditos al loguearse.
15 * Calcula si hay que restar créditos por días sin preguntar.
17 * @return false si hay error
19 function file_creditos_login($user)
21 if (!($row = file_creditos_get($user))) return false;
22 list($fecha, $creditos, $bonus, $dias) = $row;
23 $dias2 = $dias + secs2dias(time() - $fecha);
24 $creditos2 = $creditos - intval($dias2 / 30);
26 if ($dias2 != $dias or $creditos2 != $creditos)
28 return (bool)file_creditos_write($user, $creditos2, $bonus, $dias2);
34 * Actualiza el archivo de créditos al hacer una pregunta.
35 * Se resta un crédito por hacer la pregunta y se resetea la cantidad de
38 * @return Array con los nuevos valores de créditos.
40 function file_creditos_preguntar($user)
42 $row = file_creditos_get($user);
43 if (!$row) return false;
44 list($fecha, $creditos, $bonus, $dias) = $row;
45 return file_creditos_write($user, $creditos - 1, $bonus, 0);
49 * Actualiza el archivo de créditos al evaluar una respuesta.
50 * Calcula si hay que agregar créditos por bonus.
52 * @return Array con los nuevos valores de créditos.
54 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
56 $row = file_creditos_get($user);
57 if (!$row) return false;
58 list($fecha, $creditos, $bonus, $dias) = $row;
59 if ($es_bonus) $bonus++;
60 if ($bonus >= $bonus_cant)
62 $creditos += intval($bonus / $bonus_cant) * $bonus_cant;
63 $bonus %= $bonus_cant;
65 return file_creditos_write($user, $creditos, $bonus, $dias);
69 * Obtiene los datos de la última entrada del archivo de créditos.
71 function file_creditos_get($user)
73 if (($f = fopen("data/creditos.$user.csv", 'r')) === false) return false;
74 $seek = intval(trim(fgets($f, 11)));
76 $row = fgetcsv($f, 4096);
82 * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
84 * @returns array con los campos escritos.
86 function file_creditos_write($user, $creditos, $bonus, $dias)
88 if (($f = fopen("data/creditos.$user.csv", 'r+')) === false) return false;
89 fseek($f, 0, SEEK_END);
92 fputcsv($f, array($fecha, $creditos, $bonus, $dias));
94 fwrite($f, sprintf("%010d\n", $seek), 11);
96 return array($fecha, $creditos, $bonus, $dias);
100 * Crea el archivo de créditos para el usuario.
102 function file_creditos_crear($user)
104 if (($f = fopen("data/creditos.$user.csv", 'w')) === false) return false;
105 fwrite($f, sprintf("%010d\n", 11), 11);
106 fputcsv($f, array(time(), 1, 0, 0));
112 * Convierte segundos a días.
114 function secs2dias($secs)
116 return intval($secs / 86400);