function JQ_SeekQuestion() { global $JLMS_DB, $my; $ret_str = ''; $quiz_id = intval(mosGetParam($_REQUEST, 'quiz', 0)); $inside_lp = intval(mosGetParam($_REQUEST, 'inside_lp', 0)); $QA = new JLMS_quiz_API($quiz_id, $inside_lp); if (!$QA->quiz_valid()) { return ''; } $stu_quiz_id = intval(mosGetParam($_REQUEST, 'stu_quiz_id', 0)); $seek_quest_id = intval(mosGetParam($_REQUEST, 'seek_quest_id', 0)); $user_unique_id = strval(mosGetParam($_REQUEST, 'user_unique_id', '')); $QA->set('stu_quiz_id', $stu_quiz_id); $QA->set('user_unique_id', $user_unique_id); $QA->quiz_ProcessStartData(); // fill in start_valid private variable if ($QA->start_valid() && $seek_quest_id) { $quiz = $QA->quiz_data; // temporary for compatibility if ($QA->time_is_up()) { return JLMS_quiz_ajax_class::JQ_TimeIsUp($quiz); } $q_data = $QA->quiz_Get_QuestionList(); $seek_avail = false; $i = 0; foreach ($q_data as $qd) { if ($qd->c_id == $seek_quest_id) { $seek_avail = true; break; } $i++; } if ($seek_avail) { // if Seek question from the current quiz $quest_num = $i + 1; // number of question in the quiz sequence global $JLMS_LANGUAGE, $JLMS_CONFIG; JLMS_require_lang($JLMS_LANGUAGE, 'quiz.lang', $JLMS_CONFIG->get('default_language')); //require(_JOOMLMS_FRONT_HOME . "/languages/".$JLMS_CONFIG->get('default_language').'/quiz.lang.php'); require _JOOMLMS_FRONT_HOME . '/includes/quiz/quiz_language.php'; global $jq_language; if ($quiz->c_wrong_message) { $jq_language['quiz_answer_incorrect'] = htmlspecialchars(nl2br($quiz->c_wrong_message)); } if ($quiz->c_right_message) { $jq_language['quiz_answer_correct'] = htmlspecialchars(nl2br($quiz->c_right_message)); } $cur_tmpl = 'joomlaquiz_lms_template'; if ($cur_tmpl) { require_once dirname(__FILE__) . '/templates/' . $cur_tmpl . '/jq_template.php'; if (isset($q_data[$i])) { $query = "SELECT c_question_id FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $q_ids = $JLMS_DB->LoadResultArray(); $progress_quests_answered = count($q_ids); $quiz_params = new JLMSParameters($QA->quiz_data->params); $next_quest = 0; $skip_quest = $quiz_params->get('sh_skip_quest', 0); if ($skip_quest) { $q_num = 0; $q_num_ar = 0; $qqn = 0; foreach ($q_data as $qd) { if ($qd->c_id == $seek_quest_id) { $q_num = $qqn + 1; $q_num_ar = $qqn; break; } $qqn++; } if (!$q_num) { return ''; } else { $q_num = 0; $q_num_ar = 0; // here we are using $q_num and $q_num_ar for other needs (don't warry :) ) // find next not answered question for ($j = $qqn, $n = count($q_data); $j < $n; $j++) { if (!in_array($q_data[$j]->c_id, $q_ids) && $q_data[$j]->c_id != $seek_quest_id) { $q_num = $j + 1; $q_num_ar = $j; break; } } if (!$q_num) { // find not answered question from prev questions for ($j = 0; $j < $qqn; $j++) { if (!in_array($q_data[$j]->c_id, $q_ids) && $q_data[$j]->c_id != $seek_quest_id) { $q_num = $j + 1; $q_num_ar = $j; break; } } } if ($q_num) { // $quest_num = $q_num; $jj = $q_num_ar; } } $next_quest = $q_data[$jj]->c_id; } $toolbar = $QA->quiz_Get_StartToolbar($q_data[$i]->c_type, $skip_quest, $next_quest); //toolbar with 'Next' buttond and (if available)'Contents' button (from LP or QUIZ) $ret_str .= "\t" . '<task>seek_quest</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar) . ']]></quiz_menu>' . "\n"; $ret_str .= "\t" . '<quiz_quest_num>' . $quest_num . '</quiz_quest_num>' . "\n"; $kol_quests = count($q_data); $progressbar_value = intval(100 / $kol_quests * $progress_quests_answered); $ret_str .= "\t" . '<progress_quests_done>' . $progressbar_value . '</progress_quests_done>' . "\n"; $ret_str .= JLMS_quiz_ajax_class::JQ_GetQuestData($q_data[$i], $jq_language, $QA->get('stu_quiz_id', 0)); } } } } return $ret_str; }