Пример #1
0
function user_report($idUser, $idTest, $id_param = false, $id_track = false, $mvc = false)
{
    if (!checkPerm('view', true, 'organization') && !checkPerm('view', true, 'storage')) {
        die("You can't access");
    }
    $lang =& DoceboLanguage::createInstance('test');
    if ($id_param !== false) {
        require_once _lms_ . '/lib/lib.param.php';
        $idReference = getLOParam($id_param, 'idReference');
        if (!Track_Test::isTrack($idUser, $idTest, $idReference)) {
            return;
        }
        //load existing info track
        $track_info = Track_Test::getTrackInfo($idUser, $idTest, $idReference);
        $idTrack = $track_info['idTrack'];
    } else {
        $idTrack = $id_track;
    }
    //test info---------------------------------------------------------
    list($title, $mod_doanswer, $point_type, $point_required, $question_random_number, $show_score, $show_score_cat, $show_doanswer, $show_solution, $order_type) = sql_fetch_row(sql_query("\r\n\tSELECT  title, mod_doanswer, point_type, point_required, question_random_number, \r\n\t\t\tshow_score, show_score_cat, show_doanswer, \r\n\t\t\tshow_solution, order_type\r\n\tFROM %lms_test\r\n\tWHERE idTest = '" . (int) $idTest . "'"));
    list($score, $bonus_score, $date_attempt, $date_attempt_mod) = sql_fetch_row(sql_query("\r\n\tSELECT score, bonus_score, date_attempt, date_attempt_mod \r\n\tFROM %lms_testtrack\r\n\tWHERE idTrack = '" . (int) $idTrack . "'"));
    $point_do = $bonus_score;
    $max_score = 0;
    $num_manual = 0;
    $manual_score = 0;
    $quest_sequence_number = 1;
    $report_test = '';
    $point_do_cat = array();
    /*
    	$reQuest = sql_query("
    	SELECT q.idQuest, q.type_quest, t.type_file, t.type_class, q.idCategory 
    	FROM ".$GLOBALS['prefix_lms']."_testquest AS q JOIN ".$GLOBALS['prefix_lms']."_quest_type AS t 
    	WHERE q.idTest = '".$idTest."' AND q.type_quest = t.type_quest 
    	ORDER BY q.sequence");*/
    if ($order_type >= 2) {
        $re_visu_quest = sql_query("SELECT idQuest \r\n\t\tFROM %lms_testtrack_quest\r\n\t\tWHERE idTrack = '" . (int) $idTrack . "' ");
        while (list($id_q) = sql_fetch_row($re_visu_quest)) {
            $quest_see[] = $id_q;
        }
        $query_question = "\r\n\t\tSELECT q.idQuest, q.type_quest, t.type_file, t.type_class, q.idCategory \r\n\t\tFROM %lms_testquest AS q JOIN %lms_quest_type AS t\r\n\t\tWHERE q.idTest = '" . $idTest . "' AND q.type_quest = t.type_quest AND  q.idQuest IN (" . implode($quest_see, ',') . ") \r\n\t\tORDER BY q.sequence";
    } else {
        $query_question = "\r\n\t\tSELECT q.idQuest, q.type_quest, t.type_file, t.type_class, q.idCategory \r\n\t\tFROM %lms_testquest AS q JOIN %lms_quest_type AS t\r\n\t\tWHERE q.idTest = '" . $idTest . "' AND q.type_quest = t.type_quest \r\n\t\tORDER BY q.sequence";
    }
    $reQuest = sql_query($query_question);
    while (list($id_quest, $type_quest, $type_file, $type_class, $id_cat) = sql_fetch_row($reQuest)) {
        require_once _lms_ . '/modules/question/' . $type_file;
        $quest_point_do = 0;
        $quest_obj = eval("return new {$type_class}( {$id_quest} );");
        $quest_point_do = $quest_obj->userScore($idTrack);
        $quest_max_score = $quest_obj->getMaxScore();
        if ($type_quest != 'title' && $type_quest != 'break_page') {
            $review = $quest_obj->displayUserResult($idTrack, $type_quest != 'title' ? $quest_sequence_number++ : $quest_sequence_number, $show_solution);
            $report_test .= '<div class="test_quest_review_container">' . $review['quest'];
            if ($review['score'] !== false) {
                $report_test .= '<div class="test_answer_comment">' . '<div class="test_score_note">' . $lang->def('_SCORE') . ' : ';
                if ($quest_obj->getScoreSetType() == 'manual' && !$review['manual_assigned']) {
                    $report_test .= $lang->def('_NOT_ASSIGNED');
                } else {
                    if ($review['score'] > 0) {
                        $report_test .= '<span class="test_score_positive">' . $review['score'] . '</span>';
                    } else {
                        $report_test .= '<span class="test_score_negative">' . $review['score'] . '</span>';
                    }
                }
                $report_test .= '</div>' . '</div>';
            }
            $report_test .= '</div>' . "\n";
        }
        if ($quest_obj->getScoreSetType() == 'manual') {
            ++$num_manual;
            $manual_score = round($manual_score + $quest_max_score, 2);
        }
        $point_do = round($point_do + $quest_point_do, 2);
        $max_score = round($max_score + $quest_max_score, 2);
        if (isset($point_do_cat[$id_cat])) {
            $point_do_cat[$id_cat] = round($point_do + $point_do_cat[$id_cat], 2);
        } else {
            $point_do_cat[$id_cat] = $point_do;
        }
    }
    //output variable, used in mvc mode
    $output = "";
    $str = "";
    if (!$mvc) {
        $str .= '<div class="std_block">';
    }
    $str .= '<div class="title">' . $lang->def('_TITLE') . ' : ' . $title . '</div><br />';
    if ($mvc) {
        $output .= $str;
    } else {
        $GLOBALS['page']->add($str, 'content');
    }
    if ($point_type != '1') {
        $save_score = $point_do;
    } else {
        $save_score = round(round($point_do / $max_score, 2) * 100, 2);
    }
    if ($show_score && $point_type != '1') {
        $str = '<span class="test_score_note">' . $lang->def('_TEST_TOTAL_SCORE') . '</span> ' . $point_do . ' / ' . $max_score . '<br />';
        if ($mvc) {
            $output .= $str;
        } else {
            $GLOBALS['page']->add($str, 'content');
        }
        if ($num_manual != 0) {
            $str = '<br /><span class="test_score_note">' . $lang->def('_TEST_MANUAL_SCORE') . '</span> ' . $manual_score . ' ' . $lang->def('_TEST_SCORES') . '<br />';
            if ($mvc) {
                $output .= $str;
            } else {
                $GLOBALS['page']->add($str, 'content');
            }
        }
    }
    if ($show_score && $point_type == '1') {
        $str = '<span class="test_score_note">' . $lang->def('_TEST_TOTAL_SCORE') . '</span> ' . $save_score . ' %' . '<br />';
        if ($mvc) {
            $output .= $str;
        } else {
            $GLOBALS['page']->add($str, 'content');
        }
        if ($num_manual != 0) {
            $str = '<br /><span class="test_score_note">' . $lang->def('_TEST_MANUAL_SCORE') . '</span> ' . $manual_score . ' ' . $lang->def('_TEST_SCORES') . '<br />';
            if ($mvc) {
                $output .= $str;
            } else {
                $GLOBALS['page']->add($str, 'content');
            }
        }
    }
    if ($show_score_cat) {
        $category = array();
        $reQuestCat = sql_query("\r\n\t\tSELECT idCategory \r\n\t\tFROM %lms_testquest\r\n\t\tWHERE idTest = '" . $idTest . "' AND idCategory != 0");
        while (list($id_cat) = sql_fetch_row($reQuestCat)) {
            $category[] = $id_cat;
        }
        if (!empty($category)) {
            require_once _lms_ . '/lib/lib.questcategory.php';
            $categories = Questcategory::getInfoAboutCategory($category);
            $str = '<br /><span class="test_score_note">' . $lang->def('_TEST_CATEGORY_SCORE') . '</span><br />';
            if ($mvc) {
                $output .= $str;
            } else {
                $GLOBALS['page']->add($str, 'content');
            }
            while (list($id_cat, $name_cat) = each($categories)) {
                $str = $name_cat . ', ' . $lang->def('_TEST_SCORES') . ': ' . (isset($point_do_cat[$id_cat]) ? $point_do_cat[$id_cat] : 0) . '<br />';
                if ($mvc) {
                    $output .= $str;
                } else {
                    $GLOBALS['page']->add($str, 'content');
                }
            }
        }
    }
    $str = '<br /><br /><div class="test_answer_space">' . $report_test . '</div>';
    if (!$mvc) {
        $str .= '</div>';
    }
    //end stdblock div
    if ($mvc) {
        return $output;
    } else {
        $GLOBALS['page']->add($str, 'content');
    }
}