Beispiel #1
0
    function JQ_StartReview_nojs()
    {
        global $JLMS_DB, $my, $option, $Itemid, $JLMS_CONFIG;
        $ret_str = '';
        $doc =& JFactory::getDocument();
        $id = intval(mosGetParam($_REQUEST, 'id', 0));
        $quiz_id = intval(mosGetParam($_REQUEST, 'quiz', 0));
        $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);
        $now = date('Y-m-d H:i:s', time() - date('Z'));
        if ($quiz->published) {
            if ($my->id) {
            } elseif ($quiz->c_guest) {
            } else {
                return $ret_str;
            }
        } else {
            $JLMS_ACL =& JLMSFactory::getACL();
            if (!$JLMS_ACL->CheckPermissions('quizzes', 'view_all')) {
                return $ret_str;
            }
        }
        if ($quiz_id) {
            $stu_quiz_id = intval(mosGetParam($_REQUEST, 'stu_quiz_id', 0));
            $user_unique_id = strval(mosGetParam($_REQUEST, 'user_unique_id', ''));
            if ($stu_quiz_id) {
                $query = "SELECT c_quiz_id, c_student_id, unique_id, allow_review, c_passed FROM #__lms_quiz_r_student_quiz WHERE c_id = '" . $stu_quiz_id . "'";
                $JLMS_DB->SetQuery($query);
                $st_quiz_data = $JLMS_DB->LoadObjectList();
                $start_quiz = 0;
                if (count($st_quiz_data)) {
                    $start_quiz = $st_quiz_data[0]->c_quiz_id;
                } else {
                    return '';
                }
                if ($user_unique_id != $st_quiz_data[0]->unique_id) {
                    return '';
                }
                if ($my->id != $st_quiz_data[0]->c_student_id) {
                    return '';
                }
                if ($start_quiz != $quiz_id) {
                    return '';
                }
                if (!$st_quiz_data[0]->allow_review) {
                    return '';
                }
                $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();
                // 22.04.2008 Bugfix - support for Questions pool
                $inside_lp = intval(mosGetParam($_REQUEST, 'inside_lp', 0));
                $QA = new JLMS_quiz_API($quiz_id, $inside_lp);
                if (!$QA->quiz_valid()) {
                    return '';
                }
                $QA->set('stu_quiz_id', $stu_quiz_id);
                $QA->set('user_unique_id', $user_unique_id);
                $QA->quiz_ProcessStartData();
                if ($QA->start_valid()) {
                    $q_data = $QA->quiz_Get_QuestionList();
                }
                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;
                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));
                }
                $quest_params = new JLMSParameters($q_data[0]->params);
                if ($quest_params->get('survey_question') == 1) {
                    $is_survey = 1;
                } else {
                    $is_survey = 0;
                }
                $is_correct = 0;
                //---test for right quest
                $proc_quest_id = $q_data[0]->c_id;
                if (isset($q_data[0]->c_pool) && $q_data[0]->c_pool) {
                    $q_data[0]->old_c_id = $q_data[0]->c_id;
                    $q_data[0]->c_id = $q_data[0]->c_pool;
                    $proc_quest_id_pool = $q_data[0]->c_pool;
                } elseif (isset($q_data[0]->c_pool_gqp) && $q_data[0]->c_pool_gqp) {
                    $q_data[0]->old_c_id = $q_data[0]->c_id;
                    $q_data[0]->c_id = $q_data[0]->c_pool_gqp;
                    $proc_quest_id_pool = $q_data[0]->c_pool_gqp;
                } else {
                    $proc_quest_id_pool = $q_data[0]->c_id;
                    $q_data[0]->old_c_id = $q_data[0]->c_id;
                }
                $proc_quest_id = $q_data[0]->c_id;
                switch ($q_data[0]->c_type) {
                    case 1:
                    case 3:
                    case 12:
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT c_choice_id FROM #__lms_quiz_r_student_choice WHERE c_sq_id = '" . $sqtq_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $answer = $JLMS_DB->LoadResult();
                        $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_pool . "' and b.c_question_id = a.c_id and b.c_right = '1'";
                        $JLMS_DB->SetQuery($query);
                        $ddd = $JLMS_DB->LoadObjectList();
                        if ($answer) {
                            if (count($ddd)) {
                                if ($ddd[0]->c_id == $answer) {
                                    $is_correct = 1;
                                }
                            }
                        }
                        break;
                    case 2:
                    case 13:
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT c_choice_id FROM #__lms_quiz_r_student_choice WHERE c_sq_id = '" . $sqtq_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $answers = $JLMS_DB->LoadObjectList();
                        $answer = array();
                        if (count($answers)) {
                            foreach ($answers as $answ) {
                                $answer[] = $answ->c_choice_id;
                            }
                        }
                        $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id_pool . "'";
                        $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_pool . "' 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_pool . "' and b.c_question_id = a.c_id and b.c_right <> '1'";
                        $JLMS_DB->SetQuery($query);
                        $ddd3 = $JLMS_DB->LoadObjectList();
                        $ans_array = $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;
                                }
                            }
                        }
                        break;
                    case 4:
                    case 5:
                    case 11:
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT a.c_sel_text as c_sel_text FROM #__lms_quiz_r_student_matching as a, #__lms_quiz_t_matching as b WHERE a.c_sq_id = '" . $sqtq_id . "' AND a.c_matching_id = b.c_id ORDER BY b.ordering";
                        $JLMS_DB->SetQuery($query);
                        $answers = $JLMS_DB->LoadObjectList();
                        if (count($answers)) {
                            foreach ($answers as $answ) {
                                $answer[] = $answ->c_sel_text;
                            }
                        }
                        $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id_pool . "'";
                        $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_pool . "' and b.c_question_id = a.c_id ORDER BY b.ordering";
                        $JLMS_DB->SetQuery($query);
                        $ddd2 = $JLMS_DB->LoadObjectList();
                        $ans_array = $answer;
                        if (count($ddd2) && count($ddd)) {
                            $is_correct = 1;
                            $rr_num = 0;
                            foreach ($ddd2 as $right_row) {
                                if ($right_row->c_right_text != $ans_array[$rr_num]) {
                                    $is_correct = 0;
                                }
                                $rr_num++;
                            }
                        }
                        break;
                    case 6:
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT c_answer FROM #__lms_quiz_r_student_blank WHERE c_sq_id = '" . $sqtq_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $answer = $JLMS_DB->LoadResult();
                        $query = "SELECT a.c_point, a.c_attempts FROM #__lms_quiz_t_question as a WHERE a.c_id = '" . $proc_quest_id_pool . "'";
                        $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_pool . "' and b.c_question_id = a.c_id and c.c_blank_id = b.c_id";
                        $JLMS_DB->SetQuery($query);
                        $ddd2 = $JLMS_DB->LoadObjectList();
                        $answer = trim(urldecode($answer));
                        if (count($ddd2) && count($ddd)) {
                            foreach ($ddd2 as $right_row) {
                                if (strtolower($right_row->c_text) === strtolower($answer)) {
                                    $is_correct = 1;
                                }
                            }
                        }
                        break;
                    case 7:
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT * FROM #__lms_quiz_r_student_hotspot WHERE c_sq_id = '" . $sqtq_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $answers = $JLMS_DB->LoadObjectList();
                        $answer = array();
                        if (count($answers)) {
                            $answer[0] = $answers[0]->c_select_x;
                            $answer[1] = $answers[0]->c_select_y;
                        }
                        if (count($answer)) {
                            $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_pool . "' and b.c_question_id = a.c_id";
                            $JLMS_DB->SetQuery($query);
                            $ddd = $JLMS_DB->LoadObjectList();
                            if (count($ddd)) {
                                $ans_array = $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;
                                }
                            }
                        }
                        break;
                    case 8:
                        $is_correct = 1;
                        $is_survey = 1;
                        $answer = array();
                        break;
                    case 9:
                        $is_correct = 1;
                        $is_survey = 1;
                        $query = "SELECT qst.c_id FROM #__lms_quiz_r_student_quiz as qz, #__lms_quiz_r_student_question as qst WHERE qz.c_id = qst.c_stu_quiz_id AND qz.unique_id = '" . $user_unique_id . "' AND c_question_id='" . $proc_quest_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $sqtq_id = $JLMS_DB->LoadResult();
                        $query = "SELECT * FROM #__lms_quiz_r_student_scale WHERE c_sq_id = '" . $sqtq_id . "'";
                        $JLMS_DB->SetQuery($query);
                        $answers = $JLMS_DB->LoadObjectList();
                        $answer = array();
                        for ($p = 0; $p < count($answers); $p++) {
                            $answer[$p][0] = $answers[$p]->q_scale_id;
                            $answer[$p][1] = $answers[$p]->scale_id;
                        }
                        break;
                    case 10:
                        $is_correct = 1;
                        $is_survey = 1;
                        $answer = array();
                        break;
                }
                if (!substr_count($quiz->params, 'disable_quest_feedback=1') && !substr_count($q_data[0]->params, 'disable_quest_feedback=1')) {
                    //---
                    if ($is_survey) {
                        $msg_cor = '';
                    } else {
                        if ($is_correct) {
                            $msg_cor = $jq_language['quiz_answer_correct'];
                        } else {
                            $msg_cor = $jq_language['quiz_answer_incorrect'];
                        }
                    }
                } else {
                    $msg_cor = '';
                }
                //					$ret_str .= "\t" . '<quiz_review_correct><![CDATA['.$msg_cor.']]></quiz_review_correct>' . "\n";
                //--explanation
                $explans = '';
                if (!$is_survey) {
                    switch ($quiz_params->get('sh_explanation')) {
                        case '1':
                        case '12':
                            if ($q_data[0]->c_explanation) {
                                $explans = $q_data[0]->c_explanation;
                            }
                            break;
                        case '2':
                        case '13':
                            if ($st_quiz_data[0]->c_passed) {
                                if ($q_data[0]->c_explanation) {
                                    $explans = $q_data[0]->c_explanation;
                                }
                            }
                            break;
                        case '3':
                            if (!$st_quiz_data[0]->c_passed) {
                                if ($q_data[0]->c_explanation) {
                                    $explans = $q_data[0]->c_explanation;
                                }
                            }
                            break;
                    }
                }
                //				$ret_str .= "\t" . '<quiz_review_explanation><![CDATA['.$explans.']]></quiz_review_explanation>' . "\n";
                $kol_quests = count($q_data);
                $quest_score = $q_data[0]->c_point;
                $qtype = $q_data[0]->c_type;
                $quest_id = $q_data[0]->c_id;
                $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();
                $toolbar = array();
                if (isset($this_lpath->stu_quiz_id) && $this_lpath->stu_quiz_id == $stu_quiz_id) {
                    if ($qtype == 10) {
                        if (isset($q_data[$j]->c_slide) && $q_data[$j]->c_slide) {
                            $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => 1, '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' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE);
                        }
                    } else {
                        if (isset($q_data[$j]->c_slide) && $q_data[$j]->c_slide) {
                            $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_complete.png', 'text_btn' => _JLMS_OK_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' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_complete.png', 'text_btn' => _JLMS_OK_ALT_TITLE);
                        }
                    }
                } else {
                    if ($qtype == 10) {
                        if (isset($q_data[$j]->c_slide) && $q_data[$j]->c_slide) {
                            $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => 1, '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' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_start.png', 'text_btn' => _JLMS_NEXT_ALT_TITLE);
                        }
                    } else {
                        if (isset($q_data[$j]->c_slide) && $q_data[$j]->c_slide) {
                            $toolbar[] = array('kol_quests' => $kol_quests, 'num_quest' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_complete.png', 'text_btn' => _JLMS_OK_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' => 1, 'quest_score' => $quest_score, 'img_btn' => 'btn_complete.png', 'text_btn' => _JLMS_OK_ALT_TITLE);
                        }
                    }
                }
                $doc->addStyleSheet($JLMS_CONFIG->get('live_site') . '/components/com_joomla_lms/includes/quiz/templates/joomlaquiz_lms_template/jq_template.css');
                ?>
				<form name="quest_form" action="<?php 
                echo ampReplace($JLMS_CONFIG->get('live_site') . "/index.php?option={$option}&Itemid={$Itemid}");
                ?>
