Quiz: Use iid instead of id in c_quiz_question queries - refs BT#18452

pull/3824/head
Angel Fernando Quiroz Campos 5 years ago
parent ec024dcf1d
commit 8d08d2979b
  1. 2
      main/exercise/TestCategory.php
  2. 4
      main/exercise/answer.class.php
  3. 36
      main/exercise/exercise.class.php
  4. 2
      main/exercise/exercise_history.php
  5. 3
      main/exercise/exercise_show.php
  6. 16
      main/exercise/question.class.php
  7. 22
      main/exercise/question_pool.php
  8. 2
      main/exercise/unique_answer.class.php
  9. 4
      main/inc/lib/exercise.lib.php
  10. 3
      main/inc/lib/tracking.lib.php
  11. 4
      main/lp/learnpath.class.php
  12. 3
      plugin/migrationmoodle/src/Loader/QuizzesScoresLoader.php
  13. 6
      plugin/test2pdf/src/test2pdf.lib.php
  14. 22
      src/Chamilo/CourseBundle/Component/CourseCopy/CourseBuilder.php
  15. 16
      src/Chamilo/CourseBundle/Component/CourseCopy/CourseRecycler.php

@ -544,7 +544,7 @@ class TestCategory
INNER JOIN $categoryTable c
ON (c.id = qrc.category_id AND c.c_id = eq.c_id)
INNER JOIN $tableQuestion q
ON (q.id = qrc.question_id AND q.c_id = eq.c_id)
ON q.iid = qrc.question_id
WHERE
exercice_id = $exerciseId AND
qrc.c_id = $courseId

