Error con preguntas aleatorias

Error con preguntas aleatorias

de Antonio Campelo -
Número de respuestas: 7

Versión Moodle 3.5.3 tema Eguru

Se trata de una plataforma instalada hace un mes con el instalador automático del cpanel del servicio de hospedaje.

En primer lugar quiero aclarar que no tengo ni idea de programación y tan solo tengo conocimientos de html y css. También pido disculpas anticipadas si este no es el lugar adecuado para plantear mi duda.

Hace unos días se produjo un ERROR 500 (seguramente por alguna torpeza mía) que dejo totalmente inaccesible mi plataforma. El servicio técnico de la empresa de hospedaje corrigió el problema y en unas horas la plataforma estuvo accesible. Sin embargo cuando me puse a trabajar en ella se produjo un error.

El problema se produce al intentar cargar preguntas aleatorias desde el repositorio a un cuestionario. Al elegir en el selector la opción “pregunta aleatoria” aparece el error que se muestra en el archivo adjunto. El mensaje dice:

Detectado un error de codificación debe de ser corregido por un programador: moodle_database::get_in_or_equal() does not accept empty arrays

Este error no se produce si selecciono la opción “del banco de preguntas”, para añadir preguntas fijas en lugar de aleatorias.

Este problema no se producía antes de la incidencia “Error 500” antes mencionada. De hecho tengo algún cuestionario aleatorio confeccionado con anterioridad al que tampoco se me permite añadir nuevas preguntas aleatorias.

Pensando que el problema es que he dañado la plataforma de alguna manera, he realizado una nueva instalación en otro subdominio y el error se repite.

Tras un intercambio de correos con el servicio de hospedaje, estos me dicen: “Esto es un error de Moodle. Tienes que consultar con los diseñadores de moodle. Hay mucha información relacionada con este error en la web, pero difícil determinar la razón. Los diseñadores podrán orientarte”.

¿Alguien puede orientarme sobre este asunto?

Antonio
Promedio de valoraciones: -
En respuesta a Antonio Campelo

Re: Error con preguntas aleatorias

de José Ramón Urízar Salinas -

Buenas tardes: 

Estamos teniendo el mismo problema. Adjunto el mensaje para que los desarrolladores puedan echarle un vistazo. 



Error code: codingerror
* line 770 of /lib/dml/moodle_database.php: coding_exception thrown
* line 1290 of /lib/questionlib.php: call to moodle_database->get_in_or_equal()
* line 58 of /mod/quiz/addrandomform.php: call to question_get_top_categories_for_contexts()
* line 204 of /lib/formslib.php: call to quiz_add_random_form->definition()
* line 2507 of /mod/quiz/lib.php: call to moodleform->__construct()
* line 7719 of /lib/moodlelib.php: call to mod_quiz_output_fragment_add_random_question_form()
* line 415 of /lib/external/externallib.php: call to component_callback()
* line 228 of /lib/externallib.php: call to core_external::get_fragment()
* line 59 of /lib/ajax/service.php: call to external_api::call_external_function()

En respuesta a José Ramón Urízar Salinas

Re: Error con preguntas aleatorias

de Johan Naranjo -

Les comparto la forma como lo solucioné, aunque no es lo ideal tuve que meterle mano al código para resolver esto ya que tenía desesperados a los usuarios.

La modificación la realicé específicamente en el archivo "lib/questionlib.php", cambié esta función:


function question_get_top_categories_for_contexts($contextids) {

    global $DB;


    $concatsql = $DB->sql_concat_join("','", ['id', 'contextid']);

    list($insql, $params) = $DB->get_in_or_equal($contextids);

    $sql = "SELECT $concatsql FROM {question_categories} WHERE contextid $insql AND parent = 0";

    $topcategories = $DB->get_fieldset_sql($sql, $params);


    return $topcategories;

}


Por esto:

function question_get_top_categories_for_contexts($contextids) {

    global $DB;

    $concatsql = $DB->sql_concat_join("','", ['id', 'contextid']);

    if ( !empty($contextids) ) {

list($insql, $params) = $DB->get_in_or_equal($contextids);

$sql = "SELECT $concatsql FROM {question_categories} WHERE contextid $insql AND parent = 0";

$topcategories = $DB->get_fieldset_sql($sql, $params);

return $topcategories;

}

return array();

}

En respuesta a Antonio Campelo

Re: Error con preguntas aleatorias

de Johan Naranjo -

Hola a todos, alguien ha encontrado alguna pista sobre esto?

En respuesta a Johan Naranjo

Re: Error con preguntas aleatorias

de Sara Arjona Téllez -

Hola!

No he podido reproducir el error en las versiones más recientes de Moodle. He encontrado diversas incidencias en el tracker, como esta o esta, pero ninguna de ellas relacionada con las preguntas aleatorias.

Os sugeriría intentar reproducir el error en la versión más reciente de Moodle (por ejemplo en https://demo.moodle.net) y abrir una issue en el tracker con los pasos exactos que hay que seguir para poder reproducirla. Podéis consultar la lista de versiones soportadas actualmente aquí: https://docs.moodle.org/dev/Releases#Version_support . Por lo tanto, otra opción si vuestra versión es anterior, es actualizar. Recordad que es importante realizar una copia de seguridad de todo (sobretodo de la base de datos y los archivos) antes de hacerla.

Un abrazo,

Sara

En respuesta a Sara Arjona Téllez

Re: Error con preguntas aleatorias

de Johan Naranjo -

En nuestro caso es una plataforma que se ha venido actualizando desde la versión 2 y ahora llegar a la 3.5 nos encontramos con este problema.

La verdad no tengo idea de cómo reproducir esta situación, asumo que puede ser información inconsistente en la BD pero realmente no se específicamente dónde empezar a revisar.