diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index 6087067f4a..577aaf7f3e 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -103,6 +103,7 @@ class Exercise public $globalCategoryId = null; public $distributionId = 0; public $loadDistributions = false; + public $trackExercise = array(); /** * Constructor of the class @@ -238,6 +239,9 @@ class Exercise // Control time $this->expired_time = $object->expired_time; + // 5. Getting user exercise info (if the user took the exam before) - generating exe_id + $this->trackExercise = $this->getStatTrackExerciseInfo(); + if ($parseQuestionList) { $this->setQuestionList($this->loadDistributions); } @@ -5600,66 +5604,73 @@ class Exercise $sessionId = api_get_session_id(); if (!empty($sessionId)) { - // 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"; - $result = Database::query($sql); + $dataExists = !empty($this->trackExercise) && isset($this->trackExercise['data_tracking']) && !empty($this->trackExercise['data_tracking']) ? true : false; - $count = 0; - if (Database::num_rows($result)) { - $result = Database::fetch_array($result); - $count = $result['count']; - } + if ($dataExists) { + $questionList = explode(',', $this->trackExercise['data_tracking']); + } else { - global $app; - /** @var \Doctrine\manager $em */ - $em = $app['orm.em']; + // 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"; + $result = Database::query($sql); - $params = array( - 'exerciseId' => $this->id, - 'sessionId' => $sessionId, - 'cId' => $this->course_id - ); + $count = 0; + if (Database::num_rows($result)) { + $result = Database::fetch_array($result); + $count = $result['count']; + } - // Searching for forms in this session. - $quizDistributionRelSessions = $em->getRepository("Entity\CQuizDistributionRelSession")->findBy($params); - - if (!empty($quizDistributionRelSessions)) { - // Getting a distribution. It depends of the count of attempts and count of distributions. - $formToUse = $count % (count($quizDistributionRelSessions)); - - /** @var \Entity\CQuizDistributionRelSession $quizDistributionRelSession */ - if (isset($quizDistributionRelSessions[$formToUse])) { - // We found a distribution! - $quizDistributionRelSession = $quizDistributionRelSessions[$formToUse]; - $this->distributionId = $quizDistributionRelSession->getQuizDistributionId(); - $distribution = $quizDistributionRelSession->getDistribution(); - $dataTracking = array(); - if (!empty($distribution)) { - $dataTracking = $distribution->getDataTracking(); - } - // Form question list found! - if (!empty($dataTracking)) { - $questionList = explode(',', $dataTracking); - - // We make a little shuffle now. - $questionByCategory = Testcategory::getCategoriesFromQuestionList( - $questionList, - $this->course_id - ); + global $app; + /** @var \Doctrine\manager $em */ + $em = $app['orm.em']; - $cat = new Testcategory(); - $categoriesAddedInExercise = $cat->getCategoryExerciseTree( - $this->id, - null, - null, - false, - false, - false - ); + $params = array( + 'exerciseId' => $this->id, + 'sessionId' => $sessionId, + 'cId' => $this->course_id + ); + + // Searching for forms in this session. + $quizDistributionRelSessions = $em->getRepository("Entity\CQuizDistributionRelSession")->findBy($params); + + if (!empty($quizDistributionRelSessions)) { + // Getting a distribution. It depends of the count of attempts and count of distributions. + $formToUse = $count % (count($quizDistributionRelSessions)); + + /** @var \Entity\CQuizDistributionRelSession $quizDistributionRelSession */ + if (isset($quizDistributionRelSessions[$formToUse])) { + // We found a distribution! + $quizDistributionRelSession = $quizDistributionRelSessions[$formToUse]; + $this->distributionId = $quizDistributionRelSession->getQuizDistributionId(); + $distribution = $quizDistributionRelSession->getDistribution(); + $dataTracking = array(); + if (!empty($distribution)) { + $dataTracking = $distribution->getDataTracking(); + } + // Form question list found! + if (!empty($dataTracking)) { + $questionList = explode(',', $dataTracking); + + // We make a little shuffle now. + $questionByCategory = Testcategory::getCategoriesFromQuestionList( + $questionList, + $this->course_id + ); - $questionList = self::shuffleQuestionListPerCategory($questionByCategory, $categoriesAddedInExercise); - $questionList = ArrayClass::array_flatten($questionList); + $cat = new Testcategory(); + $categoriesAddedInExercise = $cat->getCategoryExerciseTree( + $this->id, + null, + null, + false, + false, + false + ); + + $questionList = self::shuffleQuestionListPerCategory($questionByCategory, $categoriesAddedInExercise); + $questionList = ArrayClass::array_flatten($questionList); + } } } } diff --git a/main/exercice/exercise_submit.php b/main/exercice/exercise_submit.php index 3c53a96075..a2cc5a6563 100644 --- a/main/exercice/exercise_submit.php +++ b/main/exercice/exercise_submit.php @@ -349,6 +349,7 @@ if (!isset($exerciseInSession) || isset($exerciseInSession) && ($exerciseInSessi // Construction of Exercise /** @var \Exercise $objExercise */ $objExercise = new Exercise(); + if ($debug) { error_log('1. Setting the $objExercise variable'); } @@ -514,8 +515,12 @@ if ($objExercise->selectAttempts() > 0) { } } -// 5. Getting user exercise info (if the user took the exam before) - generating exe_id -$exercise_stat_info = $objExercise->getStatTrackExerciseInfo($learnpath_id, $learnpath_item_id, $learnpath_item_view_id); +if (empty($objExercise->trackExercise)) { + // 5. Getting user exercise info (if the user took the exam before) - generating exe_id + $exercise_stat_info = $objExercise->getStatTrackExerciseInfo($learnpath_id, $learnpath_item_id, $learnpath_item_view_id); +} else { + $exercise_stat_info = $objExercise->trackExercise; +} //if (1) { $questionListInSession = Session::read('questionList'); @@ -528,6 +533,7 @@ if (!isset($questionListInSession)) { // Getting order from random if ($media_is_activated == false && $objExercise->isRandom() && isset($exercise_stat_info) && !empty($exercise_stat_info['data_tracking'])) { + //if ($media_is_activated == false && isset($exercise_stat_info) && !empty($exercise_stat_info['data_tracking'])) { $questionList = explode(',', $exercise_stat_info['data_tracking']); } Session::write('questionList', $questionList);