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 Array con los nuevos valores de crétigos.
19 function file_creditos_login($user)
21 $row = file_creditos_get($user);
22 if (!$row) return false;
23 list($fecha, $creditos, $bonus, $dias) = $row;
24 $dias = $dias + secs2dias(time() - $fecha);
25 return file_creditos_write($user, $creditos - intval($dias / 30), $bonus,
30 * Actualiza el archivo de créditos al hacer una pregunta.
31 * Se resta un crédito por hacer la pregunta y se resetea la cantidad de
34 * @return Array con los nuevos valores de créditos.
36 function file_creditos_preguntar($user)
38 $row = file_creditos_get($user);
39 if (!$row) return false;
40 list($fecha, $creditos, $bonus, $dias) = $row;
41 return file_creditos_write($user, $creditos - 1, $bonus, 0);
45 * Actualiza el archivo de créditos al evaluar una respuesta.
46 * Calcula si hay que agregar créditos por bonus.
48 * @return Array con los nuevos valores de créditos.
50 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
52 $row = file_creditos_get($user);
53 if (!$row) return false;
54 list($fecha, $creditos, $bonus, $dias) = $row;
55 if ($es_bonus) $bonus++;
56 if ($bonus >= $bonus_cant)
58 $creditos += intval($bonus / $bonus_cant) * $bonus_cant;
59 $bonus %= $bonus_cant;
61 return file_creditos_write($user, $creditos, $bonus, $dias);
65 * Obtiene los datos de la última entrada del archivo de créditos.
67 function file_creditos_get($user)
69 if (($f = fopen("data/$user.creditos.csv", 'r')) === false) return false;
70 $seek = intval(trim(fgets($f, 11)));
72 $row = fgetcsv($f, 4096);
78 * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
80 function file_creditos_write($user, $creditos, $bonus, $dias)
82 if (($f = fopen("data/$user.creditos.csv", 'a+')) === false) return false;
85 fputcsv($f, array($fecha, $creditos, $bonus, $dias));
87 fwrite($f, sprintf("%010d\n", $seek), 11);
93 * Crea el archivo de créditos para el usuario.
95 function file_creditos_crear($user)
97 if (($f = fopen("data/$user.creditos.csv", 'w')) === false) return false;
98 fwrite($f, sprintf("%010d\n", 11), 11);
99 fputcsv($f, array(time(), 1, 0, 0));
105 * Convierte segundos a días.
107 function secs2dias($secs)
109 return intval($secs / 86400);