//pr($unitsToQuestionsDifficulties); if (!$skillgap_tests) { if ($_GET['subunits']) { if (!$_GET['showall']) { foreach ($iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST)) as $key => $value) { $children = $currentContent->getNodeChildren($value['id']); foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($children), RecursiveIteratorIterator::SELF_FIRST)) as $child => $foo) { $subunits[$key][] = $child; } } } else { $lessons = EFrontLesson::getLessons(false, true); foreach ($lessons as $lesson_ID => $lesson) { $lessonsContent = new EfrontContentTree($lesson_ID); foreach ($iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($lessonsContent->tree), RecursiveIteratorIterator::SELF_FIRST)) as $key => $value) { $children = $lessonsContent->getNodeChildren($value['id']); foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($children), RecursiveIteratorIterator::SELF_FIRST)) as $child => $foo) { $subunits[$key][] = $child; } } } } $unitsToQuestionsDifficultiesSub = array(); foreach ($unitsToQuestionsDifficulties as $key => $value) { if (!empty($subunits[$key])) { $unitsToQuestionsDifficultiesSub[$key] = $unitsToQuestionsDifficulties[$key]; foreach ($subunits[$key] as $value2) { foreach ($unitsToQuestionsDifficulties[$value2] as $type => $num) { $unitsToQuestionsDifficultiesSub[$key][$type] += $num; } }
public function getQuestionsRandomTest($returnObjects = false) { if (empty($this->questions)) { $criteria = $this->options['random_test']; foreach ($criteria as $index => $array) { } $criteria_type = $index; if (isset($criteria[$criteria_type])) { if (!empty($criteria[$criteria_type])) { $numLessons = eF_getTableDataFlat("content", "distinct(lessons_ID)", "id IN (" . implode(',', array_keys($criteria[$criteria_type])) . ")"); } } if ($this->options['random_test_common_pool']) { $from_pool = $this->options['random_test_common_pool']; } else { // in case of linked tests if (sizeof($numLessons['lessons_ID']) > 1) { $from_pool = true; } else { if (sizeof($numLessons['lessons_ID']) == 1 && $numLessons['lessons_ID'][0] != $this->test['lessons_ID']) { $from_pool = true; } else { $from_pool = false; } } } if (!$from_pool) { // if there are performance issues maybe save common_pool flag to test and not retrieve all questions if not necessary $result = eF_getTableData("questions", "*", "lessons_ID=" . $_SESSION['s_lessons_ID'], "content_ID ASC"); } else { //@todo common pool //$currentUser = EfrontUserFactory::factory($_SESSION['s_login']); //$userLessons = $currentUser -> getLessons(false, $_SESSION['s_type']); //$result = eF_getTableData("questions,lessons", "questions.*", "lessons_ID in (".implode(",",array_keys($userLessons)).") and lessons_ID !=0 and lessons.id=questions.lessons_ID and lessons.active=1", "content_ID ASC"); $result = eF_getTableData("questions", "*", "", "content_ID ASC"); } $content_to_lesson = array(); $unitsToQuestionsDifficulties = array(); foreach ($result as $value) { $questions[$value['id']] = $value; if ($value['content_ID'] != 0) { $content_to_lesson[$value['content_ID']] = $value['lessons_ID']; } if (!isset($unitsToQuestionsDifficulties[$value['content_ID']])) { $unitsToQuestionsDifficulties[$value['content_ID']] = array(); } $unitsToQuestionsDifficulties[$value['content_ID']][$value['difficulty']][] = $value['id']; if (!isset($unitsToQuestionsTypes[$value['content_ID']])) { $unitsToQuestionsTypes[$value['content_ID']] = array(); } $unitsToQuestionsTypes[$value['content_ID']][$value['type']][] = $value['id']; } if (!$from_pool) { $currentContent = new EfrontContentTree($_SESSION['s_lessons_ID']); } if ($this->options['random_test_subunits']) { $unitsToQuestionsDifficultiesSub = $unitsToQuestionsDifficulties; $unitsToQuestionsTypesSub = $unitsToQuestionsTypes; foreach ($criteria[$criteria_type] as $key => $value) { if ($key && !empty($content_to_lesson[$key])) { // exclude none units questions if ($from_pool) { $currentContent = new EfrontContentTree($content_to_lesson[$key]); } $children = $currentContent->getNodeChildren($key); foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($children), RecursiveIteratorIterator::SELF_FIRST)) as $child => $foo) { if ($criteria_type == 'difficulty') { foreach (array_keys(Question::$questionDifficulties) as $difficulty) { $unitsToQuestionsDifficultiesSub[$key][$difficulty] = array_merge((array) $unitsToQuestionsDifficultiesSub[$key][$difficulty], (array) $unitsToQuestionsDifficulties[$child][$difficulty]); if (empty($unitsToQuestionsDifficultiesSub[$key][$difficulty])) { unset($unitsToQuestionsDifficultiesSub[$key][$difficulty]); } } } elseif ($criteria_type == 'type') { foreach (array_keys(Question::$questionTypes) as $type) { $unitsToQuestionsTypesSub[$key][$type] = array_merge((array) $unitsToQuestionsTypesSub[$key][$type], (array) $unitsToQuestionsTypes[$child][$type]); if (empty($unitsToQuestionsTypesSub[$key][$type])) { unset($unitsToQuestionsTypesSub[$key][$type]); } } } } } } $unitsToQuestionsTypes = $unitsToQuestionsTypesSub; $unitsToQuestionsDifficulties = $unitsToQuestionsDifficultiesSub; } //pr($unitsToQuestionsDifficulties); $selectedQuestions = array(); if (isset($criteria['difficulty'])) { foreach ($criteria['difficulty'] as $key => $arr) { foreach ($arr as $diff => $value) { shuffle($unitsToQuestionsDifficulties[$key][$diff]); $choice = array_slice($unitsToQuestionsDifficulties[$key][$diff], 0, $value); $selectedQuestions = array_merge((array) $selectedQuestions, (array) $choice); } } } elseif (isset($criteria['type'])) { foreach ($criteria['type'] as $key => $arr) { foreach ($arr as $type => $value) { shuffle($unitsToQuestionsTypes[$key][$type]); $choice = array_slice($unitsToQuestionsTypes[$key][$type], 0, $value); $selectedQuestions = array_merge((array) $selectedQuestions, (array) $choice); } } } $questions = array(); foreach ($selectedQuestions as $value) { $questions[$value] = $value; } $temp = array(); foreach ($questions as $value) { $ques = QuestionFactory::factory($value); $returnObjects ? $temp[$value] = $ques : ($temp[$value] = $ques->question); } $this->questions = $temp; } $questions = array(); foreach ($this->questions as $key => $value) { if ($value instanceof Question) { $returnObjects ? $questions[$key] = $value : ($questions[$key] = $value->question); } else { if (is_array($value)) { $returnObjects ? $questions[$key] = QuestionFactory::factory($value) : ($questions[$key] = $value); } else { $returnObjects ? $questions[$key] = QuestionFactory::factory($value) : ($questions[$key] = $value); } } } return $questions; }
$recentTests = eF_getTableData("completed_tests JOIN tests ON tests_id = tests.id JOIN users ON completed_tests.users_LOGIN = users.login JOIN users_to_skillgap_tests ON completed_tests.users_LOGIN = users_to_skillgap_tests.users_LOGIN AND users_to_skillgap_tests.tests_ID = tests.id AND users_to_skillgap_tests.solved = 1", "completed_tests.id, completed_tests.test, users.name as username, users.surname, completed_tests.tests_ID, tests.name, completed_tests.timestamp, completed_tests.users_LOGIN", "completed_tests.tests_id IN ('". implode("','", $test_ids) ."')", "timestamp DESC"); foreach ($recentTests as $rtid => $rtest) { $completedRecentTest = unserialize($rtest['test']); $recentTests[$rtid]['score'] = $completedRecentTest -> completedTest['score']; } } $smarty -> assign("T_RECENT_TESTS" , $recentTests); */ } else { if (!$skillgap_tests) { //Get the available questions (only questions from the selected unit, if there is one) try { isset($_GET['from_unit']) && eF_checkParameter($_GET['from_unit'], 'id') ? $selectedUnit = $_GET['from_unit'] : ($selectedUnit = 0); $siblings = $currentContent->getNodeChildren($selectedUnit); $children[] = $siblings['id']; foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($siblings), RecursiveIteratorIterator::SELF_FIRST)) as $key => $value) { $children[] = $key; } if (sizeof($children) > 0) { if ($_GET['showall'] && EfrontUser::isOptionVisible('questions_pool')) { if (G_VERSIONTYPE != 'community') { #cpp#ifndef COMMUNITY if (G_VERSIONTYPE != 'standard') { #cpp#ifndef STANDARD $questions = eF_getTableData("questions,lessons", "questions.*", "content_ID in (" . implode(",", $children) . ") and lessons_ID!=0 and lessons.id=questions.lessons_ID and lessons.active=1", "content_ID ASC"); //Retrieve all questions that belong to this unit or its subunits } #cpp#endif }