⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 report.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php  // $Id: report.php,v 1.41.2.8 2008/11/27 04:48:11 tjhunt Exp $    require_once($CFG->libdir.'/tablelib.php');/// Item analysis displays a table of quiz questions and their performanceclass quiz_report extends quiz_default_report {    function display($quiz, $cm, $course) {     /// This function just displays the report        global $CFG, $SESSION, $QTYPES;        $strnoattempts = get_string('noattempts','quiz');    /// Only print headers if not asked to download data        $download = optional_param('download', NULL);        if (!$download) {            $this->print_header_and_tabs($cm, $course, $quiz, $reportmode="analysis");        }    /// Construct the table for this particular report        if (!$quiz->questions) {            print_heading($strnoattempts);            return true;        }    /// Check to see if groups are being used in this quiz        $currentgroup = groups_get_activity_group($cm, true);                if ($groupmode = groups_get_activity_groupmode($cm)) {   // Groups are being used            if (!$download) {                groups_print_activity_menu($cm, "report.php?id=$cm->id&amp;mode=analysis");            }        }        // set Table and Analysis stats options        if(!isset($SESSION->quiz_analysis_table)) {            $SESSION->quiz_analysis_table = array('attemptselection' => 0, 'lowmarklimit' => 0, 'pagesize' => QUIZ_REPORT_DEFAULT_PAGE_SIZE);        }        foreach($SESSION->quiz_analysis_table as $option => $value) {            $urlparam = optional_param($option, NULL, PARAM_INT);            if($urlparam === NULL) {                $$option = $value;            } else {                $$option = $SESSION->quiz_analysis_table[$option] = $urlparam;            }        }        if (!isset($pagesize) || ((int)$pagesize < 1) ){            $pagesize = QUIZ_REPORT_DEFAULT_PAGE_SIZE;        }        $scorelimit = $quiz->sumgrades * $lowmarklimit/ 100;        // ULPGC ecastro DEBUG this is here to allow for different SQL to select attempts        switch ($attemptselection) {        case QUIZ_ALLATTEMPTS :            $limit = '';            $group = '';            break;        case QUIZ_HIGHESTATTEMPT :            $limit = ', max(qa.sumgrades) ';            $group = ' GROUP BY qa.userid ';            break;        case QUIZ_FIRSTATTEMPT :            $limit = ', min(qa.timemodified) ';            $group = ' GROUP BY qa.userid ';            break;        case QUIZ_LASTATTEMPT :            $limit = ', max(qa.timemodified) ';            $group = ' GROUP BY qa.userid ';            break;        }        if ($attemptselection != QUIZ_ALLATTEMPTS) {            $sql = 'SELECT qa.userid '.$limit.                    'FROM '.$CFG->prefix.'user u LEFT JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid '.                    'WHERE qa.quiz = '.$quiz->id.' AND qa.preview = 0 '.                    $group;            $usermax = get_records_sql_menu($sql);        }        $groupmembers = '';        $groupwhere = '';        //Add this to the SQL to show only group users        if ($currentgroup) {            $groupmembers = ", {$CFG->prefix}groups_members gm ";            $groupwhere = "AND gm.groupid = '$currentgroup' AND u.id = gm.userid";        }        $sql = 'SELECT  qa.* FROM '.$CFG->prefix.'quiz_attempts qa, '.$CFG->prefix.'user u '.$groupmembers.                 'WHERE u.id = qa.userid AND qa.quiz = '.$quiz->id.' AND qa.preview = 0 AND ( qa.sumgrades >= '.$scorelimit.' ) '.$groupwhere;        // ^^^^^^ es posible seleccionar aqu TODOS los quizzes, como quiere Jussi,        // pero haba que llevar la cuenta ed cada quiz para restaura las preguntas (quizquestions, states)        /// Fetch the attempts        $attempts = get_records_sql($sql);        if(empty($attempts)) {            print_heading(get_string('nothingtodisplay'));            $this->print_options_form($quiz, $cm, $attemptselection, $lowmarklimit, $pagesize);            return true;        }    /// Here we rewiew all attempts and record data to construct the table        $questions = array();        $statstable = array();        $questionarray = array();        foreach ($attempts as $attempt) {            $questionarray[] = quiz_questions_in_quiz($attempt->layout);        }        $questionlist = quiz_questions_in_quiz(implode(",", $questionarray));        $questionarray = array_unique(explode(",",$questionlist));        $questionlist = implode(",", $questionarray);        unset($questionarray);        foreach ($attempts as $attempt) {            switch ($attemptselection) {            case QUIZ_ALLATTEMPTS :                $userscore = 0;      // can be anything, not used                break;            case QUIZ_HIGHESTATTEMPT :                $userscore = $attempt->sumgrades;                break;            case QUIZ_FIRSTATTEMPT :                $userscore = $attempt->timemodified;                break;            case QUIZ_LASTATTEMPT :                $userscore = $attempt->timemodified;                break;            }            if ($attemptselection == QUIZ_ALLATTEMPTS || $userscore == $usermax[$attempt->userid]) {            $sql = "SELECT q.*, i.grade AS maxgrade, i.id AS instance".                   "  FROM {$CFG->prefix}question q,".                   "       {$CFG->prefix}quiz_question_instances i".                   " WHERE i.quiz = '$quiz->id' AND q.id = i.question".                   "   AND q.id IN ($questionlist)";            if (!$quizquestions = get_records_sql($sql)) {                error('No questions found');            }            // Load the question type specific information            if (!get_question_options($quizquestions)) {                error('Could not load question options');            }            // Restore the question sessions to their most recent states            // creating new sessions where required            if (!$states = get_question_states($quizquestions, $quiz, $attempt)) {                error('Could not restore question sessions');            }            $numbers = explode(',', $questionlist);            $statsrow = array();            foreach ($numbers as $i) {                if (!isset($quizquestions[$i]) or !isset($states[$i])) {                    continue;                }                $qtype = ($quizquestions[$i]->qtype=='random') ? $states[$i]->options->question->qtype : $quizquestions[$i]->qtype;                $q = get_question_responses($quizquestions[$i], $states[$i]);                if (empty($q)){                    continue;                }                $qid = $q->id;                if (!isset($questions[$qid])) {                    $questions[$qid]['id'] = $qid;                    $questions[$qid]['qname'] = $quizquestions[$i]->name;                    foreach ($q->responses as $answer => $r) {                        $r->count = 0;                        $questions[$qid]['responses'][$answer] = $r->answer;                        $questions[$qid]['rcounts'][$answer] = 0;                        $questions[$qid]['credits'][$answer] = $r->credit;                        $statsrow[$qid] = 0;                    }                }                $responses = get_question_actual_response($quizquestions[$i], $states[$i]);                foreach ($responses as $resp){                    if ($resp) {                        if ($key = array_search($resp, $questions[$qid]['responses'])) {                            $questions[$qid]['rcounts'][$key]++;                        } else {                            $test = new stdClass;                            $test->responses = $QTYPES[$quizquestions[$i]->qtype]->get_correct_responses($quizquestions[$i], $states[$i]);                            if ($key = $QTYPES[$quizquestions[$i]->qtype]->check_response($quizquestions[$i], $states[$i], $test)) {                                $questions[$qid]['rcounts'][$key]++;                            } else {                                $questions[$qid]['responses'][] = $resp;                                $questions[$qid]['rcounts'][] = 1;                                $questions[$qid]['credits'][] = 0;                            }                        }                    }                }                $statsrow[$qid] = get_question_fraction_grade($quizquestions[$i], $states[$i]);            }            $attemptscores[$attempt->id] = $attempt->sumgrades;            $statstable[$attempt->id] = $statsrow;            }        } // Statistics Data table built        unset($attempts);        unset($quizquestions);        unset($states);        // now calculate statistics and set the values in the $questions array        $top = max($attemptscores);        $bottom = min($attemptscores);        $gap = ($top - $bottom)/3;        $top -=$gap;        $bottom +=$gap;        foreach ($questions as $qid=>$q) {            $questions[$qid] = $this->report_question_stats($q, $attemptscores, $statstable, $top, $bottom);        }        unset($attemptscores);        unset($statstable);    /// Now check if asked download of data        if ($download = optional_param('download', NULL)) {            $filename = clean_filename("$course->shortname ".format_string($quiz->name,true));            switch ($download) {            case "Excel" :                $this->Export_Excel($questions, $filename);                break;            case "ODS":                $this->Export_ODS($questions, $filename);                break;            case "CSV":                $this->Export_CSV($questions, $filename);                break;            }        }    /// Construct the table for this particular report        $tablecolumns = array('id', 'qname',    'responses', 'credits', 'rcounts', 'rpercent', 'facility', 'qsd','disc_index', 'disc_coeff');        $tableheaders = array(get_string('qidtitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'),                        get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'),                        get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'),                        get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'),                        get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis'));        $table = new flexible_table('mod-quiz-report-itemanalysis');        $table->define_columns($tablecolumns);        $table->define_headers($tableheaders);        $table->define_baseurl($CFG->wwwroot.'/mod/quiz/report.php?q='.$quiz->id.'&amp;mode=analysis');        $table->sortable(true);        $table->no_sorting('rpercent');        $table->collapsible(true);        $table->initialbars(false);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -