idPregunta = $rowDiv[0];
$objRespuesta->id = $respuestaId;
$objRespuesta->autorPregunta = $rowDiv[1];
$objRespuesta->autor = $rowDiv[2];
$objRespuesta->fecha = date('d/m/y H:i:s', $rowDiv[3]);
$objRespuesta->texto = $rowDiv[4];
// Agrega la calificacion de la respuesta, si es que esta calificada
if ( array_key_exists($respuestaId, $calificaciones ) )
{
$objRespuesta->ranking = $calificaciones[$respuestaId];
}
else
{
$objRespuesta->ranking = -1;
}
$respuestaId++;
if ( array_key_exists($objRespuesta->idPregunta, $respuestasPorPregunta ) )
{
$listaRespuestas = $respuestasPorPregunta[$objRespuesta->idPregunta];
}
else
{
$listaRespuestas = array();
}
// Agrega la respuesta a la lista de respuestas correspondiente a una pregunta
$listaRespuestas[] = $objRespuesta;
// Guarda la lista de respuestas de la pregunta
$respuestasPorPregunta[$objRespuesta->idPregunta] = $listaRespuestas;
}
fclose($respuestasPlano);
}
if ( array_key_exists ( $PreguntaId, $respuestasPorPregunta ) )
{
return Faq_SortRespuestasByRanking($respuestasPorPregunta[$PreguntaId]);
}
else
{
return;
}
}
// Levanta las preguntas
// Devuelve un array con cada una de las preguntas creadas
function Faq_ObtenerPreguntas()
{
// Verifica que el file que guarda las preguntas exista
// Si no existe, devuelve un array vacio
if ( file_exists ( "data/preguntas.csv" ) )
{
$preguntasDesactivadas = array();
if ( file_exists("data/desactivadas.csv" ) )
{
$desactivadasPlano = @fopen("data/desactivadas.csv", 'r');
while ($rowDiv = fgetcsv($desactivadasPlano,4096) )
{
$preguntasDesactivadas[$rowDiv[0]] = "0";
}
fclose($desactivadasPlano);
}
$preguntasPlano = fopen("data/preguntas.csv", 'r');
while($rowDiv = fgetcsv($preguntasPlano, 4096 ) )
{
$objPregunta = new Pregunta;
$objPregunta->id = $rowDiv[0];
$objPregunta->autor = $rowDiv[1];
$objPregunta->fecha = date('d/m/y H:i:s', $rowDiv[2]);
$objPregunta->texto = $rowDiv[3];
// Verifica si una pregunta esta activa o fue dada de baja
if ( array_key_exists($objPregunta->id, $preguntasDesactivadas) )
{
$objPregunta->activa = 0;
}
else
{
$objPregunta->activa = 1;
}
/* // Busca las respuestas a la pregunta
if ( array_key_exists($objPregunta->id, $respuestasPorPregunta ) )
{
// Ordena las respuestas por ranking
$objPregunta->respuestas =
Faq_SortRespuestasByRanking($respuestasPorPregunta[$objPregunta->id]);
}
*/
// Si la pregunta esta activa, la incluye en la lista de preguntas
if ( $objPregunta->activa )
{
$preguntas[] = $objPregunta;
}
}
fclose($preguntasPlano);
return $preguntas;
}
else
{
return;
}
}
// Obtiene la cantidad de preguntas existentes
// de manera rapida ( sin armar elobjeto pregunta )
function Faq_ObtenerCantidadPreguntas()
{
if ( file_exists ( "data/preguntas.csv" ) )
{
$preguntas = @file("data/preguntas.csv");
return count($preguntas);
}
else
{
return 0;
}
}
// Ingresa una pregunta en el sistema.
// Tiene que haber estado validado que el usuario pueda hacerlo
function Faq_IngresarPregunta($Usuario, $Pregunta)
{
// Valida nuevamente que el usuario tenga los creditos suficientes para
// dar de alta la pregunta
if ( $Usuario->GetCreditos() > 0 )
{
$fecha = time();
// Obtiene la lista de preguntas ya existentes
$cantidadPreguntas = Faq_ObtenerCantidadPreguntas();
$NuevoId= $cantidadPreguntas + 1;
//Formato:
// PreguntaId | UserId | Fecha | Pregunta
if( !fappendcsv("data/preguntas.csv", array($NuevoId,$Usuario->getId(),$fecha,$Pregunta) ) )
{
return error("Error en el archivo");
}
// Disminuye el credito del usuario, si es que no es asesor y tiene credito infinito
if ( !$Usuario->esAsesor() )
{
file_creditos_preguntar( $Usuario->getId() );
}
// Loguea la accion
file_log_add($Usuario->getId(), "Da de alta de una pregunta");
return ok("La pregunta fue dada de alta correctamente");
}
else
{
return error("La pregunta no fue dada de alta. No dispone de credito suficiente");
}
}
// Ingresa una respuesta para una pregunta seleccionada
// Tienen que estar chequeadas las precondiciones
function Faq_IngresarRespuesta($PreguntaId, $AutorPreguntaId, $UsrId, $Respuesta)
{
$Fecha = time();
//Formato:
// PreguntaRespondidaId| AutorDePreguntaId | UserId | Fecha | Respuesta
if( !fappendcsv("data/respuestas.csv", array($PreguntaId,$AutorPreguntaId,$UsrId,$Fecha,$Respuesta) ) )
{
return error("Error en el archivo");
}
// Loguea la accion
file_log_add($UsrId, "Da de alta de una respuesta");
return ok("La respuesta fue dada de alta correctamente");
}
function Faq_ListarPreguntas($Usuario)
{
Faq_Listador ( Faq_ObtenerPreguntas() );
if ( $Usuario->esAdmin() )
{
echo "Pasar preguntas a un log historico
";
}
}
function Faq_ListarRespuestas( $PreguntaId, $Pagina )
{
Faq_Listador ( Faq_ObtenerRespuestas($PreguntaId) , $Pagina);
}
// La funcion agrega el id de la pregunta a la lista de preguntas desactivadas
function Faq_DesactivarPregunta( $PreguntaId , $UsrId)
{
// Formato PreguntaID,fechaYHora
if( !fappendcsv("data/desactivadas.csv", array($PreguntaId, time()) ) )
{
return error("Error en el archivo");
}
// Loguea la accion
file_log_add($UsrId, "Desactiva una pregunta");
return ok("La pregunta fue dada de baja, no sera listada mas, pero conservada en un historico");
}
// La funcion agrega la calificacion de la respuesta en un log
function Faq_CalificarRespuesta( $RespuestaId, $Calificacion , $UsrId)
{
if ( file_exists ( "data/respuestas.csv" ) )
{
$respuestasPlano = @fopen("data/respuestas.csv", 'r');
$row = fgetcsv($respuestasPlano,4096);
$countRespuesta = 1;
while ( ( $countRespuesta != $RespuestaId ) && ( $row = fgetcsv($respuestasPlano,4096) ) )
{
$countRespuesta ++;
}
$autorId = $row[2];
fclose($respuestasPlano);
}
else
{
return warn("No existen respuestas");
}
if( !fappendcsv("data/calificacion.csv", array($RespuestaId, $Calificacion) ) )
{
return error("Error en el archivo");
}
$autorPregunta = new Usuario($autorId);
// da de alta los creditos, solo si no es asesor
if ( !$autorPregunta->esAsesor() )
{
if ( !file_creditos_add($autorId, $Calificacion ) )
{
return error("Error al computar los creditos al usuario");
}
}
// Loguea la accion
file_log_add($UsrId, "Califica una respuesta con $Calificacion puntos");
return ok("La calificacion a la respuesta fue dada de alta");
}
function Faq_SortRespuestasByRanking($respuestas)
{
$n = count($respuestas);
for ($i=0; $i<$n-1; $i++)
{
for ($j=0; $j<$n-1-$i; $j++)
if ($respuestas[$j+1]->ranking < $respuestas[$j]->ranking)
{
$tmp = $respuestas[$j];
$respuestas[$j] = $respuestas[$j+1];
$respuestas[$j+1] = $tmp;
}
}
return $respuestas;
}
function printfl()
{
$args = func_get_args();
$args[0] .= "\n";
call_user_func_array('printf', $args);
}
function Faq_Listador($ObjetosAListar,$link = '', $cant = 2)
{
// Calculo posiciones
$total = count($ObjetosAListar);
if (!$total)
{
echo error('No se encontraron Items');
return;
}
$from = intval(@$_GET["lista_from"]);
$c = min($total - $from, $cant);
while ( $c-- )
{
if ( array_key_exists($from, $ObjetosAListar) )
{
$obj = $ObjetosAListar[$from++];
$obj->toHTML();
}
}
printfl('
%s | ', $link, $q, $i + 1); } printfl('