When loading a distribution question list one more shuffle is done. Ask Yannick. :)

skala
Julio Montoya 12 years ago
parent a948a78a3e
commit 055e464e1d
  1. 89
      main/exercice/exercise.class.php

@ -785,7 +785,6 @@ class Exercise
$temp_question_list = array(); $temp_question_list = array();
foreach ($questions_by_category as $category_id => & $categoryQuestionList) { foreach ($questions_by_category as $category_id => & $categoryQuestionList) {
if (isset($categoryCountArray) && !empty($categoryCountArray)) { if (isset($categoryCountArray) && !empty($categoryCountArray)) {
if (isset($categoryCountArray[$category_id])) { if (isset($categoryCountArray[$category_id])) {
$numberOfQuestions = $categoryCountArray[$category_id]; $numberOfQuestions = $categoryCountArray[$category_id];
@ -796,6 +795,7 @@ class Exercise
if ($addAll) { if ($addAll) {
$numberOfQuestions = 999; $numberOfQuestions = 999;
} }
if (!empty($numberOfQuestions)) { if (!empty($numberOfQuestions)) {
$elements = Testcategory::getNElementsFromArray($categoryQuestionList, $numberOfQuestions, $randomizeQuestions); $elements = Testcategory::getNElementsFromArray($categoryQuestionList, $numberOfQuestions, $randomizeQuestions);
if (!empty($elements)) { if (!empty($elements)) {
@ -806,25 +806,7 @@ class Exercise
} }
if ($shuffleQuestionsNoTakingSubcategories) { if ($shuffleQuestionsNoTakingSubcategories) {
$questionsPerMainCategory = array(); $temp_question_list = self::shuffleQuestionListPerCategory($temp_question_list, $categoriesAddedInExercise);
foreach ($temp_question_list as $categoryId => $questionList) {
$parentId = $categoriesAddedInExercise[$categoryId]['parent_id'];
$cat = new Testcategory();
$cat->getCategory($parentId);
if (!isset($questionsPerMainCategory[$cat->parent_id])) {
$questionsPerMainCategory[$cat->parent_id] = array();
}
$questionsPerMainCategory[$cat->parent_id] = array_merge($questionsPerMainCategory[$cat->parent_id], $questionList);
}
if (!empty($questionsPerMainCategory)) {
$newQuestionList = array();
foreach ($questionsPerMainCategory as $categoryId => $questionList) {
shuffle($questionList);
$newQuestionList[] = $questionList;
}
$temp_question_list = $newQuestionList;
}
} }
if (!empty($temp_question_list)) { if (!empty($temp_question_list)) {
@ -838,6 +820,37 @@ class Exercise
return $question_list; return $question_list;
} }
/**
* @param array $temp_question_list
* @param array $categoriesAddedInExercise
* @return array
*/
private function shuffleQuestionListPerCategory($temp_question_list, $categoriesAddedInExercise)
{
$questionsPerMainCategory = array();
foreach ($temp_question_list as $categoryId => $questionList) {
$parentId = $categoriesAddedInExercise[$categoryId]['parent_id'];
$cat = new Testcategory();
$cat->getCategory($parentId);
if (!isset($questionsPerMainCategory[$cat->parent_id])) {
$questionsPerMainCategory[$cat->parent_id] = array();
}
$questionsPerMainCategory[$cat->parent_id] = array_merge($questionsPerMainCategory[$cat->parent_id], $questionList);
}
if (!empty($questionsPerMainCategory)) {
$newQuestionList = array();
foreach ($questionsPerMainCategory as $questionList) {
shuffle($questionList);
$newQuestionList[] = $questionList;
}
$temp_question_list = $newQuestionList;
}
return $temp_question_list;
}
/** /**
* Selecting question list depending in the exercise-category * Selecting question list depending in the exercise-category
* relationship (category table in exercise settings) * relationship (category table in exercise settings)
@ -5494,12 +5507,11 @@ class Exercise
$questionList = $this->selectQuestionList(true); $questionList = $this->selectQuestionList(true);
// Looking for distributions // Looking for distributions
$trackExercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
if (!empty($sessionId)) { if (!empty($sessionId)) {
// Counting how many attempts from session are in the DB // Counting how many attempts from session are in the DB
$trackExercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$sql = "SELECT count(exe_id) as count FROM $trackExercises WHERE session_id = $sessionId"; $sql = "SELECT count(exe_id) as count FROM $trackExercises WHERE session_id = $sessionId";
$result = Database::query($sql); $result = Database::query($sql);
@ -5519,15 +5531,16 @@ class Exercise
'cId' => $this->course_id 'cId' => $this->course_id
); );
// Searching for forms in this sessions // Searching for forms in this session.
$quizDistributionRelSessions = $em->getRepository("Entity\CQuizDistributionRelSession")->findBy($params); $quizDistributionRelSessions = $em->getRepository("Entity\CQuizDistributionRelSession")->findBy($params);
if (!empty($quizDistributionRelSessions)) { if (!empty($quizDistributionRelSessions)) {
// Getting a distribution depends of the count of attempts and count of distributions. // Getting a distribution. It depends of the count of attempts and count of distributions.
$formToUse = $count % (count($quizDistributionRelSessions)); $formToUse = $count % (count($quizDistributionRelSessions));
/** @var \Entity\CQuizDistributionRelSession $quizDistributionRelSession */ /** @var \Entity\CQuizDistributionRelSession $quizDistributionRelSession */
if (isset($quizDistributionRelSessions[$formToUse])) { if (isset($quizDistributionRelSessions[$formToUse])) {
// We found a distribution!
$quizDistributionRelSession = $quizDistributionRelSessions[$formToUse]; $quizDistributionRelSession = $quizDistributionRelSessions[$formToUse];
$this->distributionId = $quizDistributionRelSession->getQuizDistributionId(); $this->distributionId = $quizDistributionRelSession->getQuizDistributionId();
$distribution = $quizDistributionRelSession->getDistribution(); $distribution = $quizDistributionRelSession->getDistribution();
@ -5535,14 +5548,31 @@ class Exercise
if (!empty($distribution)) { if (!empty($distribution)) {
$dataTracking = $distribution->getDataTracking(); $dataTracking = $distribution->getDataTracking();
} }
// Form question list found!
if (!empty($dataTracking)) { if (!empty($dataTracking)) {
$questionList = explode(',', $dataTracking); $questionList = explode(',', $dataTracking);
/*$this->categoryWithQuestionList = TestCategory::getCategoriesFromQuestionList(
// We make a little shuffle now.
$questionByCategory = TestCategory::getCategoriesFromQuestionList(
$questionList, $questionList,
$this->course_id $this->course_id,
);*/ true
);
$cat = new Testcategory();
$categoriesAddedInExercise = $cat->getCategoryExerciseTree(
$this->id,
null,
null,
false,
false,
false
);
$questionList = self::shuffleQuestionListPerCategory($questionByCategory, $categoriesAddedInExercise);
$questionList = ArrayClass::array_flatten($questionList);
} }
} }
} }
} }
@ -6162,6 +6192,7 @@ class Exercise
} }
} }
} }
return $categoriesWithQuestion; return $categoriesWithQuestion;
} }

Loading…
Cancel
Save