]> git.llucax.com Git - z.facultad/75.43/tp1.git/blob - src/lib/file.creditos.php
Se corrige documentación.
[z.facultad/75.43/tp1.git] / src / lib / file.creditos.php
1 <?php
2 // vim: set binary noeol et sw=4 sts=4 :
3 // Grupo 10
4 //
5 // Lucarella, Schein, Arena
6 //
7 // Creado: Leandro Lucarella (lun may  2 20:00:07 ART 2005)
8 //
9 // $Id$
10
11 require_once 'lib/file.php';
12
13 /**
14  * Actualiza el archivo de créditos al loguearse.
15  * Calcula si hay que restar créditos por días sin preguntar.
16  *
17  * @return Array con los nuevos valores de crétigos.
18  */
19 function file_creditos_login($user)
20 {
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,
26         $dias % 30);
27 }
28
29 /**
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
32  * días sin preguntar.
33  *
34  * @return Array con los nuevos valores de créditos.
35  */
36 function file_creditos_preguntar($user)
37 {
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);
42 }
43
44 /**
45  * Actualiza el archivo de créditos al evaluar una respuesta.
46  * Calcula si hay que agregar créditos por bonus.
47  *
48  * @return Array con los nuevos valores de créditos.
49  */
50 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
51 {
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)
57     {
58         $creditos += intval($bonus / $bonus_cant) * $bonus_cant;
59         $bonus %= $bonus_cant;
60     }
61     return file_creditos_write($user, $creditos, $bonus, $dias);
62 }
63
64 /**
65  * Obtiene los datos de la última entrada del archivo de créditos.
66  */
67 function file_creditos_get($user)
68 {
69     if (($f = fopen("data/creditos.$user.csv", 'r')) === false) return false;
70     $seek = intval(trim(fgets($f, 11)));
71     fseek($f, $seek);
72     $row = fgetcsv($f, 4096);
73     fclose($f);
74     return $row;
75 }
76
77 /**
78  * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
79  */
80 function file_creditos_write($user, $creditos, $bonus, $dias)
81 {
82     if (($f = fopen("data/creditos.$user.csv", 'a+')) === false) return false;
83     $seek = ftell($f);
84     $fecha = time();
85     fputcsv($f, array($fecha, $creditos, $bonus, $dias));
86     fseek($f, 0);
87     fwrite($f, sprintf("%010d\n", $seek), 11);
88     fclose($f);
89     return true;
90 }
91
92 /**
93  * Crea el archivo de créditos para el usuario.
94  */
95 function file_creditos_crear($user)
96 {
97     if (($f = fopen("data/creditos.$user.csv", 'w')) === false) return false;
98     fwrite($f, sprintf("%010d\n", 11), 11);
99     fputcsv($f, array(time(), 1, 0, 0));
100     fclose($f);
101     return true;
102 }
103
104 /**
105  * Convierte segundos a días.
106  */
107 function secs2dias($secs)
108 {
109     return intval($secs / 86400);
110 }
111
112 ?>