]> git.llucax.com Git - z.facultad/75.43/tp1.git/blob - src/lib/file.creditos.php
Bugfix y se hace que se actualicen los créditos en el login sólo si es
[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 false si hay error
18  */
19 function file_creditos_login($user)
20 {
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);
25     $dias2 %= 30;
26     if ($dias2 != $dias or $creditos2 != $creditos)
27     {
28         return (bool)file_creditos_write($user, $creditos2, $bonus, $dias2);
29     }
30     return true;
31 }
32
33 /**
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
36  * días sin preguntar.
37  *
38  * @return Array con los nuevos valores de créditos.
39  */
40 function file_creditos_preguntar($user)
41 {
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);
46 }
47
48 /**
49  * Actualiza el archivo de créditos al evaluar una respuesta.
50  * Calcula si hay que agregar créditos por bonus.
51  *
52  * @return Array con los nuevos valores de créditos.
53  */
54 function file_creditos_evaluar($user, $es_bonus = false, $bonus_cant = 5)
55 {
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)
61     {
62         $creditos += intval($bonus / $bonus_cant) * $bonus_cant;
63         $bonus %= $bonus_cant;
64     }
65     return file_creditos_write($user, $creditos, $bonus, $dias);
66 }
67
68 /**
69  * Obtiene los datos de la última entrada del archivo de créditos.
70  */
71 function file_creditos_get($user)
72 {
73     if (($f = fopen("data/creditos.$user.csv", 'r')) === false) return false;
74     $seek = intval(trim(fgets($f, 11)));
75     fseek($f, $seek);
76     $row = fgetcsv($f, 4096);
77     fclose($f);
78     return $row;
79 }
80
81 /**
82  * Escribe una nueva entrada en el archivo de créditos (actualiza el 'índice').
83  *
84  * @returns array con los campos escritos.
85  */
86 function file_creditos_write($user, $creditos, $bonus, $dias)
87 {
88     if (($f = fopen("data/creditos.$user.csv", 'r+')) === false) return false;
89     fseek($f, 0, SEEK_END);
90     $seek = ftell($f);
91     $fecha = time();
92     fputcsv($f, array($fecha, $creditos, $bonus, $dias));
93     rewind($f);
94     fwrite($f, sprintf("%010d\n", $seek), 11);
95     fclose($f);
96     return array($fecha, $creditos, $bonus, $dias);
97 }
98
99 /**
100  * Crea el archivo de créditos para el usuario.
101  */
102 function file_creditos_crear($user)
103 {
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));
107     fclose($f);
108     return true;
109 }
110
111 /**
112  * Convierte segundos a días.
113  */
114 function secs2dias($secs)
115 {
116     return intval($secs / 86400);
117 }
118
119 ?>