コード例 #1
0
 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;
 }