2 // vim: set binary noeol et sw=4 sts=4 :
5 // Lucarella, Schein, Arena
7 // Creado: Jonathan Schein ( 01/05/2005 )
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';
18 // Levanta las preguntas y respuestas del archivo
19 // Devuelve un array con cada una de las preguntas creadas
20 function Faq_ObtenerPreguntas()
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" ) )
26 // Levanta las puntuaciones de preguntas desde el archivo
27 // Si existe el archivo
28 $calificaciones = array();
29 if ( file_exists ( "data/calificacion.csv" ) )
31 $fp = @fopen("data/calificacion.csv", 'r');
32 while ($data = fgetcsv ($fp, 4096))
34 $calificaciones[$data[0]] = $data[1];
39 $respuestasPorPregunta = array();
41 if ( file_exists ( "data/respuestas.csv" ) )
43 // Levanta todas las respuestas existentes de un archivo,
44 // Para luego vincularlas con las preguntas
45 $respuestasPlano = @fopen("data/respuestas.csv", 'r');
48 while($rowDiv = fgetcsv($respuestasPlano,4069))
50 $objRespuesta = new Respuesta;
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 ) )
60 $objRespuesta->ranking = $calificaciones[$respuestaId];
64 $objRespuesta->ranking = -1;
69 if ( array_key_exists($objRespuesta->idPregunta, $respuestasPorPregunta ) )
71 $listaRespuestas = $respuestasPorPregunta[$objRespuesta->idPregunta];
75 $listaRespuestas = array();
78 // Agrega la respuesta a la lista de respuestas correspondiente a una pregunta
79 $listaRespuestas[] = $objRespuesta;
81 // Guarda la lista de respuestas de la pregunta
82 $respuestasPorPregunta[$objRespuesta->idPregunta] = $listaRespuestas;
84 fclose($respuestasPlano);
87 $preguntasDesactivadas = array();
89 if ( file_exists("data/desactivadas.csv" ) )
91 $desactivadasPlano = @fopen("data/desactivadas.csv", 'r');
92 while ($rowDiv = fgetcsv($desactivadasPlano,4096) )
94 $preguntasDesactivadas[$rowDiv[0]] = "0";
96 fclose($desactivadasPlano);
99 $preguntasPlano = fopen("data/preguntas.csv", 'r');
101 while($rowDiv = fgetcsv($preguntasPlano, 4096 ) )
103 $objPregunta = new Pregunta;
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];
110 // Verifica si una pregunta esta activa o fue dada de baja
111 if ( array_key_exists($objPregunta->id, $preguntasDesactivadas) )
113 $objPregunta->activa = 0;
117 $objPregunta->activa = 1;
120 // Busca las respuestas a la pregunta
121 if ( array_key_exists($objPregunta->id, $respuestasPorPregunta ) )
123 // Ordena las respuestas por ranking
124 $objPregunta->respuestas =
125 Faq_SortRespuestasByRanking($respuestasPorPregunta[$objPregunta->id]);
129 $preguntas[] = $objPregunta;
131 fclose($preguntasPlano);
140 // Obtiene la cantidad de preguntas existentes
141 // de manera rapida ( sin armar elobjeto pregunta )
142 function Faq_ObtenerCantidadPreguntas()
144 if ( file_exists ( "data/preguntas.csv" ) )
146 $preguntas = @file("data/preguntas.csv");
147 return count($preguntas);
155 // Ingresa una pregunta en el sistema.
156 // Tiene que haber estado validado que el usuario pueda hacerlo
157 function Faq_IngresarPregunta($Usuario, $Pregunta)
159 // Valida nuevamente que el usuario tenga los creditos suficientes para
160 // dar de alta la pregunta
161 if ( $Usuario->GetCreditos() > 0 )
164 // Obtiene la lista de preguntas ya existentes
165 $cantidadPreguntas = Faq_ObtenerCantidadPreguntas();
167 $NuevoId= $cantidadPreguntas + 1;
170 // PreguntaId | UserId | Fecha | Pregunta
171 if( !fappendcsv("data/preguntas.csv", array($NuevoId,$Usuario->getId(),$fecha,$Pregunta) ) )
173 return "Error en el archivo";
176 // Disminuye el credito del usuario, si es que no es asesor y tiene credito infinito
177 if ( !$Usuario->esAsesor() )
179 file_creditos_preguntar( $Usuario->getId() );
182 file_log_add($Usuario->getId(), "Da de alta de una pregunta");
183 return "La pregunta fue dada de alta correctamente";
187 return "La pregunta no fue dada de alta. No dispone de credito suficiente";
191 // Ingresa una respuesta para una pregunta seleccionada
192 // Tienen que estar chequeadas las precondiciones
193 function Faq_IngresarRespuesta($PreguntaId, $UsrId, $Respuesta)
198 // PreguntaRespondidaId| UserId | Fecha | Respuesta
199 if( !fappendcsv("data/respuestas.csv", array($PreguntaId,$UsrId,$Fecha,$Respuesta) ) )
201 return "Error en el archivo";
205 file_log_add($UsrId, "Da de alta de una respuesta");
206 return "La respuesta fue dada de alta correctamente";
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)
215 $Preguntas = Faq_ObtenerPreguntas();
217 $CantidadPreguntas = count($Preguntas);
219 if ( $CantidadPreguntas != 0 )
221 foreach($Preguntas as $ObjPregunta)
223 if ( $ObjPregunta->activa )
225 $ObjPregunta->toHTML();
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">
237 echo "NO HAY PREGUNTAS PARA MOSTRAR";
239 if ( $Usuario->esAdmin() )
241 echo "<a href='faq.desactivarPregunta.php'>Pasar preguntas a un log historico</a><br/>";
245 function Faq_ListarPreguntas($Usuario)
247 Faq_Listador ( Faq_ObtenerPreguntas() );
250 // La funcion agrega el id de la pregunta a la lista de preguntas desactivadas
251 function Faq_DesactivarPregunta( $PreguntaId , $UsrId)
253 // Formato PreguntaID,fechaYHora
254 if( !fappendcsv("data/desactivadas.csv", array($PreguntaId, time()) ) )
256 return "Error en el archivo";
260 file_log_add($UsrId, "Pasa una respuesta a log historico");
262 return "La pregunta fue dada de baja, no sera listada mas, pero conservada en un historico";
265 // La funcion agrega la calificacion de la respuesta en un log
266 function Faq_CalificarRespuesta( $RespuestaId, $Calificacion , $UsrId)
268 if ( file_exists ( "data/respuestas.csv" ) )
270 $respuestasPlano = @fopen("data/respuestas.csv", 'r');
271 $row = fgetcsv($respuestasPlano,4096);
273 while ( ( $countRespuesta != $RespuestaId ) && ( $row = fgetcsv($respuestasPlano,4096) ) )
278 fclose($respuestasPlano);
282 return "No existen respuestas";
284 if( !fappendcsv("data/calificacion.csv", array($RespuestaId, $Calificacion) ) )
286 return "Error en el archivo";
288 if ( !file_creditos_add($autorId, $Calificacion ) )
290 return "Error al computar los creditos al usuario";
294 file_log_add($UsrId, "Califica una respuesta con $Calificacion puntos");
295 return "La calificacion a la respuesta fue dada de alta";
298 function Faq_SortRespuestasByRanking($respuestas)
300 $n = count($respuestas);
301 for ($i=0; $i<$n-1; $i++)
303 for ($j=0; $j<$n-1-$i; $j++)
304 if ($respuestas[$j+1]->ranking < $respuestas[$j]->ranking)
306 $tmp = $respuestas[$j];
307 $respuestas[$j] = $respuestas[$j+1];
308 $respuestas[$j+1] = $tmp;
315 $args = func_get_args();
317 call_user_func_array('printf', $args);
320 function Faq_Listador($ObjetosAListar,$link = '', $cant = 2)
322 // Calculo posiciones
323 $total = count($ObjetosAListar);
326 echo error('No se encontraron Items');
329 $from = intval(@$_GET["lista_from"]);
330 $c = min($total - $from, $cant);
334 if ( array_key_exists($from, $ObjetosAListar) )
336 $obj = $ObjetosAListar[$from++];
342 printfl('<table summary="Paginador" border="0"><tr>');
343 $pags = ceil($total / $cant);
344 if ($pags == 1) return; // Si tengo una sóla página, para qué el paginador?
345 // Arrastro query string, si corresponde
346 if ( isset($_SERVER['QUERY_STRING'] ) )
348 $query = $_SERVER['QUERY_STRING'];
354 if (($pos = strpos($query, 'lista_from=')) !== false)
356 if ($pos) $query = substr($query, 0, --$pos);
359 for ($i = 0; $i < $pags; ++$i)
362 $q = $query ? "$query&lista_from=$from" : "lista_from=$from";
363 printfl('<td><a href="%s?%s">%s</a></td>', $link, $q, $i + 1);
365 printfl('</tr></table>');