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 INNER JOIN $categoryTable c
ON (c.id = qrc.category_id AND c.c_id = eq.c_id) ON (c.id = qrc.category_id AND c.c_id = eq.c_id)
INNER JOIN $tableQuestion q INNER JOIN $tableQuestion q
ON (q.id = qrc.question_id AND q.c_id = eq.c_id) ON q.iid = qrc.question_id
WHERE WHERE
exercice_id = $exerciseId AND exercice_id = $exerciseId AND
qrc.c_id = $courseId qrc.c_id = $courseId

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

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

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

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

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

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

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

@ -6022,9 +6022,9 @@ EOT;
$sql = "SELECT q.question, question_id, count(q.iid) count $sql = "SELECT q.question, question_id, count(q.iid) count
FROM $attemptTable t FROM $attemptTable t
INNER JOIN $questionTable q 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 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 WHERE
t.c_id = $courseId AND t.c_id = $courseId AND
t.marks != q.ponderation 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 ON rq.exercice_id = q.iid AND rq.c_id = q.c_id
INNER JOIN $tquiz_question qq INNER JOIN $tquiz_question qq
ON ON
qq.id = rq.question_id AND qq.iid = rq.question_id AND
qq.c_id = rq.c_id AND
qq.position = rq.question_order AND qq.position = rq.question_order AND
ta.question_id = rq.question_id ta.question_id = rq.question_id
WHERE WHERE

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

@ -24,10 +24,9 @@ class QuizzesScoresLoader implements LoaderInterface
$sql = "SELECT SUM(ponderation) $sql = "SELECT SUM(ponderation)
FROM $tblQuizQuestion as quiz_question FROM $tblQuizQuestion as quiz_question
INNER JOIN $tblQuizRelQuestion as quiz_rel_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 WHERE
quiz_rel_question.exercice_id = {$incomingData['quiz_id']} 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']}"; AND quiz_rel_question.c_id = {$incomingData['c_id']}";
$rsQuiz = \Database::query($sql); $rsQuiz = \Database::query($sql);

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

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

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

Loading…
Cancel
Save