function writeResultStats($i_resultid)
{
    global $g_db, $lngstr, $srv_settings, $g_vars;
    $g_vars['page']['resultid'] = $i_resultid;
    $i_testid = 0;
    $i_rSet6 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "results WHERE resultid=" . $i_resultid, 1);
    if (!$i_rSet6) {
        showDBError(__FILE__, 6);
    } else {
        if (!$i_rSet6->EOF) {
            $i_testid = $i_rSet6->fields['testid'];
            $g_vars['page']['result_date'] = getDateLocal($lngstr['language']['date_format_full'], $i_rSet6->fields['result_datestart']);
            $g_vars['page']['time_spent'] = getTimeFormatted($i_rSet6->fields['result_timespent']);
            $g_vars['page']['got_points'] = $i_rSet6->fields['result_points'];
            $g_vars['page']['points_max'] = $i_rSet6->fields['result_pointsmax'];
            $g_vars['page']['score'] = $g_vars['page']['points_max'] != 0 ? round($g_vars['page']['got_points'] * 100 / $g_vars['page']['points_max']) : 100;
            $g_vars['page']['grade'] = getGradeData($i_rSet6->fields['gscaleid'], $i_rSet6->fields['gscale_gradeid']);
            $i_id = $i_rSet6->fields['id'];
            $i_rSet7 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "users WHERE id=" . $i_id, 1);
            if (!$i_rSet7) {
                showDBError(__FILE__, 7);
            } else {
                if (!$i_rSet7->EOF) {
                    $g_vars['page']['username'] = $i_rSet7->fields['user_firstname'] . ' ' . $i_rSet7->fields['user_lastname'];
                }
                $i_rSet7->Close();
            }
        }
        $i_rSet6->Close();
    }
    $g_vars['page']['test_name'] = '';
    $i_gscaleid = 0;
    $i_rSet1 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "tests WHERE testid=" . $i_testid, 1);
    if (!$i_rSet1) {
        showDBError(__FILE__, 1);
    } else {
        if (!$i_rSet1->EOF) {
            $g_vars['page']['test_name'] = $i_rSet1->fields['test_name'];
            $i_gscaleid = $i_rSet1->fields['gscaleid'];
        }
        $i_rSet1->Close();
    }
    $g_vars['page']['grades_times_total'] = 0;
    $i_rSet2 = $g_db->Execute("SELECT * FROM " . $srv_settings['table_prefix'] . "gscales_grades WHERE gscaleid=" . $i_gscaleid . " ORDER BY gscale_gradeid");
    if (!$i_rSet2) {
        showDBError(__FILE__, 2);
    } else {
        while (!$i_rSet2->EOF) {
            $i_gradeid = $i_rSet2->fields['gscale_gradeid'];
            $g_vars['page']['grades'][$i_gradeid]['name'] = $i_rSet2->fields['grade_name'];
            $g_vars['page']['grades'][$i_gradeid]['times'] = getRecordCount($srv_settings['table_prefix'] . 'results', 'testid=' . $i_testid . ' AND gscaleid=' . $i_gscaleid . ' AND gscale_gradeid=' . $i_gradeid);
            $g_vars['page']['grades_times_total'] += $g_vars['page']['grades'][$i_gradeid]['times'];
            $i_rSet2->MoveNext();
        }
        $i_rSet2->Close();
    }
    foreach ($g_vars['page']['grades'] as $i_gradeid => $i_grade) {
        $g_vars['page']['grades'][$i_gradeid]['times_percents'] = $g_vars['page']['grades_times_total'] != 0 ? $g_vars['page']['grades'][$i_gradeid]['times'] * 100 / $g_vars['page']['grades_times_total'] : 0;
    }
    $g_vars['page']['test']['participant_count'] = 0;
    $i_points_all = array();
    $g_vars['page']['test']['points_max'] = 0;
    $g_vars['page']['test']['points_low'] = IGT_MAX_FLOAT;
    $g_vars['page']['test']['points_high'] = 0;
    $i_points_total = 0;
    $g_vars['page']['test']['points_total_max'] = 0;
    $i_rSet3 = $g_db->Execute("SELECT * FROM " . $srv_settings['table_prefix'] . "results WHERE testid=" . $i_testid . " AND gscale_gradeid > 0");
    if (!$i_rSet3) {
        showDBError(__FILE__, 3);
    } else {
        while (!$i_rSet3->EOF) {
            $g_vars['page']['test']['participant_count']++;
            $i_points = $i_rSet3->fields['result_points'];
            array_push($i_points_all, $i_points);
            $g_vars['page']['test']['points_max'] = $i_rSet3->fields['result_pointsmax'];
            if ($i_points > $g_vars['page']['test']['points_high']) {
                $g_vars['page']['test']['points_high'] = $i_points;
            }
            if ($i_points < $g_vars['page']['test']['points_low']) {
                $g_vars['page']['test']['points_low'] = $i_points;
            }
            $i_points_total += $i_points;
            $g_vars['page']['test']['points_total_max'] += $g_vars['page']['test']['points_max'];
            $i_rSet3->MoveNext();
        }
        $i_rSet3->Close();
    }
    $g_vars['page']['test']['points_average'] = $i_points_total / $g_vars['page']['test']['participant_count'];
    $g_vars['page']['test']['points_average_percents'] = $i_points_total * 100 / $g_vars['page']['test']['points_total_max'];
    $g_vars['page']['test']['points_high_percents'] = $g_vars['page']['test']['points_high'] * 100 / $g_vars['page']['test']['points_max'];
    $g_vars['page']['test']['points_low_percents'] = $g_vars['page']['test']['points_low'] * 100 / $g_vars['page']['test']['points_max'];
    $g_vars['page']['test']['variance'] = 0;
    if ($g_vars['page']['test']['participant_count'] > 1) {
        foreach ($i_points_all as $i_points) {
            $g_vars['page']['test']['variance'] += ($i_points - $g_vars['page']['test']['points_average']) * ($i_points - $g_vars['page']['test']['points_average']);
        }
        $g_vars['page']['test']['variance'] = $g_vars['page']['test']['variance'] / ($g_vars['page']['test']['participant_count'] - 1);
    }
    $g_vars['page']['test']['std_deviation'] = sqrt($g_vars['page']['test']['variance']);
    $g_vars['page']['questions'] = array();
    $i_rSet4 = $g_db->Execute("SELECT questionid, result_answer_iscorrect FROM " . $srv_settings['table_prefix'] . "results_answers WHERE resultid=" . $i_resultid);
    if (!$i_rSet4) {
        showDBError(__FILE__, 4);
    } else {
        while (!$i_rSet4->EOF) {
            $i_questionid = $i_rSet4->fields['questionid'];
            $g_vars['page']['questions'][$i_questionid]['iscorrect'] = $i_rSet4->fields['result_answer_iscorrect'];
            $i_rSet4->MoveNext();
        }
        $i_rSet4->Close();
    }
    $g_vars['page']['subjects'] = array();
    foreach ($g_vars['page']['questions'] as $i_questionid => $i_question) {
        $i_rSet5 = $g_db->SelectLimit("SELECT " . $srv_settings['table_prefix'] . "subjects.subjectid, " . $srv_settings['table_prefix'] . "subjects.subject_name FROM " . $srv_settings['table_prefix'] . "questions, " . $srv_settings['table_prefix'] . "subjects WHERE questionid=" . $i_questionid . " AND " . $srv_settings['table_prefix'] . "questions.subjectid=" . $srv_settings['table_prefix'] . "subjects.subjectid", 1);
        if (!$i_rSet5) {
            showDBError(__FILE__, 5);
        } else {
            if (!$i_rSet5->EOF) {
                $i_subjectid = $i_rSet5->fields['subjectid'];
                $g_vars['page']['subjects'][$i_subjectid]['question_count'] = getRecordCount($srv_settings['table_prefix'] . 'questions', 'subjectid=' . $i_subjectid);
                if (!isset($g_vars['page']['subjects'][$i_subjectid]['question_got'])) {
                    $g_vars['page']['subjects'][$i_subjectid]['name'] = $i_rSet5->fields['subject_name'];
                    $g_vars['page']['subjects'][$i_subjectid]['question_got'] = 0;
                    $g_vars['page']['subjects'][$i_subjectid]['question_correct'] = 0;
                }
                $g_vars['page']['subjects'][$i_subjectid]['question_got']++;
                if ($i_question['iscorrect'] == IGT_ANSWER_IS_CORRECT) {
                    $g_vars['page']['subjects'][$i_subjectid]['question_correct']++;
                }
            }
            $i_rSet5->Close();
        }
    }
    foreach ($g_vars['page']['subjects'] as $i_subjectid => $i_grade) {
        $g_vars['page']['subjects'][$i_subjectid]['question_correct_percents'] = $g_vars['page']['subjects'][$i_subjectid]['question_correct'] * 100 / $g_vars['page']['subjects'][$i_subjectid]['question_got'];
    }
}
function getAdvancedReportPDF($resultid)
{
    global $g_db, $G_SESSION, $DOCUMENT_FPDF, $lngstr, $srv_settings, $i_rSet2, $i_rSet3, $i_rSet4, $i_rSet5, $i_rSet6;
    ob_start();
    include_once $DOCUMENT_FPDF . 'html2fpdf.php';
    $i_pdf = false;
    $i_can_access = false;
    if ($G_SESSION['access_reportsmanager'] > 1) {
        $i_can_access = true;
    } else {
        $i_rSet1 = $g_db->Execute("SELECT resultid FROM " . $srv_settings['table_prefix'] . "results WHERE id=" . $G_SESSION['id'] . " AND resultid=" . $resultid);
        if (!$i_rSet1) {
            showDBError(__FILE__, 1);
        } else {
            $i_can_access = $i_rSet1->RecordCount() > 0;
        }
    }
    $i_isok = $i_can_access;
    if ($i_isok) {
        $i_isok = $i_rSet2 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "results WHERE resultid=" . $resultid, 1);
    }
    if ($i_isok) {
        $i_isok = !$i_rSet2->EOF;
    }
    if ($i_isok) {
        $i_isok = $i_rSet3 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "tests WHERE testid=" . $i_rSet2->fields['testid'], 1);
    }
    if ($i_isok) {
        $i_isok = !$i_rSet3->EOF;
    }
    if ($i_isok) {
        $i_isok = $i_rSet3->fields['rtemplateid'] > 0 && ($i_rSet3->fields['test_reportgradecondition'] == 0 || $i_rSet3->fields['test_reportgradecondition'] >= $i_rSet2->fields['gscale_gradeid']);
    }
    if ($i_isok) {
        $i_isok = $i_rSet6 = $g_db->SelectLimit("SELECT * FROM " . $srv_settings['table_prefix'] . "users WHERE id=" . $i_rSet2->fields['id'], 1);
    }
    if ($i_isok) {
        $i_isok = !$i_rSet6->EOF;
    }
    $i_result_detailed_1_items = array();
    $i_result_detailed_2_items = array();
    $i_result_detailed_3_items = array();
    $i_result_detailed_4_items = array();
    if ($i_isok) {
        $i_isok = $i_rSet7 = $g_db->Execute("SELECT * FROM " . $srv_settings['table_prefix'] . "results_answers, " . $srv_settings['table_prefix'] . "questions WHERE resultid=" . $resultid . " AND " . $srv_settings['table_prefix'] . "results_answers.questionid=" . $srv_settings['table_prefix'] . "questions.questionid ORDER BY result_answerid");
    }
    if ($i_isok) {
        $i_questionno = 0;
        while (!$i_rSet7->EOF) {
            $i_questionno++;
            $i_answers = array();
            $i_rSet5 = $g_db->Execute("SELECT answer_text, answer_correct FROM " . $srv_settings['table_prefix'] . "answers WHERE questionid=" . $i_rSet7->fields['questionid'] . " ORDER BY answerid");
            if (!$i_rSet5) {
                showDBError(__FILE__, 5);
            } else {
                $i_answerno = 1;
                while (!$i_rSet5->EOF) {
                    $i_answers[$i_answerno] = $i_rSet5->fields['answer_text'];
                    $i_answers_correct[$i_answerno] = $i_rSet5->fields['answer_correct'];
                    $i_answerno++;
                    $i_rSet5->MoveNext();
                }
                $i_rSet5->Close();
            }
            $i_detailed_correct = $i_rSet7->fields['result_answer_iscorrect'] == IGT_ANSWER_IS_CORRECT;
            $i_result_detailed_3_items[$i_questionno] = $i_questionno . '. ' . getTruncatedHTML($i_rSet7->fields['question_text'], 0);
            $i_result_detailed_1_items[$i_questionno] = $i_result_detailed_3_items[$i_questionno] . '<br />';
            $i_result_detailed_1_items[$i_questionno] .= $lngstr['email_answer_iscorrect'] . ($i_rSet7->fields['result_answer_iscorrect'] == IGT_ANSWER_IS_UNDEFINED ? $lngstr['label_undefined'] : ($i_rSet7->fields['result_answer_iscorrect'] == IGT_ANSWER_IS_CORRECT ? $lngstr['label_yes'] : ($i_rSet7->fields['result_answer_iscorrect'] == IGT_ANSWER_IS_PARTIALLYCORRECT ? $lngstr['label_partially'] : $lngstr['label_no']))) . '<br />';
            $i_result_detailed_1_items[$i_questionno] .= $lngstr['email_answer_points'] . $i_rSet7->fields['result_answer_points'] . '<br />';
            if (!$i_detailed_correct) {
                $i_result_detailed_2_items[$i_questionno] = $i_result_detailed_1_items[$i_questionno];
            }
            $i_result_detailed_3_items[$i_questionno] = '<tr><td>' . $i_result_detailed_3_items[$i_questionno] . '</td></tr>';
            for ($i = 1; $i < $i_answerno; $i++) {
                switch ($i_rSet7->fields['question_type']) {
                    case QUESTION_TYPE_MULTIPLECHOICE:
                    case QUESTION_TYPE_TRUEFALSE:
                        $i_answers_given = (int) $i_rSet7->fields['result_answer_text'];
                        $i_result_detailed_3_items[$i_questionno] .= '<tr><td><img src="images/button-checkbox-' . ($i_answers_correct[$i] ? '2' : ($i == $i_answers_given ? '4' : '0')) . '.gif" width=13 height=13> &nbsp; ' . $i_answers[$i] . '</tr>';
                        break;
                    case QUESTION_TYPE_MULTIPLEANSWER:
                        $i_answers_given = explode(QUESTION_TYPE_MULTIPLEANSWER_BREAK, $i_rSet7->fields['result_answer_text']);
                        $i_result_detailed_3_items[$i_questionno] .= '<tr><td><img src="images/button-checkbox-' . ($i_answers_correct[$i] ? '2' : (in_array($i, $i_answers_given) ? '4' : '0')) . '.gif" width=13 height=13> &nbsp; ' . $i_answers[$i] . '</tr>';
                        break;
                    case QUESTION_TYPE_FILLINTHEBLANK:
                        $i_result_detailed_3_items[$i_questionno] .= '<tr><td>' . nl2br($i_answers[$i]) . '</td></tr>';
                        break;
                }
            }
            if ($i_rSet7->fields['question_type'] == QUESTION_TYPE_ESSAY) {
                $i_result_detailed_3_items[$i_questionno] .= '<tr><td>' . nl2br($i_rSet7->fields['result_answer_text']) . '</td></tr>';
            }
            $i_result_detailed_3_items[$i_questionno] .= '<tr><td>' . $lngstr['email_answer_points'] . $i_rSet7->fields['result_answer_points'] . '</td></tr>';
            if (!$i_detailed_correct) {
                $i_result_detailed_4_items[$i_questionno] = $i_result_detailed_3_items[$i_questionno];
            }
            $i_rSet7->MoveNext();
        }
        $i_rSet7->Close();
        $i_result_detailed_1_text = implode('<br />', $i_result_detailed_1_items);
        $i_result_detailed_2_text = implode('<br />', $i_result_detailed_2_items);
        $i_result_detailed_3_text = '<table cellpadding=0 cellspacing=0 border=0 width="100%">' . implode("\n", $i_result_detailed_3_items) . '</table>';
        $i_result_detailed_4_text = '<table cellpadding=0 cellspacing=0 border=0 width="100%">' . implode("\n", $i_result_detailed_4_items) . '</table>';
        $i_result_detailed_5_text = '';
        $i_result_detailed_6_text = '';
        $i_pdf = eventOnQueryCustomReportPDF();
        if (empty($i_pdf)) {
            $i_pdf = new HTML2FPDF();
            $i_pdf->AddPage();
            $i_pdf->SetFont('Arial', '', 11);
            $i_pdf->SetTextColor(0, 0, 0);
            $g_vars['page']['grade'] = getGradeData($i_rSet2->fields['gscaleid'], $i_rSet2->fields['gscale_gradeid']);
            $g_vars['page']['subjects'] = getTestResultSubjectsData($resultid);
            $i_template_body = getReportTemplate(array('rtemplateid' => $i_rSet3->fields['rtemplateid'], 'username' => $i_rSet6->fields['username'], 'email' => $i_rSet6->fields['email'], 'title' => $i_rSet6->fields['user_title'], 'firstname' => $i_rSet6->fields['user_firstname'], 'lastname' => $i_rSet6->fields['user_lastname'], 'middlename' => $i_rSet6->fields['user_middlename'], 'address' => $i_rSet6->fields['user_address'], 'city' => $i_rSet6->fields['user_city'], 'state' => $i_rSet6->fields['user_state'], 'zip' => $i_rSet6->fields['user_zip'], 'country' => $i_rSet6->fields['user_country'], 'phone' => $i_rSet6->fields['user_phone'], 'fax' => $i_rSet6->fields['user_fax'], 'mobile' => $i_rSet6->fields['user_mobile'], 'pager' => $i_rSet6->fields['user_pager'], 'ipphone' => $i_rSet6->fields['user_ipphone'], 'webpage' => $i_rSet6->fields['user_webpage'], 'icq' => $i_rSet6->fields['user_icq'], 'msn' => $i_rSet6->fields['user_msn'], 'aol' => $i_rSet6->fields['user_aol'], 'gender' => $i_rSet6->fields['user_gender'], 'birthday' => $i_rSet6->fields['user_birthday'], 'husbandwife' => $i_rSet6->fields['user_husbandwife'], 'children' => $i_rSet6->fields['user_children'], 'trainer' => $i_rSet6->fields['user_trainer'], 'photo' => $i_rSet6->fields['user_photo'], 'company' => $i_rSet6->fields['user_company'], 'cposition' => $i_rSet6->fields['user_cposition'], 'department' => $i_rSet6->fields['user_department'], 'coffice' => $i_rSet6->fields['user_coffice'], 'caddress' => $i_rSet6->fields['user_caddress'], 'ccity' => $i_rSet6->fields['user_ccity'], 'cstate' => $i_rSet6->fields['user_cstate'], 'czip' => $i_rSet6->fields['user_czip'], 'ccountry' => $i_rSet6->fields['user_ccountry'], 'cphone' => $i_rSet6->fields['user_cphone'], 'cfax' => $i_rSet6->fields['user_cfax'], 'cmobile' => $i_rSet6->fields['user_cmobile'], 'cpager' => $i_rSet6->fields['user_cpager'], 'cipphone' => $i_rSet6->fields['user_cipphone'], 'cwebpage' => $i_rSet6->fields['user_cwebpage'], 'cphoto' => $i_rSet6->fields['user_cphoto'], 'ufield1' => $i_rSet6->fields['user_ufield1'], 'ufield2' => $i_rSet6->fields['user_ufield2'], 'ufield3' => $i_rSet6->fields['user_ufield3'], 'ufield4' => $i_rSet6->fields['user_ufield4'], 'ufield5' => $i_rSet6->fields['user_ufield5'], 'ufield6' => $i_rSet6->fields['user_ufield6'], 'ufield7' => $i_rSet6->fields['user_ufield7'], 'ufield8' => $i_rSet6->fields['user_ufield8'], 'ufield9' => $i_rSet6->fields['user_ufield9'], 'ufield10' => $i_rSet6->fields['user_ufield10'], 'test_name' => $i_rSet3->fields['test_name'], 'result_id' => $resultid, 'result_date' => getDateLocal($lngstr['language']['date_format_full'], $i_rSet2->fields['result_datestart']), 'result_time_spent' => getTimeFormatted($i_rSet2->fields['result_timespent']), 'result_time_exceeded' => $i_rSet2->fields['result_timeexceeded'] > 0 ? $lngstr['label_yes'] : $lngstr['label_no'], 'result_points_scored' => $i_rSet2->fields['result_points'], 'result_points_possible' => $i_rSet2->fields['result_pointsmax'], 'result_percents' => $i_rSet2->fields['result_pointsmax'] > 0 ? round($i_rSet2->fields['result_points'] * 100 / $i_rSet2->fields['result_pointsmax']) : 0, 'result_grade' => $g_vars['page']['grade']['name'], 'result_grade_feedback' => $g_vars['page']['grade']['feedback'], 'result_subjects' => $g_vars['page']['subjects'], 'result_detailed_1' => $i_result_detailed_1_text, 'result_detailed_2' => $i_result_detailed_2_text, 'result_detailed_3' => $i_result_detailed_3_text, 'result_detailed_4' => $i_result_detailed_4_text, 'result_detailed_5' => $i_result_detailed_5_text, 'result_detailed_6' => $i_result_detailed_6_text));
            $i_pdf->WriteHTML($i_template_body);
        }
    } else {
        $i_pdf = false;
    }
    ob_end_clean();
    return $i_pdf;
}
<?php