@ -251,7 +251,7 @@ class Answer
$questionId = (int) $this->questionId;
$sql = "SELECT type FROM $TBL_QUIZ
WHERE c_id = {$this->course_id} AND id = $questionId";
WHERE iid = $questionId";
$result_question = Database::query($sql);
$questionType = Database::fetch_array($result_question);
@ -502,7 +502,7 @@ class Answer
{
$table = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT type FROM $table
WHERE c_id = {$this->course_id} AND id = '".$this->questionId."'";
WHERE iid = '".$this->questionId."'";
$res = Database::query($sql);
if (Database::num_rows($res) <= 0) {
return null;

@ -664,8 +664,8 @@ class Exercise
$sql = "SELECT q.iid
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = ".$this->course_id." )
WHERE e.exercice_id = '".$this->id."' ";
ON e.question_id = q.iid
WHERE e.exercice_id = '".$this->id."' AND e.c_id = {$this->course_id}";
$orderCondition = ' ORDER BY question_order ';
@ -760,10 +760,10 @@ class Exercise
{
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT count(q.id) as count
$sql = "SELECT count(q.iid) as count
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = ".$this->id;
@ -794,7 +794,7 @@ class Exercise
$sql = "SELECT e.question_id
FROM $exerciseQuestionTable e
INNER JOIN $questionTable q
ON (e.question_id= q.id AND e.c_id = q.c_id)
ON e.question_id= q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = '".$this->id."'
@ -1165,7 +1165,7 @@ class Exercise
$sql = "SELECT e.question_id
FROM $quizRelQuestion e
INNER JOIN $question q
ON (e.question_id= q.id AND e.c_id = q.c_id)
ON e.question_id= q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = '".Database::escape_string($this->id)."'
@ -1211,12 +1211,12 @@ class Exercise
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT q.id
$sql = "SELECT q.iid
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.id
WHERE
q.id = $questionId AND
q.iid = $questionId AND
e.c_id = {$this->course_id} AND
e.exercice_id = ".$this->id;
@ -1231,10 +1231,10 @@ class Exercise
$table = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$tableQuestion = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT q.id
$sql = "SELECT q.iid
FROM $table e
INNER JOIN $tableQuestion q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
q.type = $type AND
e.c_id = {$this->course_id} AND
@ -1255,10 +1255,10 @@ class Exercise
$table = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$tableQuestion = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT q.id
$sql = "SELECT q.iid
FROM $table e
INNER JOIN $tableQuestion q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
q.type NOT IN ('$questionTypeToString') AND
e.c_id = {$this->course_id} AND
@ -3061,7 +3061,7 @@ class Exercise
unset($di);
$tbl_quiz_question = Database::get_course_table(TABLE_QUIZ_QUESTION);
foreach ($this->questionList as $question_i) {
$sql = 'SELECT type FROM %s WHERE id=%s';
$sql = 'SELECT type FROM %s WHERE iid=%s';
$sql = sprintf($sql, $tbl_quiz_question, $question_i);
$qres = Database::query($sql);
if (Database::num_rows($qres) > 0) {
@ -8042,7 +8042,7 @@ class Exercise
$sql = "SELECT DISTINCT cat.*
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
INNER JOIN $categoryRelTable catRel
ON (catRel.question_id = e.question_id AND catRel.c_id = e.c_id)
INNER JOIN $categoryTable cat
@ -8780,7 +8780,7 @@ class Exercise
$sql = "SELECT DISTINCT e.question_id
FROM $quizRelQuestion e
INNER JOIN $question q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = '".$this->id."'
@ -10991,7 +10991,7 @@ class Exercise
$sql = "SELECT DISTINCT count(e.question_order) as count
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = ".$this->id;
@ -11004,7 +11004,7 @@ class Exercise
$sql = "SELECT DISTINCT e.question_id, e.question_order
FROM $TBL_EXERCICE_QUESTION e
INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.id AND e.c_id = q.c_id)
ON e.question_id = q.iid
WHERE
e.c_id = {$this->course_id} AND
e.exercice_id = '".$this->id."'

@ -69,7 +69,7 @@ $sql = "SELECT *, quiz_question.question, firstname, lastname
FROM $TBL_TRACK_ATTEMPT_RECORDING t, $TBL_USER,
$TBL_EXERCISES_QUESTION quiz_question
WHERE
quiz_question.id = question_id AND
quiz_question.iid = question_id AND
user_id = author AND
exe_id = '".(int) $_GET['exe_id']."'
ORDER BY position";

@ -342,8 +342,7 @@ $sql = "SELECT attempts.question_id, answer
quizz_rel_questions.c_id=".api_get_course_int_id()."
INNER JOIN $TBL_QUESTIONS AS questions
ON
questions.id = quizz_rel_questions.question_id AND
questions.c_id = ".api_get_course_int_id()."
questions.iid = quizz_rel_questions.question_id
WHERE
attempts.exe_id = $id $user_restriction
GROUP BY quizz_rel_questions.question_order, attempts.question_id";

@ -148,7 +148,7 @@ abstract class Question
$sql = "SELECT *
FROM $TBL_QUESTIONS
WHERE c_id = $course_id AND id = $id ";
WHERE iid = $id ";
$result = Database::query($sql);
// if the question has been found
@ -923,7 +923,7 @@ abstract class Question
$table = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "UPDATE $table SET
picture = '".Database::escape_string($picture)."'
WHERE c_id = $course_id AND id='".intval($questionId)."'";
WHERE iid='".intval($questionId)."'";
Database::query($sql);
$documentId = add_document(
@ -1033,7 +1033,7 @@ abstract class Question
Database::update(
$TBL_QUESTIONS,
$params,
['c_id = ? AND id = ?' => [$c_id, $id]]
['id = ?' => [$id]]
);
Event::addEvent(
@ -1061,9 +1061,8 @@ abstract class Question
FROM $TBL_QUESTIONS as question,
$TBL_EXERCISE_QUESTION as test_question
WHERE
question.id = test_question.question_id AND
question.iid = test_question.question_id AND
test_question.exercice_id = ".$exerciseId." AND
question.c_id = $c_id AND
test_question.c_id = $c_id ";
$result = Database::query($sql);
$current_position = Database::result($result, 0, 0);
@ -1468,7 +1467,7 @@ abstract class Question
Database::query($sql);
$sql = "DELETE FROM $TBL_QUESTIONS
WHERE c_id = $courseId AND id = ".$id;
WHERE iid = ".$id;
Database::query($sql);
$sql = "DELETE FROM $TBL_REPONSES
@ -2381,9 +2380,8 @@ abstract class Question
FROM $tbl_quiz_question q
INNER JOIN $tbl_quiz_rel_question r
ON
q.id = r.question_id AND
q.iid = r.question_id AND
exercice_id = $quiz_id AND
q.c_id = $course_id AND
r.c_id = $course_id";
$rs_max = Database::query($sql);
$row_max = Database::fetch_object($rs_max);
@ -2568,7 +2566,7 @@ abstract class Question
Database::update(
Database::get_course_table(TABLE_QUIZ_QUESTION),
['type' => $this->type],
['c_id = ? AND id = ?' => [$this->course['real_id'], $this->id]]
['iid = ?' => [$this->id]]
);
$answerClasses = [
UNIQUE_ANSWER => 'UniqueAnswer',

@ -642,7 +642,7 @@ function getQuestions(
$from = ", $TBL_COURSE_REL_CATEGORY crc ";
$where .= " AND
crc.c_id = $selected_course AND
crc.question_id = qu.id AND
crc.question_id = qu.iid AND
crc.category_id = $courseCategoryId";
}
if (isset($exerciseLevel) && -1 != $exerciseLevel) {
@ -673,13 +673,12 @@ function getQuestions(
FROM
$TBL_EXERCISE_QUESTION qt
INNER JOIN $TBL_QUESTIONS qu
ON qt.question_id = qu.id
ON qt.question_id = qu.iid
$from
{$efConditions['from']}
WHERE
qt.exercice_id = $exerciseId AND
qt.c_id = $selected_course AND
qu.c_id = $selected_course
qt.c_id = $selected_course
$where
$currentExerciseCondition
{$efConditions['where']}
@ -723,7 +722,7 @@ function getQuestions(
SELECT $select
FROM $TBL_QUESTIONS qu
INNER JOIN $TBL_EXERCISE_QUESTION r
ON (qu.c_id = r.c_id AND qu.id = r.question_id)
ON qu.iid = r.question_id
INNER JOIN $TBL_EXERCISES ex
ON (ex.iid = r.exercice_id AND ex.c_id = r.c_id)
$from
@ -740,11 +739,11 @@ function getQuestions(
SELECT $select
FROM $TBL_QUESTIONS qu
LEFT OUTER JOIN $TBL_EXERCISE_QUESTION r
ON (qu.c_id = r.c_id AND qu.id = r.question_id)
ON qu.iid = r.question_id
$from
{$efConditions['from']}
WHERE
qu.c_id = '$selected_course' AND
r.c_id = '$selected_course' AND
r.question_id is null
$level_where
$answer_where
@ -755,7 +754,7 @@ function getQuestions(
SELECT $select
FROM $TBL_QUESTIONS qu
INNER JOIN $TBL_EXERCISE_QUESTION r
ON (qu.c_id = r.c_id AND qu.id = r.question_id)
ON qu.iid = r.question_id
$from
{$efConditions['from']}
WHERE
@ -779,7 +778,7 @@ function getQuestions(
$from = ", $TBL_COURSE_REL_CATEGORY crc ";
$filter .= " AND
crc.c_id = $selected_course AND
crc.question_id = qu.id AND
crc.question_id = qu.iid AND
crc.category_id = $courseCategoryId";
}
if (isset($exerciseLevel) && -1 != $exerciseLevel) {
@ -813,13 +812,12 @@ function getQuestions(
FROM
$TBL_QUESTIONS as qu
INNER JOIN $TBL_EXERCISE_QUESTION as qt
ON (qu.id = qt.question_id AND qu.c_id = qt.c_id)
ON qu.iid = qt.question_id
INNER JOIN $TBL_EXERCISES as q
ON (q.c_id = qu.c_id AND q.iid = qt.exercice_id)
ON q.iid = qt.exercice_id
{$efConditions['from']}
$from
WHERE
qu.c_id = $selected_course AND
qt.c_id = $selected_course AND
q.c_id = $selected_course
$sessionCondition

@ -529,7 +529,7 @@ class UniqueAnswer extends Question
if ($correct) {
$sql = "UPDATE $tbl_quiz_question
SET ponderation = (ponderation + $score)
WHERE c_id = $course_id AND id = ".$question_id;
WHERE iid = ".$question_id;
Database::query($sql);
}
}

@ -6022,9 +6022,9 @@ EOT;
$sql = "SELECT q.question, question_id, count(q.iid) count
FROM $attemptTable t
INNER JOIN $questionTable q
ON (q.c_id = t.c_id AND q.id = t.question_id)
ON q.iid = t.question_id
INNER JOIN $trackTable te
ON (te.c_id = q.c_id AND t.exe_id = te.exe_id)
ON t.exe_id = te.exe_id
WHERE
t.c_id = $courseId AND
t.marks != q.ponderation AND

@ -6095,8 +6095,7 @@ class Tracking
ON rq.exercice_id = q.iid AND rq.c_id = q.c_id
INNER JOIN $tquiz_question qq
ON
qq.id = rq.question_id AND
qq.c_id = rq.c_id AND
qq.iid = rq.question_id AND
qq.position = rq.question_order AND
ta.question_id = rq.question_id
WHERE

@ -564,11 +564,9 @@ class learnpath
FROM '.Database::get_course_table(TABLE_QUIZ_QUESTION).' as quiz_question
INNER JOIN '.Database::get_course_table(TABLE_QUIZ_TEST_QUESTION).' as quiz_rel_question
ON
quiz_question.id = quiz_rel_question.question_id AND
quiz_question.c_id = quiz_rel_question.c_id
quiz_question.iid = quiz_rel_question.question_id
WHERE
quiz_rel_question.exercice_id = '.$id." AND
quiz_question.c_id = $course_id AND
quiz_rel_question.c_id = $course_id ";
$rsQuiz = Database::query($sql);
$max_score = Database::result($rsQuiz, 0, 0);

@ -24,10 +24,9 @@ class QuizzesScoresLoader implements LoaderInterface
$sql = "SELECT SUM(ponderation)
FROM $tblQuizQuestion as quiz_question
INNER JOIN $tblQuizRelQuestion as quiz_rel_question
ON (quiz_question.id = quiz_rel_question.question_id AND quiz_question.c_id = quiz_rel_question.c_id)
ON quiz_question.iid = quiz_rel_question.question_id
WHERE
quiz_rel_question.exercice_id = {$incomingData['quiz_id']}
AND quiz_question.c_id = {$incomingData['c_id']}
AND quiz_rel_question.c_id = {$incomingData['c_id']}";
$rsQuiz = \Database::query($sql);

@ -108,7 +108,7 @@ function getQuestionsFromCourse($courseId, $quizId, $sessionId = 0)
FROM $tableQuizQuestion a
INNER JOIN $tableQuestion b ON a.question_id = b.iid
INNER JOIN $tableQuiz q ON q.iid = a.exercice_id
WHERE a.c_id = $courseId AND b.c_id = a.c_id AND a.exercice_id = $quizId
WHERE a.c_id = $courseId AND a.exercice_id = $quizId
AND (b.type IN (1, 2, 9, 10, 11, 12, 14))
$conditionSession
ORDER BY question_order ASC;";
@ -134,8 +134,8 @@ function getInfoQuestion($courseId, $id)
$id = (int) $id;
$tableQuestion = Database::get_course_table(TABLE_QUIZ_QUESTION);
$sql = "SELECT * FROM $tableQuestion
WHERE c_id = $courseId
AND iid = $id
WHERE
iid = $id
AND (type IN (1, 2, 9, 10, 11, 12, 14))";
$res = Database::query($sql);
$row = Database::fetch_assoc($res);

@ -832,14 +832,14 @@ class CourseBuilder
// Building normal tests (many queries)
$sql = "SELECT * FROM $table_que
WHERE c_id = $courseId AND id IN ('$questionListToString')";
WHERE id IN ('$questionListToString')";
$result = Database::query($sql);
while ($obj = Database::fetch_object($result)) {
// find the question category
// @todo : need to be adapted for multi category questions in 1.10
$question_category_id = TestCategory::getCategoryForQuestion(
$obj->id,
$obj->iid,
$courseId
);
@ -847,7 +847,7 @@ class CourseBuilder
// build the backup resource question object
$question = new QuizQuestion(
$obj->id,
$obj->iid,
$obj->question,
$obj->description,
$obj->ponderation,
@ -861,7 +861,7 @@ class CourseBuilder
$question->addPicture($this);
$sql = 'SELECT * FROM '.$table_ans.'
WHERE c_id = '.$courseId.' AND question_id = '.$obj->id;
WHERE c_id = '.$courseId.' AND question_id = '.$obj->iid;
$db_result2 = Database::query($sql);
while ($obj2 = Database::fetch_object($db_result2)) {
$question->add_answer(
@ -881,7 +881,7 @@ class CourseBuilder
if ($obj->type == MULTIPLE_ANSWER_TRUE_FALSE) {
$table_options = Database::get_course_table(TABLE_QUIZ_QUESTION_OPTION);
$sql = 'SELECT * FROM '.$table_options.'
WHERE c_id = '.$courseId.' AND question_id = '.$obj->id;
WHERE c_id = '.$courseId.' AND question_id = '.$obj->iid;
$db_result3 = Database::query($sql);
while ($obj3 = Database::fetch_object($db_result3)) {
$question_option = new QuizQuestionOption($obj3);
@ -902,7 +902,7 @@ class CourseBuilder
$sql = " (
SELECT question_id, q.* FROM $table_que q
INNER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
INNER JOIN $table_qui ex
ON (ex.iid = r.exercice_id AND ex.c_id = r.c_id)
WHERE ex.c_id = $courseId AND ex.active = '-1'
@ -911,14 +911,14 @@ class CourseBuilder
(
SELECT question_id, q.* FROM $table_que q
left OUTER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
WHERE q.c_id = $courseId AND r.question_id is null
)
UNION
(
SELECT question_id, q.* FROM $table_que q
INNER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
WHERE r.c_id = $courseId AND (r.exercice_id = '-1' OR r.exercice_id = '0')
)
";
@ -1005,12 +1005,10 @@ class CourseBuilder
$sql = 'SELECT *
FROM '.$table_que.' as questions
LEFT JOIN '.$table_rel.' as quizz_questions
ON questions.id=quizz_questions.question_id
ON questions.iid=quizz_questions.question_id
LEFT JOIN '.$table_qui.' as exercises
ON quizz_questions.exercice_id = exercises.iid
WHERE
questions.c_id = quizz_questions.c_id AND
questions.c_id = exercises.c_id AND
exercises.c_id = '.$courseId.' AND
(quizz_questions.exercice_id IS NULL OR
exercises.active = -1)';
@ -1032,7 +1030,7 @@ class CourseBuilder
$this->course->add_resource($orphan_questions);
while ($obj = Database::fetch_object($db_result)) {
$question = new QuizQuestion(
$obj->id,
$obj->iid,
$obj->question,
$obj->description,
$obj->ponderation,

@ -440,9 +440,9 @@ class CourseRecycler
// If this query was ever too slow, there is an alternative here:
// https://github.com/beeznest/chamilo-lms-icpna/commit/a38eab725402188dffff50245ee068d79bcef779
$sql = " (
SELECT q.id, ex.c_id FROM $table_qui_que q
SELECT q.iid, ex.c_id FROM $table_qui_que q
INNER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
INNER JOIN $table_qui ex
ON (ex.iid = r.exercice_id AND ex.c_id = r.c_id)
@ -450,23 +450,23 @@ class CourseRecycler
)
UNION
(
SELECT q.id, r.c_id FROM $table_qui_que q
SELECT q.iid, r.c_id FROM $table_qui_que q
LEFT OUTER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
WHERE q.c_id = ".$this->course_id." AND r.question_id is null
)
UNION
(
SELECT q.id, r.c_id FROM $table_qui_que q
SELECT q.iid, r.c_id FROM $table_qui_que q
INNER JOIN $table_rel r
ON (q.c_id = r.c_id AND q.id = r.question_id)
ON q.iid = r.question_id
WHERE r.c_id = ".$this->course_id." AND (r.exercice_id = '-1' OR r.exercice_id = '0')
)";
$db_result = Database::query($sql);
if (Database::num_rows($db_result) > 0) {
$orphan_ids = [];
while ($obj = Database::fetch_object($db_result)) {
$orphan_ids[] = $obj->id;
$orphan_ids[] = $obj->iid;
}
$orphan_ids = implode(',', $orphan_ids);
$sql = "DELETE FROM ".$table_rel."
@ -476,7 +476,7 @@ class CourseRecycler
WHERE c_id = ".$this->course_id." AND question_id IN(".$orphan_ids.")";
Database::query($sql);
$sql = "DELETE FROM ".$table_qui_que."
WHERE c_id = ".$this->course_id." AND id IN(".$orphan_ids.")";
WHERE iid IN(".$orphan_ids.")";
Database::query($sql);
}
// Also delete questions categories and options

Loading…
Cancel
Save