From: skodak Date: Sat, 27 Oct 2007 17:58:36 +0000 (+0000) Subject: MDL-11718 partial cleanup in overview report - unfortunately the problems with hidden... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=605740634a799c1bdbc72cdcb74c8992d77f88ce;p=moodle.git MDL-11718 partial cleanup in overview report - unfortunately the problems with hidden grades can not be solved here without db changes --- diff --git a/grade/report/overview/index.php b/grade/report/overview/index.php index 5129f22b47..3870ab6ee7 100644 --- a/grade/report/overview/index.php +++ b/grade/report/overview/index.php @@ -88,9 +88,6 @@ if ($access) { // Create a report instance $report = new grade_report_overview($userid, $gpr, $context); - $gradetotal = 0; - $gradesum = 0; - // print the page print_heading(get_string('modulename', 'gradereport_overview'). ' - '.fullname($report->user)); diff --git a/grade/report/overview/lib.php b/grade/report/overview/lib.php index daf7ba99fc..d50bb1f408 100644 --- a/grade/report/overview/lib.php +++ b/grade/report/overview/lib.php @@ -49,6 +49,11 @@ class grade_report_overview extends grade_report { */ var $table; + /** + * show student ranks + */ + var $showrank; + /** * Constructor. Sets local copies of user preferences and initialises grade_tree. * @param int $userid @@ -59,6 +64,8 @@ class grade_report_overview extends grade_report { global $CFG, $COURSE; parent::grade_report($COURSE->id, $gpr, $context); + $this->showrank = grade_get_setting($this->courseid, 'report_overview_showrank', !empty($CFG->grade_report_overview_showrank)); + // get the user (for full name) $this->user = get_record('user', 'id', $userid); @@ -74,16 +81,21 @@ class grade_report_overview extends grade_report { */ function setup_table() { /* - * Table has 3 columns - *| course | final grade | rank | - */ + * Table has 3 columns + *| course | final grade | rank (optional) | + */ // setting up table headers - $tablecolumns = array('coursename', 'grade', 'rank'); - $tableheaders = array($this->get_lang_string('coursename', 'grades'), - $this->get_lang_string('grade'), - $this->get_lang_string('rank', 'grades')); - + if ($this->showrank) { + $tablecolumns = array('coursename', 'grade', 'rank'); + $tableheaders = array($this->get_lang_string('coursename', 'grades'), + $this->get_lang_string('grade'), + $this->get_lang_string('rank', 'grades')); + } else { + $tablecolumns = array('coursename', 'grade'); + $tableheaders = array($this->get_lang_string('coursename', 'grades'), + $this->get_lang_string('grade')); + } $this->table = new flexible_table('grade-report-overview-'.$this->user->id); $this->table->define_columns($tablecolumns); @@ -99,45 +111,52 @@ class grade_report_overview extends grade_report { function fill_table() { global $CFG; - $numusers = $this->get_numusers(); - // if ($courses = get_courses('all', null, 'c.id, c.shortname')) { // MDL-11679, only show 'mycourses' instead of all courses if ($courses = get_my_courses($this->user->id, 'c.sortorder ASC', 'id, shortname')) { + $numusers = $this->get_numusers(); + foreach ($courses as $course) { + $courselink = ''.$course->shortname.''; + // Get course grade_item - if (!$grade_item = grade_item::fetch(array('itemtype' => 'course', 'courseid' => $course->id))) { - // Create the course item if it doesn't already exist. - $coursecat = grade_category::fetch_course_category($course->id); - $grade_item = $coursecat->get_grade_item(); - } + $grade_item = grade_item::fetch_course_item($course->id); // Get the grade - $finalgrade = get_field('grade_grades', 'finalgrade', 'itemid', $grade_item->id, 'userid', $this->user->id); + $grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$this->user->id)); + $grade->grade_item =& $grade_item; + $finalgrade = $grade->finalgrade; + + // TODO: this DOES NOT work properly if there are any hidden grades, + // rank might be wrong & totals might be different from user report!!! + if ($grade->is_hidden() and !has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $course->id))) { + $finalgrade = null; + } + + $data = array($courselink, grade_format_gradevalue($finalgrade, $grade_item, true)); - /// prints rank - if ($finalgrade) { + if (!$this->showrank) { + //nothing to do + + } else if (!is_null($finalgrade)) { /// find the number of users with a higher grade $sql = "SELECT COUNT(DISTINCT(userid)) - FROM {$CFG->prefix}grade_grades - WHERE finalgrade > $finalgrade - AND itemid = $grade_item->id"; + FROM {$CFG->prefix}grade_grades + WHERE finalgrade IS NOT NULL AND finalgrade > $finalgrade + AND itemid = {$grade_item->id}"; $rank = count_records_sql($sql) + 1; - $rankdata = "$rank/$numusers"; + $data[] = "$rank/$numusers"; + } else { // no grade, no rank - $rankdata = "-"; + $data[] = '-'; } - $courselink = '' . $course->shortname . ''; - - $this->table->add_data(array($courselink, - round(grade_to_percentage($finalgrade, $grade_item->grademin, $grade_item->grademax), 1) . '%', - $rankdata)); + $this->table->add_data($data); } - return true; + } else { notify(get_string('nocourses', 'grades')); return false; @@ -167,6 +186,24 @@ class grade_report_overview extends grade_report { */ function process_data($data) { } +} +function grade_report_overview_settings_definition(&$mform) { + global $CFG; + + $options = array(-1 => get_string('default', 'grades'), + 0 => get_string('hide'), + 1 => get_string('show')); + + if (empty($CFG->grade_overviewreport_showrank)) { + $options[-1] = get_string('defaultprev', 'grades', $options[0]); + } else { + $options[-1] = get_string('defaultprev', 'grades', $options[1]); + } + + $mform->addElement('select', 'report_overview_showrank', get_string('showrank', 'grades'), $options); + $mform->setHelpButton('report_overview_showrank', array(false, get_string('showrank', 'grades'), + false, true, false, get_string('configshowrank', 'grades'))); } + ?> diff --git a/grade/report/overview/settings.php b/grade/report/overview/settings.php new file mode 100644 index 0000000000..f1398530f5 --- /dev/null +++ b/grade/report/overview/settings.php @@ -0,0 +1,30 @@ +add(new admin_setting_configcheckbox('grade_report_overview_showrank', get_string('showrank', 'grades'), get_string('configshowrank', 'grades'), 0, PARAM_INT)); + +?>