X-Git-Url: https://git.llucax.com/z.facultad/75.43/tp1.git/blobdiff_plain/70ef8b62924047a377924aa21ea9e05f05d9e5ec..765b3c57f081d3863ff59951a67da5874554db42:/src/lib/faq.functions.php diff --git a/src/lib/faq.functions.php b/src/lib/faq.functions.php index 8c1c387..abf95d0 100644 --- a/src/lib/faq.functions.php +++ b/src/lib/faq.functions.php @@ -1,161 +1,365 @@ -idPregunta = $rowDiv[0]; - $objRespuesta->autor = $rowDiv[1]; - $objRespuesta->fecha = date('d/m/y H:i:s', $rowDiv[2]); - $objRespuesta->texto = $rowDiv[3]; - // La respuesta no fue rankeada - // ToDo: Manejar los rankings de preguntas - $objRespuesta->ranking = -1; - - 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; - } - } - - $preguntasPlano = file("data/preguntas.txt"); - - foreach($preguntasPlano as $row) - { - $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]); - $objPregunta->texto = $rowDiv[3]; - // ToDo: resolver tema de actividad de preguntas - $objPregunta->activa = 1; - - // Busca las respuestas a la pregunta - if ( array_key_exists($objPregunta->id, $RespuestasPorPregunta ) ) - { - $objPregunta->respuestas = $RespuestasPorPregunta[$objPregunta->id]; - } - - $Preguntas[] = $objPregunta; - } - return $Preguntas; - } - return; -} - -function Faq_IngresarPregunta($UsrId, $Pregunta) -{ - $Fecha = time(); - - $Preguntas = Faq_ObtenerPreguntas(); - $CantidadPreguntas = count($Preguntas); - - $NuevoId= 0; - if ( $CantidadPreguntas != 0 ) - { - $PreguntaObj = $Preguntas[$CantidadPreguntas -1]; - $NuevoId = $PreguntaObj->id; - $NuevoId = $NuevoId + 1; - } - - //Formato: - // PreguntaId | UserId | Fecha | Pregunta - $Linea = $NuevoId."|".$UsrId."|".$Fecha."|".$Pregunta."\r\n"; - $fp = fopen("data/preguntas.txt","a"); - if(!$fp) - { - return "Error en el archivo"; - } - fwrite($fp, $Linea); - fclose($fp); - return "La pregunta fue dada de alta correctamente"; -} - -function Faq_IngresarRespuesta($PreguntaId, $UsrId, $Respuesta) -{ - $Fecha = time(); - - //Formato: - // PreguntaRespondidaId| UserId | Fecha | Respuesta - $Linea = $PreguntaId."|".$UsrId."|".$Fecha."|".$Respuesta."\r\n"; - $fp = fopen("data/respuestas.txt","a"); - if(!$fp) - { - return "Error en el archivo"; - } - fwrite($fp, $Linea); - fclose($fp); - return "La respuesta fue dada de alta correctamente"; -} - -function Faq_ListarPreguntas() -{ - $Preguntas = Faq_ObtenerPreguntas(); - - $CantidadPreguntas = count($Preguntas); - - if ( $CantidadPreguntas != 0 ) - { - ?> -
- activa ) - { - $ObjPregunta->Mostrar(); - ?> - Seleccionar Pregunta
- - -
- +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(); + } + } + + $pags = ceil($total / $cant); + if ($pags == 1) return; + printfl(''); + // Arrastro query string, si corresponde + if ( isset($_SERVER['QUERY_STRING'] ) ) + { + $query = str_replace('&', '&', $_SERVER['QUERY_STRING']); + } + else + { + $query = ''; + } + if (($pos = strpos($query, '&lista_from=')) !== false) + { + if ($pos) $query = substr($query, 0, $pos); + else $query = ''; + } + if (($pos = strpos($query, 'lista_from=')) !== false) + { + if ($pos) $query = substr($query, 0, $pos ); + else $query = ''; + } + for ($i = 0; $i < $pags; ++$i) + { + $from = $i * $cant; + $q = $query ? "$query&lista_from=$from" : "lista_from=$from"; + printfl('', $link, $q, $i + 1); + } + printfl('
%s
'); +} +?> \ No newline at end of file