" method="post">
					<table border="0" width="100%" align="center" cellpadding="0" cellspacing="0" class="jlms_table_no_borders">
						<tr>
							<td>
								<?php 
                echo JLMS_quiz_ajax_class::JQ_toolbar_nojs($toolbar, $qtype, 1);
                ?>
					
								<input type="hidden" name="stu_quiz_id" value="<?php 
                echo $stu_quiz_id;
                ?>
"/>
								<input type="hidden" name="user_unique_id" value="<?php 
                echo $user_unique_id;
                ?>
"/>
							</td>
						</tr>
						<tr>
							<td>
								<?php 
                if ($kol_quests > 0) {
                    $quest_num = 0;
                    # commented 25 April 2007 (DEN)
                    # we've already randomized auestions in the sequence
                    /*if ($QA->get_qvar('c_random')) {
                    			$quest_num = rand(0, ($kol_quests - 1) );
                    		}*/
                    ?>
									<input type="hidden" name="quiz_count_quests" value="<?php 
                    echo $kol_quests;
                    ?>
"/>
									<input type="hidden" name="quiz_quest_num" value="1"/>
									<?php 
                    echo JLMS_quiz_ajax_class::JQ_GetQuestData_review_nojs($q_data[0], $jq_language, $answer, $quiz_params->get('sh_user_answer'), $is_survey, $msg_cor, $is_correct);
                    //			$ret_str .= JLMS_quiz_ajax_class::JQ_GetPanelData_nojs($quiz_id, $q_data);
                    ?>
									<?php 
                }
                if ($explans != '') {
                    echo JoomlaQuiz_template_class::JQ_show_messagebox('', $explans, 3);
                }
                ?>
							</td>
						</tr>
					</table>
					
					<input type="hidden" name="option" value="<?php 
                echo $option;
                ?>
"/>
					<input type="hidden" name="task" value="quiz_action"/>
					<input type="hidden" name="id" value="<?php 
                echo $id;
                ?>
"/>
					<input type="hidden" name="quiz" value="<?php 
                echo $quiz_id;
                ?>
"/>
					<input type="hidden" name="atask" value="review_next"/>
				</form>
				<?php 
            }
        }
        //		return $ret_str;
    }