function JQ_NextQuestion() { global $JLMS_DB, $my; $JLMS_CONFIG =& JLMSFactory::getConfig(); $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 ''; } $toolbar_no_a = $QA->quiz_Get_NoAtToolbar(); //----------------- $resume_id = intval(mosGetParam($_REQUEST, 'resume_id', 0)); if ($resume_id) { $stu_quiz_id = $resume_id; } else { $stu_quiz_id = intval(mosGetParam($_REQUEST, 'stu_quiz_id', 0)); } //----------------- $last_question = intval(mosGetParam($_REQUEST, 'last_question', 0)); //echo $last_question; die; if ($last_question || $last_question == -1) { if ($last_question > 0) { $quest_id = $last_question; $query = "SELECT c_score FROM #__lms_quiz_r_student_question WHERE c_question_id = '" . $quest_id . "' AND c_stu_quiz_id = '" . $stu_quiz_id . "'"; $JLMS_DB->setQuery($query); $resume_quest_score = $JLMS_DB->LoadResult(); } else { // TODO: resume will not work for entirely GQP/QP quizzes; last quetion should be found in student_quiz_pool instead of quiz_question table !!! // 03Nov2009: this section is executed if learner have started the quiz but haven't answered any question. So, we need to gat 1st quiz question here and show it. // but we can't get it from quiz_t_question table, because our quizzes are QP\GQP-based // 03Nov2009: commented by DEN. will make $quest_id = -1; here and will extract 1st question after generating QP questions list // // TODO: if quiz resume -> resume all learner questions from student_quiz_pool /*$query = "SELECT c_id FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."' and published = 1 ORDER BY ordering desc LIMIT 1"; $JLMS_DB->setQuery($query); $quest_id = $JLMS_DB->LoadResult();*/ $quest_id = -1; } } else { $quest_id = intval(mosGetParam($_REQUEST, 'quest_id', 0)); } //----------------- $unique_id = mosGetParam($_REQUEST, 'unique_id', ''); if ($unique_id) { $user_unique_id = $unique_id; } else { $user_unique_id = strval(mosGetParam($_REQUEST, 'user_unique_id', '')); } $temp_quest_id = $quest_id; // deprecated ???? //----------------- //$answer = strval( mosGetParam( $_REQUEST, 'answer', '' ) ); $answer = strval(isset($_REQUEST['answer']) ? $_REQUEST['answer'] : ''); $answer = get_magic_quotes_gpc() ? stripslashes($answer) : $answer; $QA->set('stu_quiz_id', $stu_quiz_id); $QA->set('user_unique_id', $user_unique_id); $QA->quiz_ProcessStartData(); if ($QA->start_valid() && $quest_id) { $quiz = $QA->quiz_data; // temporary for compatibility $quiz_params = new JLMSParameters($QA->get_qvar('params')); if ($QA->time_is_up()) { return JLMS_quiz_ajax_class::JQ_TimeIsUp($quiz); } # commented 25 April 2007 by DEN # We could remove this unnecesary query and find all neede information about question in $q_data; /* // get question type /$query = "SELECT c_type from #__lms_quiz_t_question WHERE c_id = '".$quest_id."'"; $JLMS_DB->SetQuery( $query ); $qtype = $JLMS_DB->LoadResult();*/ /* insert results to the Database */ $q_data = $QA->quiz_Get_QuestionList(); // 25 April 2007 (DEN) We need this var here (Early it was declared after 'switch') /* * * * * * * (TIP) 25 April 2007 (DEN) * In $q_data array question_type NEVER will be 20 (pool question) * because in function 'quiz_Get_QuestionList()' of 'JLMS_quiz_API' class * we've changed 20 type to the actual type of pool question */ if ($quest_id == -1) { if (isset($q_data[0]) && isset($q_data[0]->c_id) && $q_data[0]->c_id) { $quest_id = $q_data[0]->c_id; } else { return ''; } } $is_quest_exists = false; $qtype = 0; $c_pool_quest = 0; foreach ($q_data as $qd) { if ($qd->c_id == $quest_id) { $is_quest_exists = true; $qtype = $qd->c_type; $c_pool_quest = $qd->c_pool; $c_pool_quest_gqp = $qd->c_pool_gqp; $quest_params = new JLMSParameters($qd->params); break; } } if (!$is_quest_exists) { return ''; } /* 25 April 2007 (DEN) * These vars are using for compatibility with Question Pool * (We should get answer-data for pool question, but record to DB answers for current question) * * - If current question type is 20 (question is added from pool), then we should process answers * for question from pool; but id for answers we should use current */ $proc_qtype = $qtype; $proc_quest_id = $quest_id; //if ($qtype == 20) { if ($c_pool_quest) { /* 24 April 2007 (pool question) * We must change vars $qtype and $quest_id to the actual vars (hmmm...? ) */ /*$query = "SELECT * FROM #__lms_quiz_t_question WHERE c_id = $c_pool_quest"; $JLMS_DB->setQuery($query); $pool_quest = $JLMS_DB->LoadObject(); if (is_object($pool_quest)) { $proc_qtype = $pool_quest->c_type;//$qtype; $proc_quest_id = $pool_quest->c_id;//$quest_id; } else { return ''; }*/ $proc_quest_id = $c_pool_quest; } if ($c_pool_quest_gqp) { $proc_quest_id = $c_pool_quest_gqp; } $is_correct = 0; $is_no_attempts = 0; if (!$resume_id) { //echo $proc_qtype; die; switch ($proc_qtype) { case 1: case 3: case 12: $query = "SELECT a.c_point, b.c_id, a.c_attempts FROM #__lms_quiz_t_question as a, #__lms_quiz_t_choice as b WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id and b.c_right = '1'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; if (count($ddd)) { if ($ddd[0]->c_id == $answer) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } if (isset($ddd[0]->c_attempts)) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts && $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_choice WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if (isset($resume_quest_score) && $resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $query = "INSERT INTO #__lms_quiz_r_student_choice (c_sq_id, c_choice_id)" . "\n VALUES('" . $c_sq_id . "', '" . $answer . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } break; case 2: case 13: $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $query = "SELECT b.c_id FROM #__lms_quiz_t_question as a, #__lms_quiz_t_choice as b WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id and b.c_right = '1'"; $JLMS_DB->SetQuery($query); $ddd2 = $JLMS_DB->LoadObjectList(); $query = "SELECT b.c_id FROM #__lms_quiz_t_question as a, #__lms_quiz_t_choice as b WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id and b.c_right <> '1'"; $JLMS_DB->SetQuery($query); $ddd3 = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; $ans_array = explode(',', $answer); if (count($ddd2) && count($ddd)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; foreach ($ddd2 as $right_row) { if (!in_array($right_row->c_id, $ans_array)) { $c_quest_score = 0; $is_correct = 0; } } foreach ($ddd3 as $not_right_row) { if (in_array($not_right_row->c_id, $ans_array)) { $c_quest_score = 0; $is_correct = 0; } } } if (count($ddd) && isset($ddd[0]->c_attempts) && $ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_choice WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if (isset($resume_quest_score) && $resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $i = 0; while ($i < count($ans_array)) { $query = "INSERT INTO #__lms_quiz_r_student_choice (c_sq_id, c_choice_id)" . "\n VALUES('" . $c_sq_id . "', '" . $ans_array[$i] . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $i++; } } break; case 4: case 5: case 11: $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $query = "SELECT b.c_id, b.c_left_text, b.c_right_text FROM #__lms_quiz_t_question as a, #__lms_quiz_t_matching as b WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id ORDER BY b.ordering"; $JLMS_DB->SetQuery($query); $ddd2 = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; $answer = urldecode($answer); $ans_array = explode('```', $answer); $ans_array_values = array(); if (count($ddd2) && count($ddd)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; $rr_num = 0; for ($di = 0, $dn = count($ddd2); $di < $dn; $di++) { $ddd2[$di]->c_right_text_md5 = md5($ddd2[$di]->c_right_text); } foreach ($ans_array as $ans_array_one) { foreach ($ddd2 as $right_row) { if ($ans_array_one == $right_row->c_right_text_md5) { $ans_array_values[$ans_array_one] = $right_row->c_right_text; break; } } } foreach ($ddd2 as $right_row) { /** * TODO (started): remove strings comparison. * TIPS: 1. we can not compare by id's, because in this case PRO-user with JS debugger can cheat * 2. may create comparison of md5-hashes (send hashes to the html page instead of answer options)? */ if (trim($right_row->c_right_text_md5) != trim($ans_array[$rr_num])) { $c_quest_score = 0; $is_correct = 0; } $rr_num++; } if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_matching WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if (isset($resume_quest_score) && $resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $i = 0; while ($i < count($ddd2)) { $cur_quest_answer_value = isset($ans_array_values[$ans_array[$i]]) ? $ans_array_values[$ans_array[$i]] : $ans_array[$i]; $query = "INSERT INTO #__lms_quiz_r_student_matching (c_sq_id, c_matching_id, c_sel_text)" . "\n VALUES('" . $c_sq_id . "', '" . $ddd2[$i]->c_id . "', " . $JLMS_DB->Quote($cur_quest_answer_value) . ")"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $i++; } } break; case 6: $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $query = "SELECT c.c_text FROM #__lms_quiz_t_question as a, #__lms_quiz_t_blank as b, #__lms_quiz_t_text as c WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id and c.c_blank_id = b.c_id"; $JLMS_DB->SetQuery($query); $ddd2 = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; $answer = trim($answer); if (PHP_VERSION < 5) { $answer = php4_utf8_urldecode($answer); } else { $answer = php5_utf8_urldecode($answer); } if (count($ddd2) && count($ddd)) { /*foreach ($ddd2 as $right_row) { if($quest_params->get('case_sensivity', 0)){ if ($right_row->c_text === $answer) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } else { if (strtolower($right_row->c_text) === strtolower($answer)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } }*/ foreach ($ddd2 as $right_row) { if ($quest_params->get('case_sensivity', 0)) { if ($right_row->c_text === $answer) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } else { if (strtolower($right_row->c_text) === strtolower($answer)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } if (!$is_correct) { /** * 01 November 2007 - DEN - bugfix - checking different character encodings * I.e. if browser sent data in UTF, but DB collation is ISO * or another case, if DB collation is UTF, but browser sent response in ISO. * TODO: code is not tested fully. - need testing with ISO (danish, german), cp and UTF */ if (function_exists('utf8_encode')) { $a_u = utf8_encode($right_row->c_text); $b_u = utf8_encode($answer); } else { $a_u = $right_row->c_text; $b_u = $answer; } if ($quest_params->get('case_sensivity', 0)) { if ($a_u === $answer) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } else { if ($right_row->c_text === $b_u) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } } else { if (strtolower($a_u) === strtolower($answer)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } else { if (strtolower($right_row->c_text) === strtolower($b_u)) { $c_quest_score = $ddd[0]->c_point; $is_correct = 1; } } } } } if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_blank WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if (isset($resume_quest_score) && $resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $query = "INSERT INTO #__lms_quiz_r_student_blank (c_sq_id, c_answer)" . "\n VALUES('" . $c_sq_id . "', " . $JLMS_DB->Quote($answer) . ")"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } break; case 7: $query = "SELECT a.c_point, a.c_attempts, b.c_start_x, b.c_start_y, b.c_width, b.c_height FROM #__lms_quiz_t_question as a, #__lms_quiz_t_hotspot as b WHERE a.c_id = '" . $proc_quest_id . "' and b.c_question_id = a.c_id"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; if (count($ddd)) { $ans_array = explode(',', $answer); if (count($ans_array) == 2 && $ans_array[0] >= $ddd[0]->c_start_x && $ans_array[0] <= $ddd[0]->c_start_x + $ddd[0]->c_width && $ans_array[1] >= $ddd[0]->c_start_y && $ans_array[1] <= $ddd[0]->c_start_y + $ddd[0]->c_height) { $is_correct = 1; $c_quest_score = $ddd[0]->c_point; } if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts && $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_hotspot WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if ($resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $query = "INSERT INTO #__lms_quiz_r_student_hotspot (c_sq_id, c_select_x, c_select_y)" . "\n VALUES('" . $c_sq_id . "', '" . (isset($ans_array[0]) ? $ans_array[0] : 0) . "', '" . (isset($ans_array[1]) ? $ans_array[1] : 0) . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } break; case 8: $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; $answer = trim(urldecode($answer)); if (count($ddd)) { if ($answer) { $is_correct = 1; $c_quest_score = $ddd[0]->c_point; } if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts && $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_survey WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if ($resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $query = "INSERT INTO #__lms_quiz_r_student_survey (c_sq_id, c_answer)" . "\n VALUES('" . $c_sq_id . "', " . $JLMS_DB->Quote($answer) . ")"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } break; case 9: $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $is_correct = 1; $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $toolbar_code = JLMS_ShowToolbar($toolbar_no_a); $toolbar_code = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $toolbar_code); $ret_str .= "\t" . '<quiz_menu><![CDATA[' . $toolbar_code . ']]></quiz_menu>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "DELETE FROM #__lms_quiz_r_student_scale WHERE c_sq_id = '" . $c_tmp[0]->c_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { // not necessary.... this questino is always 'survey' - just for future $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if (isset($resume_quest_score) && $resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $c_sq_id = $JLMS_DB->insertid(); $query = "SELECT * FROM #__lms_quiz_t_scale WHERE c_question_id = '" . $proc_quest_id . "' AND c_type!='1' ORDER BY ordering"; $JLMS_DB->SetQuery($query); $c_scal = $JLMS_DB->LoadObjectList(); $ans_array = explode(',', $answer); for ($p = 0; $p < count($ans_array); $p++) { $query = "INSERT INTO #__lms_quiz_r_student_scale (c_sq_id, q_scale_id, scale_id)" . "\n VALUES('" . $c_sq_id . "', '" . $c_scal[$p]->c_id . "', '" . $ans_array[$p] . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } break; case 10: $query = "SELECT a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id . "'"; $JLMS_DB->SetQuery($query); $ddd = $JLMS_DB->LoadObjectList(); $c_quest_score = 0; $c_all_attempts = 1; $is_avail = 1; $is_correct = 1; $answer = trim(urldecode($answer)); if (count($ddd)) { if ($ddd[0]->c_attempts) { $c_all_attempts = $ddd[0]->c_attempts; } } $c_quest_cur_attempt = 0; $query = "SELECT c_id, c_attempts FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $c_tmp = $JLMS_DB->LoadObjectList(); if (count($c_tmp)) { $c_quest_cur_attempt = $c_tmp[0]->c_attempts; if ($ddd[0]->c_attempts > 0 && $c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $is_avail = 0; $is_no_attempts = 1; } if ($is_avail) { $query = "DELETE FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' and c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } if ($quest_params->get('survey_question')) { // not necessary too.... this questin is just a content page $is_correct = 1; } if ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); if ($resume_quest_score) { $c_quest_score = $resume_quest_score; } $query = "INSERT INTO #__lms_quiz_r_student_question (c_stu_quiz_id, c_question_id, c_score, c_attempts, c_correct)" . "\n VALUES('" . $stu_quiz_id . "', '" . $quest_id . "', '" . $c_quest_score . "', '" . ($c_quest_cur_attempt + 1) . "', '" . $correct . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } break; } } $j = -1; $quest_num = 1; /* 24 April 2007 (DEN) * Get next question from all quiz quests */ $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(); $q_num = 0; $q_num_ar = 0; $qqn = 0; // get number of answered questions (to estimate value for progressbar if enabled) $progress_quests_answered = count($q_ids); foreach ($q_data as $qd) { if ($qd->c_id == $quest_id) { $q_num = $qqn + 1; $q_num_ar = $qqn; break; } $qqn++; } /* echo $quest_id; echo '<pre>'; print_r($q_data); echo '</pre>'; echo 'qqn='.$qqn; echo 'q_num='.$q_num; //(Max): ja tut testil pohodu tut gdeto kosiak die; */ if (!$q_num) { return ''; } else { $q_num = 0; $q_num_ar = 0; if ($last_question == -1) { //resume from first question - we need to show first question! if ($qqn) { $qqn = $qqn - 1; } } //echo $last_question; echo $qqn;die; // here we are using $q_num and $q_num_ar for other needs (don't warry :) ) // find next not answered question for ($i = $qqn, $n = count($q_data); $i < $n; $i++) { if (!in_array($q_data[$i]->c_id, $q_ids) && $q_data[$i]->c_id != $quest_id) { $q_num = $i + 1; $q_num_ar = $i; break; } } if ($last_question == -1) { //resume from first question - we need to show first question! if (!$qqn) { if (isset($q_data[0]->c_id) && $q_data[0]->c_id == $quest_id) { $q_num = 1; $q_num_ar = 0; } } } if (!$q_num) { // find not answered question from prev questions for ($i = 0; $i < $qqn; $i++) { if (!in_array($q_data[$i]->c_id, $q_ids) && $q_data[$i]->c_id != $quest_id) { $q_num = $i + 1; $q_num_ar = $i; break; } } } if ($q_num) { $quest_num = $q_num; $j = $q_num_ar; } } // // echo 'j='.$j; //Max: skip mod next question skip $jx = -1; if (isset($q_data[$j]->c_id)) { $q_ids[] = $q_data[$j]->c_id; $q_num = 0; $q_num_ar = 0; $qqn = 0; foreach ($q_data as $qd) { if ($qd->c_id == $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 ($i = $qqn, $n = count($q_data); $i < $n; $i++) { if (!in_array($q_data[$i]->c_id, $q_ids) && $q_data[$i]->c_id != $quest_id) { $q_num = $i + 1; $q_num_ar = $i; break; } } if (!$q_num) { // find not answered question from prev questions for ($i = 0; $i < $qqn; $i++) { if (!in_array($q_data[$i]->c_id, $q_ids) && $q_data[$i]->c_id != $quest_id) { $q_num = $i + 1; $q_num_ar = $i; break; } } } if ($q_num) { $quest_num_x = $q_num; $jx = $q_num_ar; } } } /* if ($quiz->c_random) { $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(); $q_kol_already = count($q_ids); if (!count($q_ids)) { $q_ids = array(0); } $qids = implode(',',$q_ids); $query = "SELECT * FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."' AND c_id NOT IN (".$qids.") ORDER BY ordering, c_id"; $JLMS_DB->SetQuery( $query ); $q_data = $JLMS_DB->LoadObjectList(); $kol_q = count($q_data); if ($kol_q) { $j = rand(0, ($kol_q - 1) ); } else { $j = -1; } $query = "SELECT count(*) FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."'"; $JLMS_DB->SetQuery( $query ); $q_total = $JLMS_DB->LoadResult(); $quest_num = $q_kol_already + 1; } else { $query = "SELECT ordering from #__lms_quiz_t_question WHERE c_id = '".$quest_id."'"; $JLMS_DB->SetQuery( $query ); $qorder = $JLMS_DB->LoadResult(); $query = "SELECT * FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."' ORDER BY ordering, c_id"; $JLMS_DB->SetQuery($query); $q_data = $JLMS_DB->LoadObjectList(); $i = 0;$j = 0; while($i < count($q_data)) { if ($q_data[$i]->ordering < $qorder) { $j ++; } elseif (($q_data[$i]->ordering == $qorder) && ($q_data[$i]->c_id < $quest_id)) { $j ++; } elseif (($q_data[$i]->ordering == $qorder) && ($q_data[$i]->c_id == $quest_id)) { $j ++; } else { } $i ++; } $quest_num = $j + 1; if (!isset($q_data[$j])) { $query = "SELECT count(*) FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."'"; $JLMS_DB->SetQuery( $query ); $qk = $JLMS_DB->LoadResult(); $query = "SELECT c_question_id FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '".$stu_quiz_id."'"; $JLMS_DB->SetQuery( $query ); $qq_d = $JLMS_DB->LoadResultArray(); $qq = count($qq_d); if ( $qk && $qq && ($qk != $qq)) { if (!count($qq_d)) { $qq_d = array(0); } $qids = implode(',',$qq_d); $query = "SELECT * FROM #__lms_quiz_t_question WHERE c_quiz_id = '".$quiz_id."' AND c_id NOT IN (".$qids.") ORDER BY ordering, c_id"; $JLMS_DB->SetQuery( $query ); $q_data = $JLMS_DB->LoadObjectList(); $kol_q = count($q_data); if ($kol_q) { $j = 0; } else { $j = -1; } $quest_num = $qq + 1; } } }*/ $is_avail = 1; if (isset($c_quest_cur_attempt) && isset($c_all_attempts)) { if ($c_quest_cur_attempt + 1 >= $c_all_attempts) { $is_avail = 0; } } //require( dirname(__FILE__) . "/language/english.php"); // preloading QUIZ languge (28.02.2007 new method) (all quizzes messages now in global quiz language) 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; /*$query = "SELECT lang_file FROM #__lms_quiz_languages WHERE is_default = 1 and lang_file <> 'default'"; $JLMS_DB->SetQuery( $query ); $req_lang = $JLMS_DB->LoadResult(); if ($req_lang && file_exists( dirname(__FILE__) . "/language/".$req_lang.".php")) { include( dirname(__FILE__) . "/language/".$req_lang.".php"); }*/ /*if ( ($quiz->c_language) && ($quiz->c_language != 1) ) { $query = "SELECT lang_file FROM #__lms_quiz_languages WHERE id = '".intval($quiz->c_language)."'"; $JLMS_DB->SetQuery( $query ); $req_lang = $JLMS_DB->LoadResult(); if ($req_lang && file_exists( dirname(__FILE__) . "/language/".$req_lang.".php")) { include( dirname(__FILE__) . "/language/".$req_lang.".php"); } }*/ 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)); } //$q_t_params = $QA->get_qvar('params'); if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback')) { } else { $query = "SELECT * FROM #__lms_quiz_t_question_fb WHERE quest_id = {$quest_id}"; $JLMS_DB->SetQuery($query); $q_fbs = $JLMS_DB->LoadObjectList(); foreach ($q_fbs as $qfb) { if ($qfb->choice_id == -1) { if ($qfb->fb_text) { $jq_language['quiz_answer_incorrect'] = $qfb->fb_text; } } elseif (!$qfb->choice_id) { if ($qfb->fb_text) { $jq_language['quiz_answer_correct'] = $qfb->fb_text; $jq_language['quiz_answer_accepted'] = $qfb->fb_text; } } } } //Max: modign skip question // $quiz_params = new JLMSParameters($QA->quiz_data->params); $skip_quest = $quiz_params->get('sh_skip_quest', 0); $next_quest = 0; if ($skip_quest) { $next_quest = isset($q_data[$jx]->c_id) ? $q_data[$jx]->c_id : 0; } else { $next_quest = 0; } // 12.03.2007 #$query = "SELECT template_name FROM #__lms_quiz_templates WHERE id = '".$quiz->c_skin."'"; #$JLMS_DB->SetQuery( $query ); #$cur_tmpl = $JLMS_DB->LoadResult(); $cur_tmpl = 'joomlaquiz_lms_template'; if ($cur_tmpl) { require_once dirname(__FILE__) . '/templates/' . $cur_tmpl . '/jq_template.php'; $is_correct_report = $is_correct; if ($is_no_attempts == 1) { //get information about correct/incorrect answer from previous attempt. //to avoid corruption of statistics at the frontend (in the list of quiz questions - slide panel) $query = "SELECT c_correct FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "' AND c_question_id = '" . $quest_id . "'"; $JLMS_DB->SetQuery($query); $is_correct_db = intval($JLMS_DB->LoadResult()); if ($is_correct_db == 2) { $is_correct_report = 1; } else { $is_correct_report = 0; } } $kol_quests = count($q_data); if (isset($q_data[$j])) { $toolbar = array(); if ($is_correct) { $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinue();void(0);"); } else { if ($is_avail) { $toolbar[] = array('btn_type' => 'prev', 'btn_js' => "javascript:jq_QuizBack();void(0);"); $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinue();void(0);"); } else { $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinue();void(0);"); } } $inside_lp = intval(mosGetParam($_REQUEST, 'inside_lp', 0)); if ($inside_lp) { $toolbar[] = array('btn_type' => 'contents', 'btn_js' => "javascript:ajax_action('contents_lpath');"); } else { if ($quiz->c_slide) { $toolbar[] = array('btn_type' => 'contents', 'btn_js' => "javascript:jq_ShowPanel();"); } } $exec_resume_script = ''; $quiz->resume_timer_value = 0; if ($resume_id) { $ret_str .= "\t" . '<task>resume</task>' . "\n"; $ret_str .= "\t" . '<user_unique_id>' . $unique_id . '</user_unique_id>' . "\n"; $ret_str .= "\t" . '<stu_quiz_id>' . $resume_id . '</stu_quiz_id>' . "\n"; $ret_str .= "\t" . '<quiz_count_quests>' . $kol_quests . '</quiz_count_quests>' . "\n"; $quiz->resume_timer_value = $QA->get_user_time(); $quiz_time_limit = intval($QA->get_qvar('c_time_limit')) * 60; $exec_resume_script = 'timer_sec = ' . $quiz->resume_timer_value . '; max_quiz_time = ' . $quiz_time_limit . ';'; } else { $ret_str .= "\t" . '<task>next</task>' . "\n"; } $progressbar_value = intval(100 / $kol_quests * $progress_quests_answered); $ret_str .= "\t" . '<progress_quests_done>' . $progressbar_value . '</progress_quests_done>' . "\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"; $ret_str .= "\t" . '<quiz_prev_correct>' . $is_correct_report . '</quiz_prev_correct>' . "\n"; $ret_str .= "\t" . '<quiz_skip_next_quest>' . $next_quest . '</quiz_skip_next_quest>' . "\n"; if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { $ret_str .= "\t" . '<quest_feedback>0</quest_feedback>' . "\n"; $ret_str .= "\t" . '<quest_feedback_repl_func><![CDATA[jq_QuizContinue();]]></quest_feedback_repl_func>' . "\n"; $msg_html = ' '; } else { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $is_correct ? $qtype == 8 ? $jq_language['quiz_answer_accepted'] : $jq_language['quiz_answer_correct'] : $jq_language['quiz_answer_incorrect'], $is_correct); $ret_str .= "\t" . '<quest_feedback>1</quest_feedback>' . "\n"; $ret_str .= "\t" . '<quest_feedback_repl_func>0</quest_feedback_repl_func>' . "\n"; } if ($is_no_attempts == 1) { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $jq_language['mes_no_attempts'], 2); } $ret_str .= "\t" . '<quiz_message_box><![CDATA[' . $msg_html . ']]></quiz_message_box>' . "\n"; $ret_str .= "\t" . '<quiz_allow_attempt>' . $is_avail . '</quiz_allow_attempt>' . "\n"; $ret_str .= JLMS_quiz_ajax_class::JQ_GetQuestData($q_data[$j], $jq_language, $QA->get('stu_quiz_id', 0), $exec_resume_script); if ($resume_id) { $ret_str .= JLMS_quiz_ajax_class::JQ_GetPanelData_resume($quiz->c_id, $q_data); //echo JLMS_quiz_ajax_class::JQ_GetPanelData($quiz->c_id, $q_data); die; } } else { $ret_str .= "\t" . '<task>finish</task>' . "\n"; if ($is_no_attempts == 1) { $ret_str = "\t" . '<task>finish</task>' . "\n"; } $progressbar_value = intval(100 / $kol_quests * $progress_quests_answered); $ret_str .= "\t" . '<progress_quests_done>' . $progressbar_value . '</progress_quests_done>' . "\n"; $toolbar = array(); if ($is_correct) { $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinueFinish();void(0);"); } else { if ($is_avail) { $toolbar[] = array('btn_type' => 'prev', 'btn_js' => "javascript:jq_QuizBack();void(0);"); $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinueFinish();void(0);"); } else { $toolbar[] = array('btn_type' => 'next', 'btn_js' => "javascript:jq_QuizContinueFinish();void(0);"); } } if ($skip_quest && $next_quest) { $toolbar[] = array('btn_type' => 'skip', 'btn_js' => "javascript:JQ_gotoQuestion(" . $next_quest . ");void(0);"); } $inside_lp = intval(mosGetParam($_REQUEST, 'inside_lp', 0)); if ($inside_lp) { $toolbar[] = array('btn_type' => 'contents', 'btn_js' => "javascript:ajax_action('contents_lpath');"); } else { if ($quiz->c_slide) { $toolbar[] = array('btn_type' => 'contents', 'btn_js' => "javascript:jq_ShowPanel();"); } } $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar) . ']]></quiz_menu>' . "\n"; $ret_str .= "\t" . '<quiz_prev_correct>' . $is_correct_report . '</quiz_prev_correct>' . "\n"; if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { $ret_str .= "\t" . '<quest_feedback>0</quest_feedback>' . "\n"; $ret_str .= "\t" . '<quest_feedback_repl_func><![CDATA[jq_QuizContinueFinish();]]></quest_feedback_repl_func>' . "\n"; $msg_html = ' '; } else { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $is_correct ? $qtype == 8 ? $jq_language['quiz_answer_accepted'] : $jq_language['quiz_answer_correct'] : $jq_language['quiz_answer_incorrect'], $is_correct); $ret_str .= "\t" . '<quest_feedback>1</quest_feedback>' . "\n"; $ret_str .= "\t" . '<quest_feedback_repl_func>0</quest_feedback_repl_func>' . "\n"; } if ($is_no_attempts == 1) { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $jq_language['mes_no_attempts'], 2); } $ret_str .= "\t" . '<quiz_message_box><![CDATA[' . $msg_html . ']]></quiz_message_box>' . "\n"; /*$msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', (($is_correct)?(($qtype == 8)?$jq_language['quiz_answer_accepted']:$jq_language['quiz_answer_correct']):$jq_language['quiz_answer_incorrect'])); if ($is_no_attempts == 1) { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $jq_language['mes_no_attempts']); } $ret_str .= "\t" . '<quiz_message_box><![CDATA['.$msg_html.']]></quiz_message_box>' . "\n";*/ $ret_str .= "\t" . '<quiz_allow_attempt>' . $is_avail . '</quiz_allow_attempt>' . "\n"; $query = "SELECT sum(c_score) FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $q_total_score = $JLMS_DB->LoadResult(); $query = "SELECT c_date_time FROM #__lms_quiz_r_student_quiz WHERE c_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $q_beg_time = $JLMS_DB->LoadResult(); $q_time_total = time() - date('Z') - strtotime($q_beg_time); if (!$resume_id) { $query = "UPDATE #__lms_quiz_r_student_quiz SET c_total_score = '" . $q_total_score . "', c_total_time = '" . $q_time_total . "' WHERE c_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } } } return $ret_str; }