]> git.llucax.com Git - z.facultad/75.43/tp1.git/blob - src/lib/faq.functions.php
88879dd9f1d0f6e0a0590f73f305fb0854ba1ce8
[z.facultad/75.43/tp1.git] / src / lib / faq.functions.php
1 <?php
2 // vim: set binary noeol et sw=4 sts=4 :
3 // Grupo 10
4 //
5 // Lucarella, Schein, Arena
6 //
7 // Creado: Jonathan Schein ( 01/05/2005 )
8 //
9 // $Id$
10
11 require_once 'Pregunta.php';
12 require_once 'Respuesta.php';
13 require_once 'file.creditos.php'; 
14 require_once 'file.php';
15 require_once 'pagina.php';
16 require_once 'file.log.php';
17
18 // Levanta las preguntas y respuestas del archivo
19 // Devuelve un array con cada una de las preguntas creadas
20 function Faq_ObtenerPreguntas()
21 {
22  // Verifica que el file que guarda las preguntas exista
23  // Si no existe, devuelve un array vacio
24  if ( file_exists ( "data/preguntas.csv" ) )
25  {
26         // Levanta las puntuaciones de preguntas desde el archivo
27         // Si existe el archivo
28         $calificaciones = array();
29         if ( file_exists ( "data/calificacion.csv" ) )
30         {
31          $fp = @fopen("data/calificacion.csv", 'r');
32          while ($data = fgetcsv ($fp, 4096)) 
33          {      
34                         $calificaciones[$data[0]] = $data[1];   
35    }
36          fclose ($fp);
37         }
38         
39         $respuestasPorPregunta = array();
40         
41         if ( file_exists ( "data/respuestas.csv" ) )
42         {
43          // Levanta todas las respuestas existentes de un archivo,
44          // Para luego vincularlas con las preguntas
45          $respuestasPlano = @fopen("data/respuestas.csv", 'r');
46         
47          $respuestaId = 1;
48          while($rowDiv = fgetcsv($respuestasPlano,4069))
49          {
50            $objRespuesta = new Respuesta;
51                  
52                  $objRespuesta->idPregunta      = $rowDiv[0];
53                  $objRespuesta->id                                      = $respuestaId;
54                  $objRespuesta->autor                   = $rowDiv[1];
55                  $objRespuesta->fecha                           = date('d/m/y H:i:s', $rowDiv[2]);
56                  $objRespuesta->texto                   = $rowDiv[3];
57                  // Agrega la calificacion de la respuesta, si es que esta calificada
58                  if ( array_key_exists($respuestaId, $calificaciones ) )
59                  {
60                                  $objRespuesta->ranking         = $calificaciones[$respuestaId];
61                  }
62                  else
63                  {
64                                  $objRespuesta->ranking         = -1;
65                  }
66                  
67                  $respuestaId++;
68                  
69                  if ( array_key_exists($objRespuesta->idPregunta, $respuestasPorPregunta ) )
70                  {
71                          $listaRespuestas = $respuestasPorPregunta[$objRespuesta->idPregunta];
72                  }
73                  else
74                  {
75                                  $listaRespuestas = array();
76                  }
77                 
78                  // Agrega la respuesta a la lista de respuestas correspondiente a una pregunta
79                  $listaRespuestas[] = $objRespuesta;
80                 
81                  // Guarda la lista de respuestas de la pregunta                
82                  $respuestasPorPregunta[$objRespuesta->idPregunta] = $listaRespuestas;   
83           }
84                 fclose($respuestasPlano);
85         }
86         
87         $preguntasDesactivadas = array();
88         
89         if ( file_exists("data/desactivadas.csv" ) )
90         {
91                 $desactivadasPlano = @fopen("data/desactivadas.csv", 'r');
92                 while ($rowDiv = fgetcsv($desactivadasPlano,4096) )
93                 {
94                  $preguntasDesactivadas[$rowDiv[0]] = "0";
95                 }
96                 fclose($desactivadasPlano);
97         } 
98         
99         $preguntasPlano = fopen("data/preguntas.csv", 'r');
100         
101         while($rowDiv = fgetcsv($preguntasPlano, 4096 ) ) 
102         {
103           $objPregunta = new Pregunta;
104
105                 $objPregunta->id                                        = $rowDiv[0];
106                 $objPregunta->autor                     = $rowDiv[1];
107                 $objPregunta->fecha                             = date('d/m/y H:i:s', $rowDiv[2]);
108                 $objPregunta->texto                     = $rowDiv[3];
109                 
110                 // Verifica si una pregunta esta activa o fue dada de baja
111                 if ( array_key_exists($objPregunta->id, $preguntasDesactivadas) )
112                 {
113                  $objPregunta->activa                   = 0;
114                 }
115                 else
116                 {
117                  $objPregunta->activa                   = 1;
118                 }
119                 
120                 // Busca las respuestas a la pregunta
121                 if ( array_key_exists($objPregunta->id, $respuestasPorPregunta ) )
122                 {
123                           // Ordena las respuestas por ranking
124                                 $objPregunta->respuestas = 
125                                                                                                                                  Faq_SortRespuestasByRanking($respuestasPorPregunta[$objPregunta->id]);
126                                                                 
127                 }
128                 
129                 $preguntas[] = $objPregunta;
130         }
131         fclose($preguntasPlano);
132         return $preguntas;
133  }
134  else
135  {
136         return;
137  }
138 }
139
140 // Obtiene la cantidad de preguntas existentes
141 // de manera rapida ( sin armar elobjeto pregunta )
142 function Faq_ObtenerCantidadPreguntas()
143 {
144  if ( file_exists ( "data/preguntas.csv" ) )
145  {
146         $preguntas = @file("data/preguntas.csv");
147         return count($preguntas);
148  }
149  else
150  {
151         return 0;
152  }
153
154 }
155 // Ingresa una pregunta en el sistema. 
156 // Tiene que haber estado validado que el usuario pueda hacerlo
157 function Faq_IngresarPregunta($Usuario, $Pregunta)
158 {
159  // Valida nuevamente que el usuario tenga los creditos suficientes para
160  // dar de alta la pregunta
161  if ( $Usuario->GetCreditos() > 0 )
162  {
163   $fecha        = time();
164         // Obtiene la lista de preguntas ya existentes
165         $cantidadPreguntas = Faq_ObtenerCantidadPreguntas();
166         
167   $NuevoId= $cantidadPreguntas + 1;
168   
169   //Formato:
170   // PreguntaId | UserId | Fecha | Pregunta
171   if( !fappendcsv("data/preguntas.csv", array($NuevoId,$Usuario->getId(),$fecha,$Pregunta) ) ) 
172         {
173                 return "Error en el archivo";
174         }
175                  
176         // Disminuye el credito del usuario, si es que no es asesor y tiene credito infinito
177         if ( !$Usuario->esAsesor() )
178         {
179          file_creditos_preguntar( $Usuario->getId() );
180         }
181         // Loguea la accion
182         file_log_add($Usuario->getId(), "Da de alta de una pregunta");
183         return "La pregunta fue dada de alta correctamente";
184  }
185  else
186  {
187         return "La pregunta no fue dada de alta. No dispone de credito suficiente";
188  }
189 }
190
191 // Ingresa una respuesta para una pregunta seleccionada
192 // Tienen que estar chequeadas las precondiciones
193 function Faq_IngresarRespuesta($PreguntaId, $UsrId, $Respuesta)
194 {
195  $Fecha = time();
196
197  //Formato:
198  // PreguntaRespondidaId| UserId | Fecha | Respuesta
199  if( !fappendcsv("data/respuestas.csv", array($PreguntaId,$UsrId,$Fecha,$Respuesta) ) ) 
200  {
201                 return "Error en el archivo";
202  }
203  
204  // Loguea la accion
205  file_log_add($UsrId, "Da de alta de una respuesta");
206  return "La respuesta fue dada de alta correctamente";
207 }
208
209 // Lista las preguntas existentes en el sistema
210 // Recibe el usuario que esta logueado, para determinar 
211 // que opciones de menu le tiene que brindar ( dar de baja pregunta,
212 // contestar pregunta, ranquear pregunta ).
213 function Faq_ListarPreguntas($Usuario)
214 {
215  $Preguntas = Faq_ObtenerPreguntas();
216  
217  $CantidadPreguntas = count($Preguntas);
218
219  if ( $CantidadPreguntas != 0 )
220  {
221   foreach($Preguntas as $ObjPregunta)
222          {
223                 if ( $ObjPregunta->activa )
224                 {
225                         $ObjPregunta->toHTML();
226 ?>
227                                 <form action="faq.responderPregunta.php" method="post"-->
228                                                         <input type="hidden" name="PreguntaId" value="<?php echo $ObjPregunta->id ?>">
229                                                         <input type=submit value="Responder Pregunta">
230                                 </form> 
231 <?php
232                 }
233          }
234  }
235  else
236  {
237         echo "NO HAY PREGUNTAS PARA MOSTRAR";
238  }
239  if ( $Usuario->esAdmin() )
240  {
241                 echo "<a href='faq.desactivarPregunta.php'>Pasar preguntas a un log historico</a><br/>";
242  }
243 }
244
245 // La funcion agrega el id de la pregunta a la lista de preguntas desactivadas
246 function Faq_DesactivarPregunta( $PreguntaId , $UsrId)
247 {
248  // Formato PreguntaID,fechaYHora
249  if( !fappendcsv("data/desactivadas.csv", array($PreguntaId, time()) ) ) 
250  {
251    return "Error en el archivo";
252  }
253  
254  // Loguea la accion
255  file_log_add($UsrId, "Pasa una respuesta a log historico");
256
257  return "La pregunta fue dada de baja, no sera listada mas, pero conservada en un historico";    
258 }
259
260 // La funcion agrega la calificacion de la respuesta en un log
261 function Faq_CalificarRespuesta( $RespuestaId, $Calificacion , $UsrId)
262 {
263  if ( file_exists ( "data/respuestas.csv" ) )
264  {
265          $respuestasPlano = @fopen("data/respuestas.csv", 'r');
266          $row = fgetcsv($respuestasPlano,4096);
267          $countRespuesta = 1;
268          while ( ( $countRespuesta != $RespuestaId ) && ( $row = fgetcsv($respuestasPlano,4096) ) )
269          {
270                 $countRespuesta ++;
271          }
272          $autorId = $row[1];
273          fclose($respuestasPlano);
274  }
275  else
276  {
277         return "No existen respuestas";
278  }
279  if( !fappendcsv("data/calificacion.csv", array($RespuestaId, $Calificacion) ) ) 
280  {
281    return "Error en el archivo";
282  }
283  if ( !file_creditos_add($autorId, $Calificacion ) )
284  {
285                 return "Error al computar los creditos al usuario";
286  }
287  
288  // Loguea la accion
289  file_log_add($UsrId, "Califica una respuesta con $Calificacion puntos");
290  return "La calificacion a la respuesta fue dada de alta";       
291 }
292
293 function Faq_SortRespuestasByRanking($respuestas)
294 {
295  $n = count($respuestas);
296  for ($i=0; $i<$n-1; $i++) 
297  {
298   for ($j=0; $j<$n-1-$i; $j++)
299     if ($respuestas[$j+1]->ranking < $respuestas[$j]->ranking) 
300                 {  
301       $tmp = $respuestas[$j];         
302       $respuestas[$j] = $respuestas[$j+1];
303       $respuestas[$j+1] = $tmp;
304         }
305         }
306         return $respuestas;
307 }
308 ?>