function JQ_FinishQuiz($quiz_id, $stu_quiz_id, $user_unique_id, $id) { global $JLMS_DB, $my, $Itemid, $JLMS_CONFIG; $ret_str = ''; require_once dirname(__FILE__) . '/ajax_quiz.class.php'; $query = "SELECT * FROM #__lms_quiz_t_quiz WHERE c_id = '" . $quiz_id . "'"; $JLMS_DB->SetQuery($query); $quiz = $JLMS_DB->LoadObjectList(); if (count($quiz)) { $quiz = $quiz[0]; } else { return $ret_str; } $quiz_params = new JLMSParameters($quiz->params); $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(); $QA->set('stu_quiz_id', $stu_quiz_id); $QA->set('user_unique_id', $user_unique_id); $QA->quiz_ProcessStartData(); if ($QA->start_valid() && $quiz_id) { $query = "SELECT SUM(c_score) FROM #__lms_quiz_r_student_question WHERE c_stu_quiz_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $user_score = $JLMS_DB->LoadResult(); if (!$user_score) { $user_score = 0; } $max_score = $QA->quiz_Get_MaxScore(); $nugno_score = $QA->get_qvar('c_passing_score', 0) * $max_score / 100; $user_passed = 0; if ($user_score >= $nugno_score) { $user_passed = 1; } $user_time = 0; $quiz_time1 = time() - date('Z'); $query = "SELECT c_date_time FROM #__lms_quiz_r_student_quiz WHERE c_id = '" . $stu_quiz_id . "'"; $JLMS_DB->SetQuery($query); $quiz_time2 = $JLMS_DB->LoadResult(); $quiz_time2a = strtotime($quiz_time2); $user_time = $quiz_time1 - $quiz_time2a; $query = "SELECT c_total_score, c_passed, c_total_time FROM #__lms_quiz_r_student_quiz WHERE c_id = '" . $stu_quiz_id . "' and c_quiz_id = '" . $quiz_id . "' and c_student_id = '" . $my->id . "'"; $JLMS_DB->SetQuery($query); $user_quiz_results_obj = $JLMS_DB->LoadObject(); if (is_object($user_quiz_results_obj)) { $user_score = $user_quiz_results_obj->c_total_score; $user_passed = $user_quiz_results_obj->c_passed; $user_time = $user_quiz_results_obj->c_total_time; } // update lms results $lms_course = $QA->get_qvar('course_id', 0); $lms_quiz = $quiz_id; $lms_user = $my->id; $lms_score = $user_score; $lms_time = $user_time; $lms_date = date('Y-m-d H:i:s', time() - date('Z')); //the same as gmdate $lms_passed = $user_passed; global $JLMS_CONFIG; if ($lms_course && $JLMS_CONFIG->get('course_id') == $lms_course) { $course_params = $JLMS_CONFIG->get('course_params'); $params = new JLMSParameters($course_params); $do_insert_new_res = false; if ($params->get('track_type', 0) == 1) { $query = "SELECT * FROM #__lms_quiz_results WHERE course_id = '" . $lms_course . "' AND quiz_id = '" . $lms_quiz . "' AND user_id = '" . $lms_user . "'"; $JLMS_DB->SetQuery($query); $old_user_results = $JLMS_DB->LoadObject(); if (is_object($old_user_results)) { if (!$lms_passed && !$old_user_results->user_passed && $lms_score > $old_user_results->user_score) { $do_insert_new_res = true; } elseif ($lms_passed && !$old_user_results->user_passed) { $do_insert_new_res = true; } elseif ($lms_passed && $old_user_results->user_passed && $lms_score > $old_user_results->user_score) { $do_insert_new_res = true; } elseif ($lms_passed && $old_user_results->user_passed && $lms_score == $old_user_results->user_score && $lms_time < $old_user_results->user_time) { $do_insert_new_res = true; } } else { $do_insert_new_res = true; } } else { $do_insert_new_res = true; } if ($do_insert_new_res) { $query = "DELETE FROM #__lms_quiz_results WHERE course_id = '" . $lms_course . "' AND quiz_id = '" . $lms_quiz . "' AND user_id = '" . $lms_user . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $query = "INSERT INTO #__lms_quiz_results (course_id, quiz_id, user_id, user_score, quiz_max_score, user_time, quiz_date, user_passed)" . "\n VALUES ('" . $lms_course . "', '" . $lms_quiz . "', '" . $lms_user . "', '" . $lms_score . "', " . intval($max_score) . ", '" . $lms_time . "', '" . $lms_date . "', '" . $lms_passed . "')"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); } } // end of lms results section $cur_tmpl = 'joomlaquiz_lms_template'; if ($cur_tmpl) { require_once dirname(__FILE__) . '/templates/' . $cur_tmpl . '/jq_template.php'; global $JLMS_LANGUAGE, $JLMS_CONFIG; JLMS_require_lang($JLMS_LANGUAGE, 'quiz.lang', $JLMS_CONFIG->get('default_language')); require _JOOMLMS_FRONT_HOME . '/includes/quiz/quiz_language.php'; global $jq_language; #$ret_str .= "\t" . '<task>results</task>' . "\n"; $eee = $jq_language['quiz_header_fin_message']; #$ret_str .= "\t" . '<finish_msg><![CDATA['; if ($user_passed) { if ($QA->get_qvar('c_pass_message', '')) { $jq_language['quiz_user_passes'] = nl2br($QA->get_qvar('c_pass_message', '')); } } else { if ($QA->get_qvar('c_unpass_message', '')) { $jq_language['quiz_user_fails'] = nl2br($QA->get_qvar('c_unpass_message', '')); } } #$ret_str .= ']]></finish_msg>' . "\n"; $t_ar = array(); $t_ar[] = mosHTML::makeOption($user_score . " of " . $max_score, $jq_language['quiz_res_mes_score']); $t_ar[] = mosHTML::makeOption($nugno_score ? $nugno_score . " (" . $QA->get_qvar('c_passing_score', 0) . "%)" : '', $jq_language['quiz_res_mes_pas_score']); $tot_hour = floor($user_time / 3600); if ($tot_hour) { $tot_min = floor(($user_time - $tot_hour * 3600) / 60); $tot_sec = $user_time - $tot_hour * 3600 - $tot_min * 60; $tot_time = str_pad($tot_hour, 2, "0", STR_PAD_LEFT) . ":" . str_pad($tot_min, 2, "0", STR_PAD_LEFT) . ":" . str_pad($tot_sec, 2, "0", STR_PAD_LEFT); } else { $tot_min = floor($user_time / 60); $tot_sec = $user_time - $tot_min * 60; $tot_time = str_pad($tot_min, 2, "0", STR_PAD_LEFT) . ":" . str_pad($tot_sec, 2, "0", STR_PAD_LEFT); } $t_ar[] = mosHTML::makeOption($tot_time, $jq_language['quiz_res_mes_time']); if ($quiz_params->get('sh_final_page_text', 1) == 1) { $results_txt = JoomlaQuiz_template_class::JQ_show_results($jq_language['quiz_header_fin_results'], $t_ar); } else { $results_txt = ''; } $footer_ar = array(); $footer_ar[] = mosHTML::makeOption(0, $jq_language['quiz_fin_btn_review']); $footer_ar[] = mosHTML::makeOption(1, $jq_language['quiz_fin_btn_print']); $footer_ar[] = mosHTML::makeOption(2, $jq_language['quiz_fin_btn_certificate']); $footer_ar[] = mosHTML::makeOption(3, $jq_language['quiz_fin_btn_email']); $toolbar_fotter = array(); if ($QA->get_qvar('c_certificate', 0) && $user_passed) { $link_inside_1 = ampReplace($JLMS_CONFIG->get('live_site') . '/index.php?tmpl=component&option=com_joomla_lms&Itemid=' . $Itemid . '&no_html=1&task=print_quiz_cert&course_id=' . $lms_course . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id=' . $user_unique_id); $btn_certificate = 'window.open(\'' . $link_inside_1 . '\',\'blank\');'; $footer_ar[2]->text = "<div class='back_button'><a href='javascript:void(0)' onclick=\"window.open ('" . $JLMS_CONFIG->get('live_site') . "/index.php?tmpl=component&option=com_joomla_lms&Itemid=" . $Itemid . "&no_html=1&task=print_quiz_cert&course_id=" . $lms_course . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "','blank');\">" . $jq_language['quiz_fin_btn_certificate'] . "</a></div>"; $toolbar_footer[2] = array('btn_type' => 'certificate_fbar', 'btn_js' => $btn_certificate); } if ($QA->get_qvar('c_enable_print', 0)) { $link_inside_2 = ampReplace($JLMS_CONFIG->get('live_site') . '/index.php?tmpl=component&option=com_joomla_lms&Itemid=' . $Itemid . '&no_html=1&task=print_quiz_result&course_id=' . $lms_course . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id='); $btn_print = 'window.open(\'' . $link_inside_2 . '\'+user_unique_id,\'blank\');'; $footer_ar[1]->text = "<div class='back_button'><a href='javascript:void(0)' onclick=\"window.open ('" . $JLMS_CONFIG->get('live_site') . "/index.php?tmpl=component&option=com_joomla_lms&Itemid=" . $Itemid . "&no_html=1&task=print_quiz_result&course_id=" . $lms_course . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=' + user_unique_id,'blank');\">" . $jq_language['quiz_fin_btn_print'] . "</a></div>"; $toolbar_footer[1] = array('btn_type' => 'print_fbar', 'btn_js' => $btn_print); } if ($QA->get_qvar('c_email_to', 0)) { $btn_email_to = 'jq_emailResults();'; $footer_ar[3]->text = "<div class='back_button'><a href='javascript:void(0)' onclick=\"jq_emailResults();\">" . $jq_language['quiz_fin_btn_email'] . "</a></div>"; $toolbar_footer[3] = array('btn_type' => 'email_to_fbar', 'btn_js' => $btn_email_to); } if ($QA->get_qvar('c_enable_review', 0)) { $btn_review = 'jq_startReview();'; $query = "UPDATE #__lms_quiz_r_student_quiz SET allow_review = 1 WHERE c_id = '" . $stu_quiz_id . "' and c_quiz_id = '" . $quiz_id . "' and c_student_id = '" . $my->id . "'"; $JLMS_DB->SetQuery($query); $JLMS_DB->query(); $footer_ar[0]->text = "<div class='back_button'><a href='javascript:void(0)' onclick=\"jq_startReview();\">" . $jq_language['quiz_fin_btn_review'] . "</a></div>"; $toolbar_footer[0] = array('btn_type' => 'review_fbar', 'btn_js' => $btn_review); } $footer_html_graf = ''; if ($quiz_params->get('sh_final_page_grafic', 0) == 1) { ////----barss----//// $is_pool = 0; if ($quiz_id == -1 || $quiz_id == 0) { $is_pool = 1; $quiz_id = 0; } $rows = $QA->quiz_Get_QuestionList(); // 18 August 2007 - changes (DEN) - added check for GD and FreeType support $generate_images = true; $msg = ''; if (!function_exists('imageftbbox') || !function_exists('imagecreatetruecolor')) { $generate_images = false; $sec = false; if (!function_exists('imagecreatetruecolor')) { $msg = 'This function requires GD 2.0.1 or later (2.0.28 or later is recommended).'; $sec = true; } if (!function_exists('imageftbbox')) { $msg .= ($sec ? '<br />' : '') . 'This function is only available if PHP is compiled with freetype support.'; } } // end of GD and FreeType support check if ($JLMS_CONFIG->get('temp_folder', '') && $generate_images) { // temp folder setup is ready. //--------- array of bar-images $img_arr = array(); $title_arr = array(); $count_graph = array(); global $option; for ($i = 0, $n = count($rows); $i < $n; $i++) { $row = $rows[$i]; $quest_params = new JLMSParameters($row->params); $z = 1; if (isset($row->c_pool) && $row->c_pool) { $row->c_pool_id = $row->c_pool; } else { $row->c_pool_id = $row->c_id; } $show_case = true; // if($showtype_id && !$quest_params->get('survey_question')) if (false && !$quest_params->get('survey_question')) { $show_case = false; } if ($show_case) { require_once _JOOMLMS_FRONT_HOME . "/includes/libraries/lms.lib.graph.php"; $group_id = 0; $str_user_in_groups = ''; $c_question_id = $row->c_pool_id; $obj_GraphStat = JLMS_GraphStatistics($option, $id, $quiz_id, $i, $z, $row, $c_question_id, $group_id, $str_user_in_groups); foreach ($obj_GraphStat as $key => $item) { if (preg_match_all('#([a-z]+)_(\\w+)#', $key, $out, PREG_PATTERN_ORDER)) { if ($out[1][0] == 'img') { $img_arr[$i]->{$out}[2][0] = $item; } else { if ($out[1][0] == 'title') { $title_arr[$i]->{$out}[2][0] = $item; } else { if ($out[1][0] == 'count') { $count_graph[$i]->{$out}[2][0] = $item; } } } } } } } } $footer_html_graf = JoomlaQuiz_template_class::JQ_show_results_footer_content_bars($img_arr, $title_arr, $count_graph, $id); } $ret_str .= $results_txt; // this filed shouldn't be a null - null caused errors in Safari if ($quiz_params->get('sh_final_page_fdbck', 1) == 1) { $ret_str .= '<br />'; $ret_str .= JoomlaQuiz_template_class::JQ_show_results_msg($eee, $user_passed ? $jq_language['quiz_user_passes'] : $jq_language['quiz_user_fails'], $user_passed); $ret_str .= '<br />'; } else { $ret_str .= '<br />'; } if (isset($toolbar_footer) && count($toolbar_footer) > 0) { ksort($toolbar_footer); $footer_html = JLMS_ShowToolbar($toolbar_footer, false, 'center'); $footer_html = str_replace('"components/com_joomla_lms', '"' . $JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms', $footer_html); } else { $footer_html = ''; } $entire_footer_data = $footer_html . ($footer_html_graf ? '<br />' . $footer_html_graf : ''); $ret_str .= $entire_footer_data ? $entire_footer_data : ' '; } } return $ret_str; }
function JQ_NextQuestion_nojs() { global $JLMS_DB, $my, $option, $Itemid; $ret_str = ''; $id = intval(mosGetParam($_REQUEST, 'id', 0)); $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(); $stu_quiz_id = intval(mosGetParam($_REQUEST, 'stu_quiz_id', 0)); $quest_id = intval(mosGetParam($_REQUEST, 'quest_id', 0)); $quiz_quest_num = intval(mosGetParam($_REQUEST, 'quiz_quest_num', 0)); $user_unique_id = strval(mosGetParam($_REQUEST, 'user_unique_id', '')); $quest_score = intval(mosGetParam($_REQUEST, 'quest_score', 0)); // $answer = strval( mosGetParam( $_REQUEST, 'answer', '' ) ); $id = $QA->get_qvar('course_id', 0); $QA->set('stu_quiz_id', $stu_quiz_id); $QA->set('user_unique_id', $user_unique_id); $QA->quiz_ProcessStartData(); $q_data = $QA->quiz_Get_QuestionList(); $kol_quests = count($q_data); 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_nojs($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 */ $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; $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; } $is_correct = 0; $is_no_attempts = 0; switch ($proc_qtype) { case 1: case 3: case 12: if (isset($_REQUEST['quest_choice']) && $_REQUEST['quest_choice']) { $answer = strval(mosGetParam($_REQUEST, 'quest_choice', '')); $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 ($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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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(); } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } break; case 2: case 13: if (isset($_REQUEST['quest_choice']) && $_REQUEST['quest_choice']) { $answer = implode(',', $_REQUEST['quest_choice']); $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 ($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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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++; } } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } break; case 4: case 5: case 11: $count_match = count($_REQUEST['quest_match']); $arr_error = 1; for ($ji = 0; $ji < $count_match; $ji++) { if ($_REQUEST['quest_match'][$ji] == '{0}') { $arr_error = 0; } } if (isset($_REQUEST['quest_match']) && $_REQUEST['quest_match'] && $arr_error) { $answer = implode('```', $_REQUEST['quest_match']); $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; $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) { /** * 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: 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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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++; } } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } break; case 6: if (isset($_REQUEST['quest_blank']) && $_REQUEST['quest_blank'] != '') { $answer = strval(mosGetParam($_REQUEST, 'quest_blank', '')); $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(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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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(); } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } break; case 7: $answer = $_REQUEST['hotspot_x'] . ',' . $_REQUEST['hotspot_y']; $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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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: if (isset($_REQUEST['survey_box']) && $_REQUEST['survey_box'] != '') { $answer = strval(mosGetParam($_REQUEST, 'survey_box', '')); $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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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(); } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } break; case 9: for ($ji = 0; $ji < $_REQUEST['scale_count']; $ji++) { if (isset($_REQUEST['ch_scale_' . $ji]) && $_REQUEST['ch_scale_' . $ji]) { $arr[] = $_REQUEST['ch_scale_' . $ji]; } } $is_correct = 1; if (count($arr) == $_REQUEST['scale_count']) { $answer = implode(",", $arr); $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; 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 ($c_quest_cur_attempt >= $c_all_attempts) { $ret_str .= "\t" . '<task>no_attempts</task>' . "\n"; $ret_str .= "\t" . '<quiz_menu><![CDATA[' . JLMS_ShowToolbar($toolbar_no_a) . ']]></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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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 = '" . $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(); } } } else { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id=" . $id . "&quiz=" . $quiz_id . "&atask=goto_quest&seek_quest_id=" . $quest_id . "&quest_num=" . $quiz_quest_num . "&stu_quiz_id=" . $stu_quiz_id . "&user_unique_id=" . $user_unique_id . "")); } 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 ($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 ($is_avail) { $correct = JLMS_quiz_ajax_class::correct_answer($is_correct); $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; // $quest_num = intval( mosGetParam( $_REQUEST, 'quiz_quest_num', 1 ) ); /*function to show feedback for the answer to question*/ // JLMS_quiz_ajax_class::feedback($is_correct, $qtype, $quiz, $quest_id); /* 24 April 2007 (DEN) * Get next question from all quiz quests */ /*now it will the function of showing next question */ $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; 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 = $q_num; $j = $q_num_ar; } } // // echo $j; // echo 'q_num='.$q_num; $is_avail = 1; 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; 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; } } } } // echo '<pre>'; // print_r($q_data); // print_r($jq_language); // echo '</pre>'; $query = "SELECT a.*, b.lpath_id FROM #__lms_learn_path_step_quiz_results as a, #__lms_learn_path_steps as b WHERE a.stu_quiz_id = '" . $stu_quiz_id . "' AND a.step_id = b.id"; $JLMS_DB->setQuery($query); $this_lpath = $JLMS_DB->LoadObject(); $cur_tmpl = 'joomlaquiz_lms_template'; if ($cur_tmpl) { require_once dirname(__FILE__) . '/templates/' . $cur_tmpl . '/jq_template.php'; if (isset($q_data[$j])) { $atask = 'next_load'; if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { $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); } if ($is_no_attempts == 1) { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $jq_language['mes_no_attempts'], 2); } $toolbar = array(); if (isset($this_lpath->stu_quiz_id) && $this_lpath->stu_quiz_id == $stu_quiz_id) { if (isset($quiz->c_slide) && $quiz->c_slide) { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE, 'link_cont' => '&task=show_lpath_nojs&action=contents_lpath&course_id=' . $id . '&id=' . $this_lpath->lpath_id . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id=' . $this_lpath->unique_id . '&step_id=' . $this_lpath->step_id . '&user_start_id=' . $this_lpath->start_id . '&quest_id=' . $quest_id . '&quiz_id=' . $quiz_id . '&stu_quiz_id=' . $stu_quiz_id . ''); } else { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE); } } else { if (isset($quiz->c_slide) && $quiz->c_slide) { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE, 'link_cont' => '&task=quiz_action&atask=contents&id=' . $id . '&quiz=' . $quiz_id . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id=' . $user_unique_id . '&quest_id=' . $quest_id . ''); } else { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE); } } if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id={$id}&quiz={$quiz_id}&quest_id={$quest_id}&stu_quiz_id={$stu_quiz_id}&user_unique_id={$user_unique_id}&atask={$atask}")); } else { JLMS_quiz_ajax_class::JQ_feedback_nojs($atask, $id, $quiz_id, $msg_html, $toolbar, $stu_quiz_id, $user_unique_id, $quest_id); } } else { $atask = 'finish_stop'; if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { $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); } if ($is_no_attempts == 1) { $msg_html = JoomlaQuiz_template_class::JQ_show_messagebox('', $jq_language['mes_no_attempts'], 2); } $toolbar = array(); if (isset($this_lpath->stu_quiz_id) && $this_lpath->stu_quiz_id == $stu_quiz_id) { if (isset($quiz->c_slide) && $quiz->c_slide) { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE, 'link_cont' => '&task=show_lpath_nojs&action=contents_lpath&course_id=' . $id . '&id=' . $this_lpath->lpath_id . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id=' . $this_lpath->unique_id . '&step_id=' . $this_lpath->step_id . '&user_start_id=' . $this_lpath->start_id . '&quest_id=' . $quest_id . '&quiz_id=' . $quiz_id . '&stu_quiz_id=' . $stu_quiz_id . ''); } else { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE); } } else { if (isset($quiz->c_slide) && $quiz->c_slide) { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE, 'link_cont' => '&task=quiz_action&atask=contents&id=' . $id . '&quiz=' . $quiz_id . '&stu_quiz_id=' . $stu_quiz_id . '&user_unique_id=' . $user_unique_id . '&quest_id=' . $quest_id . ''); } else { $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => $quest_num, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE); } } if ($quiz_params->get('disable_quest_feedback') || $quest_params->get('disable_quest_feedback') || $quest_params->get('survey_question') || $qtype == 10) { JLMSRedirect(sefRelToAbs("index.php?option={$option}&Itemid={$Itemid}&task=quiz_action&id={$id}&quiz={$quiz_id}&quest_id={$quest_id}&stu_quiz_id={$stu_quiz_id}&user_unique_id={$user_unique_id}&atask={$atask}")); } else { JLMS_quiz_ajax_class::JQ_feedback_nojs($atask, $id, $quiz_id, $msg_html, $toolbar, $stu_quiz_id, $user_unique_id, $quest_id); } $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); $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(); } } } // echo $ret_str; // return $ret_str; }