From 591ffec24ad4fc5a9b4e924a329983cad8589242 Mon Sep 17 00:00:00 2001 From: Jonathan Schein Date: Sat, 7 May 2005 20:04:02 +0000 Subject: [PATCH] la version completa la logica de la parte de faq. ademas, reemplace todos los txt por csv y los manejo con las funciones correspondietes, y agregua registros en el log para cada accion --- src/faq.desactivarPregunta.php | 2 +- src/lib/Pregunta.php | 16 +++- src/lib/Respuesta.php | 1 + src/lib/faq.forms.php | 2 +- src/lib/faq.functions.php | 157 ++++++++++++++++++++------------- 5 files changed, 111 insertions(+), 67 deletions(-) diff --git a/src/faq.desactivarPregunta.php b/src/faq.desactivarPregunta.php index e7d9b77..b442254 100644 --- a/src/faq.desactivarPregunta.php +++ b/src/faq.desactivarPregunta.php @@ -19,7 +19,7 @@ pagina_cabecera('Desactivar una Pregunta'); // Si me llegó el form completo if (isset($_POST['PreguntaElegida'])) { - echo Faq_DesactivarPregunta( $_POST['PreguntaElegida'] ); + echo Faq_DesactivarPregunta( $_POST['PreguntaElegida'], $_SESSION['user']->getId() ); // Muestro el formulario y luego el mensaje faq_form_desactivar_pregunta(); } diff --git a/src/lib/Pregunta.php b/src/lib/Pregunta.php index 3823275..f0e48de 100644 --- a/src/lib/Pregunta.php +++ b/src/lib/Pregunta.php @@ -37,10 +37,20 @@ class Pregunta extends Item foreach ( $this->respuestas as $objRespuesta ) { $objRespuesta->toHTML(); - echo $objRespuesta->ranking ; - if ( ( $this->autor == $_SESSION['user']->getId() ) && ( $objRespuesta->ranking == -1 ) ) + if ( ( $objRespuesta->ranking != -1 ) ) { - faq_form_ir_a_calificar_respuesta($objRespuesta->id); + echo "Puntaje: ".$objRespuesta->ranking."
" ; + } + else + { + if ( $this->autor == $_SESSION['user']->getId() ) + { + faq_form_ir_a_calificar_respuesta($objRespuesta->id); + } + else + { + echo "La respuesta aun no fue rankeada.
" ; + } } } } diff --git a/src/lib/Respuesta.php b/src/lib/Respuesta.php index 22bb40a..ad25327 100644 --- a/src/lib/Respuesta.php +++ b/src/lib/Respuesta.php @@ -26,6 +26,7 @@ class Respuesta extends Item { echo "+++++++Respuesta: "; echo "$this->texto
"; + echo "Autor de la respuesta: $this->autor
"; } } diff --git a/src/lib/faq.forms.php b/src/lib/faq.forms.php index 2c858df..3abfddf 100644 --- a/src/lib/faq.forms.php +++ b/src/lib/faq.forms.php @@ -87,7 +87,7 @@ function faq_form_calificar_respuesta($RespuestaId) - + diff --git a/src/lib/faq.functions.php b/src/lib/faq.functions.php index 929af47..88879dd 100644 --- a/src/lib/faq.functions.php +++ b/src/lib/faq.functions.php @@ -12,6 +12,8 @@ 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 @@ -19,35 +21,35 @@ function Faq_ObtenerPreguntas() { // Verifica que el file que guarda las preguntas exista // Si no existe, devuelve un array vacio - if ( file_exists ( "data/preguntas.txt" ) ) + if ( file_exists ( "data/preguntas.csv" ) ) { // Levanta las puntuaciones de preguntas 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]); @@ -79,27 +81,27 @@ function Faq_ObtenerPreguntas() // Guarda la lista de respuestas de la pregunta $respuestasPorPregunta[$objRespuesta->idPregunta] = $listaRespuestas; } + fclose($respuestasPlano); } $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]); @@ -118,11 +120,15 @@ function Faq_ObtenerPreguntas() // 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]); + } $preguntas[] = $objPregunta; } + fclose($preguntasPlano); return $preguntas; } else @@ -131,6 +137,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,36 +160,26 @@ 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 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 "La pregunta fue dada de alta correctamente"; } else @@ -185,14 +196,13 @@ function Faq_IngresarRespuesta($PreguntaId, $UsrId, $Respuesta) //Formato: // PreguntaRespondidaId| UserId | Fecha | Respuesta - $Linea = $PreguntaId."|".$UsrId."|".$Fecha."|".$Respuesta."\n"; - $fp = fopen("data/respuestas.txt","a"); - if(!$fp) + if( !fappendcsv("data/respuestas.csv", array($PreguntaId,$UsrId,$Fecha,$Respuesta) ) ) { - return "Error en el archivo"; + return "Error en el archivo"; } - fwrite($fp, $Linea); - fclose($fp); + + // Loguea la accion + file_log_add($UsrId, "Da de alta de una respuesta"); return "La respuesta fue dada de alta correctamente"; } @@ -233,29 +243,34 @@ function Faq_ListarPreguntas($Usuario) } // La funcion agrega el id de la pregunta a la lista de preguntas desactivadas -function Faq_DesactivarPregunta( $PreguntaId ) +function Faq_DesactivarPregunta( $PreguntaId , $UsrId) { - $fp = fopen("data/desactivadas.txt","a"); - if(!$fp) + // Formato PreguntaID,fechaYHora + if( !fappendcsv("data/desactivadas.csv", array($PreguntaId, time()) ) ) { return "Error en el archivo"; } - fwrite($fp, $PreguntaId."|".time()."\n"); - fclose($fp); + + // Loguea la accion + file_log_add($UsrId, "Pasa una respuesta a log historico"); + return "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 ) +function Faq_CalificarRespuesta( $RespuestaId, $Calificacion , $UsrId) { - 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"); - $row = $respuestasPlano[$RespuestaId]; - $row = explode("|",$row); - $autorId = $row[1]; + $respuestasPlano = @fopen("data/respuestas.csv", 'r'); + $row = fgetcsv($respuestasPlano,4096); + $countRespuesta = 1; + while ( ( $countRespuesta != $RespuestaId ) && ( $row = fgetcsv($respuestasPlano,4096) ) ) + { + $countRespuesta ++; + } + $autorId = $row[1]; + fclose($respuestasPlano); } else { @@ -270,6 +285,24 @@ function Faq_CalificarRespuesta( $RespuestaId, $Calificacion ) return "Error al computar los creditos al usuario"; } + // Loguea la accion + file_log_add($UsrId, "Califica una respuesta con $Calificacion puntos"); return "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; +} ?> \ No newline at end of file -- 2.43.0