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
'); } ?>