X-Git-Url: https://git.llucax.com/z.facultad/75.43/tp1.git/blobdiff_plain/e92b831febcf1737682bfb7aa28c552a0dc8dabb..08de4b17e5c06824b84120d67479eef7cfdaba21:/src/lib/faq.functions.php diff --git a/src/lib/faq.functions.php b/src/lib/faq.functions.php index 929af47..3ce9649 100644 --- a/src/lib/faq.functions.php +++ b/src/lib/faq.functions.php @@ -12,46 +12,45 @@ require_once 'Pregunta.php'; require_once 'Respuesta.php'; require_once 'file.creditos.php'; require_once 'file.php'; +require_once 'pagina.php'; +require_once 'file.log.php'; -// Levanta las preguntas y respuestas del archivo -// Devuelve un array con cada una de las preguntas creadas -function Faq_ObtenerPreguntas() +// Levanta las respuestas del archivo, y devuelve +// todas las respuestas para una pregunta determinada +function Faq_ObtenerRespuestas($PreguntaId) { - // Verifica que el file que guarda las preguntas exista - // Si no existe, devuelve un array vacio - if ( file_exists ( "data/preguntas.txt" ) ) - { - // Levanta las puntuaciones de preguntas desde el archivo + // Levanta las puntuaciones de respuestas desde el archivo // Si existe el archivo $calificaciones = array(); - if (($fp = fopen('data/calificacion.csv', 'r')) === true) + if ( file_exists ( "data/calificacion.csv" ) ) { - while ($data = fgetcsv ($fp, 4096)) - { - $calificaciones[$data[0]] = $data[1]; - } - fclose ($fp); + $fp = @fopen("data/calificacion.csv", 'r'); + while ($data = fgetcsv ($fp, 4096)) + { + $calificaciones[$data[0]] = $data[1]; + } + fclose ($fp); } $respuestasPorPregunta = array(); - if ( file_exists ( "data/respuestas.txt" ) ) + if ( file_exists ( "data/respuestas.csv" ) ) { // Levanta todas las respuestas existentes de un archivo, // Para luego vincularlas con las preguntas - $respuestasPlano = file("data/respuestas.txt"); + $respuestasPlano = @fopen("data/respuestas.csv", 'r'); - $respuestaId = 0; - foreach($respuestasPlano as $row) + $respuestaId = 1; + while($rowDiv = fgetcsv($respuestasPlano,4069)) { $objRespuesta = new Respuesta; - $rowDiv = explode("|",$row); - $objRespuesta->idPregunta = $rowDiv[0]; + $objRespuesta->idPregunta = $rowDiv[0]; $objRespuesta->id = $respuestaId; - $objRespuesta->autor = $rowDiv[1]; - $objRespuesta->fecha = date('d/m/y H:i:s', $rowDiv[2]); - $objRespuesta->texto = $rowDiv[3]; + $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 ) ) { @@ -79,27 +78,43 @@ function Faq_ObtenerPreguntas() // 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.txt" ) ) + if ( file_exists("data/desactivadas.csv" ) ) { - $desactivadasPlano = file("data/desactivadas.txt"); - foreach ($desactivadasPlano as $row) + $desactivadasPlano = @fopen("data/desactivadas.csv", 'r'); + while ($rowDiv = fgetcsv($desactivadasPlano,4096) ) { - $rowDiv = explode("|",$row); $preguntasDesactivadas[$rowDiv[0]] = "0"; } + fclose($desactivadasPlano); } - $preguntasPlano = file("data/preguntas.txt"); + $preguntasPlano = fopen("data/preguntas.csv", 'r'); - foreach($preguntasPlano as $row) + while($rowDiv = fgetcsv($preguntasPlano, 4096 ) ) { $objPregunta = new Pregunta; - $rowDiv = explode("|",$row); $objPregunta->id = $rowDiv[0]; $objPregunta->autor = $rowDiv[1]; $objPregunta->fecha = date('d/m/y H:i:s', $rowDiv[2]); @@ -115,14 +130,22 @@ function Faq_ObtenerPreguntas() $objPregunta->activa = 1; } - // Busca las respuestas a la pregunta +/* // Busca las respuestas a la pregunta if ( array_key_exists($objPregunta->id, $respuestasPorPregunta ) ) { - $objPregunta->respuestas = $respuestasPorPregunta[$objPregunta->id]; + // 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; } - - $preguntas[] = $objPregunta; } + fclose($preguntasPlano); return $preguntas; } else @@ -131,6 +154,21 @@ function Faq_ObtenerPreguntas() } } +// 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) @@ -139,137 +177,184 @@ function Faq_IngresarPregunta($Usuario, $Pregunta) // dar de alta la pregunta if ( $Usuario->GetCreditos() > 0 ) { - $Fecha = time(); + $fecha = time(); // Obtiene la lista de preguntas ya existentes - $Preguntas = Faq_ObtenerPreguntas(); - $CantidadPreguntas = count($Preguntas); - - $NuevoId= 0; - if ( $CantidadPreguntas != 0 ) - { - $PreguntaObj = $Preguntas[$CantidadPreguntas -1]; - $NuevoId = $PreguntaObj->id; - $NuevoId = $NuevoId + 1; - } - + $cantidadPreguntas = Faq_ObtenerCantidadPreguntas(); + + $NuevoId= $cantidadPreguntas + 1; + //Formato: // PreguntaId | UserId | Fecha | Pregunta - $Linea = $NuevoId."|".$Usuario->getId()."|".$Fecha."|".$Pregunta."\n"; - $fp = fopen("data/preguntas.txt","a"); - if(!$fp) - { - return "Error en el archivo"; - } - fwrite($fp, $Linea); - fclose($fp); - + 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() ); } - - return "La pregunta fue dada de alta correctamente"; + // 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 "La pregunta no fue dada de alta. No dispone de credito suficiente"; + 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, $UsrId, $Respuesta) +function Faq_IngresarRespuesta($PreguntaId, $AutorPreguntaId, $UsrId, $Respuesta) { $Fecha = time(); //Formato: - // PreguntaRespondidaId| UserId | Fecha | Respuesta - $Linea = $PreguntaId."|".$UsrId."|".$Fecha."|".$Respuesta."\n"; - $fp = fopen("data/respuestas.txt","a"); - if(!$fp) + // PreguntaRespondidaId| AutorDePreguntaId | UserId | Fecha | Respuesta + if( !fappendcsv("data/respuestas.csv", array($PreguntaId,$AutorPreguntaId,$UsrId,$Fecha,$Respuesta) ) ) { - return "Error en el archivo"; + return error("Error en el archivo"); } - fwrite($fp, $Linea); - fclose($fp); - return "La respuesta fue dada de alta correctamente"; + + // Loguea la accion + file_log_add($UsrId, "Da de alta de una respuesta"); + return ok("La respuesta fue dada de alta correctamente"); } -// Lista las preguntas existentes en el sistema -// Recibe el usuario que esta logueado, para determinar -// que opciones de menu le tiene que brindar ( dar de baja pregunta, -// contestar pregunta, ranquear pregunta ). function Faq_ListarPreguntas($Usuario) { - $Preguntas = Faq_ObtenerPreguntas(); - - $CantidadPreguntas = count($Preguntas); - - if ( $CantidadPreguntas != 0 ) - { - foreach($Preguntas as $ObjPregunta) - { - if ( $ObjPregunta->activa ) - { - $ObjPregunta->toHTML(); -?> -
-esAdmin() ) - { + Faq_Listador ( Faq_ObtenerPreguntas() ); + if ( $Usuario->esAdmin() ) + { echo "Pasar preguntas a un log historico%s | ', $link, $q, $i + 1); + } + printfl('