Funcionamiento quiz
Este documento explica como funciona a nivel de ddbb el quiz. Lo separamos en tres partes:
-
Creación Quiz
-
Puntuación Quiz
-
Cambio de peso para question
Creación Quiz
Cada vez que creemos un quiz este se creará en cl_quiz.
Si añadimos una question:
Estas se guardarán el cl_question (relación a tarvés de cl_quiz_slots), con sus respuestas en cl_question_answer (cl_question_answer.question = cl_question.id).
Como se guarda cada valor según question_type:
-
Multichoice
En cl_question_answer tendremos en answer la opción correcta y en en fraction el peso de la respuesta para esa opción. Seleccionable
-
ShortAnswer
En cl_question_answer tendremos en answer la opción correcta y en en fraction el peso de la respuesta para esa opción. En este caso no es seleccionable sino que tendremos que escribir la respuesta directamente
-
Essay (description)
En esta opción NO se guarda nada en cl_question_answer ya que es un text area que luego evaluará el profesor
-
Match
Esta opción NO se guarda en cl_question_answer sino que va a mdl_qtype_match_subquestions donde questiontext es donde se guarda la pregunta y answertext donde se guarda la respuesta.
-
ddwtos
En cl_question_answer tendremos en answer la respuesta y en orderby el número que se substituirá después en la question.
-
gapselect
En cl_question_answer tendremos en answer la respuesta y en orderby el número que se substituirá después en la question.
Puntuación Quiz
Cada vez que guardemos un quiz, esta opción quedará reflejada en cl_quiz_attempts. La puntuación de cada una de ellas se encuentra en la columna cl_quiz_attempts.sumgrades y el peso respecto 10 estará en cl_quiz_attempts.weighted
Cada respuesta de question estará en cl_question_attempts (cl_quiz_attempts.id = cl_question_attempts.questionusageid )
Vamos a ver como actua cada qtype en cl_question_attempts.
-
Multichoice
En cl_question_attempts se gurda el id seleccionado de cl_question_answer en responsesummary. En grade se guarda la puntuación total de ese ejercicio
-
ShortAnswer
En cl_question_attempts se guarda la respuesta escrita en responsesummary. En grade se guarda la puntuación total de ese ejercicio.
-
Essay (description)
En cl_question_attempts se guarda la respuesta escrita en responsesummary. En grade se guarda la puntuación total de ese ejercicio.
-
Match
Para relacionar la respuesta con la pregunta correspondiente es a traves de cl_quetion_attempts.questionid.
La respuesta del alumno es: para la pregunta en cl_question_attempts.questionsummary (corresponde al mdl_qtype_match_subquestions.id ) ha respuesto la cl_question_attempts.responsesummary (correspondiente mdl_qtype_match_subquestions.answertext ).
En grade se guarda la puntuación total de ese ejercicio
-
ddwtos
Para relacionar la respuesta con la pregunta correspondiente es a traves de cl_quetion_attempts.questionid.
La respuesta del alumno es: para la pregunta en cl_question_attempts.questionsummary (corresponde al cl_question_answer.id ) ha respuesto la cl_question_attempts.responsesummary (correspondiente cl_question_attempts.answertext ).
En grade se guarda la puntuación total de ese ejercicio
-
gapselect
Para relacionar la respuesta con la pregunta correspondiente es a traves de cl_quetion_attempts.questionid.
La respuesta del alumno es: para la pregunta en cl_question_attempts.questionsummary (corresponde al cl_question_answer.id ) ha respuesto la cl_question_attempts.responsesummary (correspondiente cl_question_attempts.answertext ).
En grade se guarda la puntuación total de ese ejercicio
Cambio de peso para question
Cada vez que cambiemos los pesos se cambiarán los grades (por si el profesor modificó algo) y sus weight.
Como actua el programa:
-
Actualizamos cl_quiz_slots (tabla que relaciona quiz con question y están los porcentajes de cada uno de ellos) (Quiz::updateQuizQuestions())
-
Actualizamos cada uno de los pesos en la tabla: cl_question_attempts (Quiz::updateQuizQuestions())
-
Actualizamos cada uno de los grade en la tabla: cl_quuestion_attempts (QuizAttempts::compute())
-
Sumamos cada uno de los grades y weight y lo guardamos en la tabla: cl_quiz_question (QuizAttempts::compute())