$g_vars['page']['header'] = $lngstr['page_test_results'];
$g_vars['page']['hide_cpanel'] = true;
$i_now = $G_SESSION['yt_teststoppedat'];
$i_timespent_total = $i_now - $G_SESSION['yt_teststart'];
$i_timeexceeded = $G_SESSION['yt_teststop'] > 0 && $G_SESSION['yt_teststop'] < $i_now ? 1 : 0;
$g_vars['page']['grade'] = getGradeData($G_SESSION['yt_gscaleid'], $G_SESSION['yt_gradeid']);
$g_vars['page']['test_name'] = convertTextValue($G_SESSION['yt_name']);
$g_vars['page']['test_name_label'] = sprintf($lngstr['label_result_testname'], $g_vars['page']['test_name']);
$g_vars['page']['test_date'] = getDateLocal($lngstr['language']['date_format_full'], $G_SESSION['yt_teststart']);
$g_vars['page']['test_date_label'] = sprintf($lngstr['label_result_testdate'], $g_vars['page']['test_date']);
$g_vars['page']['time_spent'] = getTimeFormatted($i_timespent_total);
$g_vars['page']['time_spent_label'] = sprintf($lngstr['label_result_timespent'], $g_vars['page']['time_spent']);
$g_vars['page']['grade_label'] = sprintf($lngstr['label_result_got_grade'], $g_vars['page']['grade']['name']);
$g_vars['page']['gradefeedback_label'] = sprintf($lngstr['label_result_got_gradefeedback'], $g_vars['page']['grade']['feedback']);
$g_vars['page']['correct_answers_label'] = sprintf($lngstr['label_result_got_answers'], $G_SESSION['yt_got_answers'], $G_SESSION['yt_questioncount']);
$g_vars['page']['score'] = $G_SESSION['yt_pointsmax'] != 0 ? round($G_SESSION['yt_got_points'] * 100 / $G_SESSION['yt_pointsmax']) : 0;
$g_vars['page']['points_label'] = sprintf($lngstr['label_result_got_points'], $G_SESSION['yt_got_points'], $G_SESSION['yt_pointsmax'], $g_vars['page']['score']);
$g_vars['page']['points_pending_label'] = sprintf($lngstr['label_result_points_pending'], $G_SESSION['yt_points_pending']);
$i_showresultspage = $G_SESSION['access_reportsmanager'] > 0;
$i_attempts_allowed = 0;
$i_rSet3 = $g_db->Execute("SELECT test_attempts, test_contentprotection FROM " . $srv_settings['table_prefix'] . "tests WHERE testid=" . $G_SESSION['testid']);
if ($i_rSet3) {
    if (!$i_rSet3->EOF) {
        $i_attempts_allowed = $i_rSet3->fields['test_attempts'];
        $g_vars['page']['content_protection'] = $i_rSet3->fields['test_contentprotection'];
    }
    $i_rSet3->Close();
}
if ($i_showresultspage && $G_SESSION['yt_attempts'] > 0) {