From b4857acb9294a32ab0a451a5555a3a390fa3b288 Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Mon, 4 Jan 2010 18:17:47 +0000 Subject: [PATCH] Display real grade values in the grading report --- mod/workshop/db/install.xml | 7 +-- mod/workshop/lang/en_utf8/workshop.php | 7 ++- mod/workshop/locallib.php | 75 ++++++++++++++++++++------ mod/workshop/mod_form.php | 14 ++++- mod/workshop/renderer.php | 28 ++++------ mod/workshop/settings.php | 11 +++- mod/workshop/styles.php | 4 ++ mod/workshop/version.php | 2 +- 8 files changed, 102 insertions(+), 46 deletions(-) diff --git a/mod/workshop/db/install.xml b/mod/workshop/db/install.xml index 75e29dffd1..4ebf728fb6 100644 --- a/mod/workshop/db/install.xml +++ b/mod/workshop/db/install.xml @@ -1,5 +1,5 @@ - @@ -22,8 +22,9 @@ - - + + + diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index 66e6340437..62b36af6a6 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -29,7 +29,8 @@ $string[''] = ''; $string[''] = ''; $string[''] = ''; $string[''] = ''; -$string[''] = ''; +$string['configgradedecimals'] = 'Default number of digits that should be shown after the decimal point when displaying grades.'; +$string['gradedecimals'] = 'Decimal places in grades'; $string['accesscontrol'] = 'Access control'; $string['aggregategrades'] = 'Re-calculate grades'; $string['aggregation'] = 'Grades aggregation'; @@ -88,6 +89,7 @@ $string['formatpeergradeover'] = '$a->grade ($a->gradinggrade / $string['givengrade'] = 'Given grade: $a'; $string['givengrades'] = 'Given grades'; $string['gradinggrade'] = 'Grade for assessment'; +$string['gradinggradeof'] = 'Grade for assessment (of $a)'; $string['gradingsettings'] = 'Grading settings'; $string['chooseuser'] = 'Choose user...'; $string['iamsure'] = 'Yes, I am sure'; @@ -111,7 +113,7 @@ $string['nothingtoreview'] = 'Nothing to review'; $string['noworkshops'] = 'There are no workshops in this course'; $string['noyoursubmission'] = 'You have not submitted your work yet'; $string['nsassessments'] = 'Number of required assessments of other users\' work'; -$string['nullgrade'] = '?'; +$string['nullgrade'] = '-'; $string['numofreviews'] = 'Number of reviews'; $string['participant'] = 'Participant'; $string['participantrevierof'] = 'Participant is reviewer of'; @@ -140,6 +142,7 @@ $string['submissionattachment'] = 'Attachment'; $string['submissioncontent'] = 'Submission content'; $string['submissionend'] = 'End of submission phase'; $string['submissiongrade'] = 'Grade for submission'; +$string['submissiongradeof'] = 'Grade for submission (of $a)'; $string['submissionsettings'] = 'Submission settings'; $string['submissionstart'] = 'Start of submission phase'; $string['submission'] = 'Submission'; diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index 9c24cb699a..8501ef9753 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -1075,8 +1075,8 @@ class workshop { foreach ($submissions as $submission) { $grades[$submission->authorid]->submissionid = $submission->id; $grades[$submission->authorid]->submissiontitle = $submission->title; - $grades[$submission->authorid]->submissiongrade = $submission->grade; - $grades[$submission->authorid]->submissiongradeover = $submission->gradeover; + $grades[$submission->authorid]->submissiongrade = $this->real_grade($submission->grade); + $grades[$submission->authorid]->submissiongradeover = $this->real_grade($submission->gradeover); $grades[$submission->authorid]->submissiongradeoverby = $submission->gradeoverby; } unset($submissions); @@ -1087,9 +1087,9 @@ class workshop { $info->userid = $reviewer->reviewerid; $info->assessmentid = $reviewer->assessmentid; $info->submissionid = $reviewer->submissionid; - $info->grade = $reviewer->grade; - $info->gradinggrade = $reviewer->gradinggrade; - $info->gradinggradeover = $reviewer->gradinggradeover; + $info->grade = $this->real_grade($reviewer->grade); + $info->gradinggrade = $this->real_grading_grade($reviewer->gradinggrade); + $info->gradinggradeover = $this->real_grading_grade($reviewer->gradinggradeover); $grades[$reviewer->authorid]->reviewedby[$reviewer->reviewerid] = $info; } unset($reviewers); @@ -1100,36 +1100,77 @@ class workshop { $info->userid = $reviewee->authorid; $info->assessmentid = $reviewee->assessmentid; $info->submissionid = $reviewee->submissionid; - $info->grade = $reviewee->grade; - $info->gradinggrade = $reviewee->gradinggrade; - $info->gradinggradeover = $reviewee->gradinggradeover; + $info->grade = $this->real_grade($reviewee->grade); + $info->gradinggrade = $this->real_grading_grade($reviewee->gradinggrade); + $info->gradinggradeover = $this->real_grading_grade($reviewee->gradinggradeover); $grades[$reviewee->reviewerid]->reviewerof[$reviewee->authorid] = $info; } unset($reviewees); unset($reviewee); + foreach ($grades as $grade) { + $grade->gradinggrade = $this->real_grading_grade($grade->gradinggrade); + $grade->totalgrade = $this->format_total_grade($grade->totalgrade); + } + $data = new stdClass(); $data->grades = $grades; $data->userinfo = $userinfo; $data->totalcount = $numofparticipants; + $data->maxgrade = $this->real_grade(100); + $data->maxgradinggrade = $this->real_grading_grade(100); return $data; } /** - * Calculate the participant's total grade given the aggregated grades for submission and assessments + * Calculates the real value of a grade * - * todo there will be a setting how to deal with null values (for example no grade for submission) - if - * they are considered as 0 or excluded + * @param float $value percentual value from 0 to 100 + * @param float $max the maximal grade + * @return string + */ + public function real_grade_value($value, $max) { + $localized = true; + if (is_null($value)) { + return null; + } elseif ($max == 0) { + return 0; + } else { + return format_float($max * $value / 100, $this->gradedecimals, $localized); + } + } + + /** + * Rounds the value from DB to be displayed * - * @param float|null $grade for submission - * @param float|null $gradinggrade for assessment - * @return float|null + * @param float $raw value from {workshop_aggregations} + * @return string */ - public function total_grade($grade=null, $gradinggrade=null) { - if (is_null($grade) and is_null($gradinggrade)) { + public function format_total_grade($raw) { + if (is_null($raw)) { return null; } - return grade_floatval((float)$grade + (float)$gradinggrade); + return format_float($raw, $this->gradedecimals, $localized); + } + + /** + * Calculates the real value of grade for submission + * + * @param float $value percentual value from 0 to 100 + * @return string + */ + public function real_grade($value) { + return $this->real_grade_value($value, $this->grade); + } + + /** + * Calculates the real value of grade for assessment + * + * @param float $value percentual value from 0 to 100 + * @return string + */ + public function real_grading_grade($value) { + return $this->real_grade_value($value, $this->gradinggrade); } /** diff --git a/mod/workshop/mod_form.php b/mod/workshop/mod_form.php index 75f187e374..5e232a7b2d 100644 --- a/mod/workshop/mod_form.php +++ b/mod/workshop/mod_form.php @@ -87,12 +87,12 @@ class mod_workshop_mod_form extends moodleform_mod { $grades = workshop_get_maxgrades(); - $label = get_string('gradeforsubmission', 'workshop'); + $label = get_string('submissiongrade', 'workshop'); $mform->addElement('select', 'grade', $label, $grades); $mform->setDefault('grade', $workshopconfig->grade); $mform->setHelpButton('grade', array('grade', $label, 'workshop')); - $label = get_string('gradeforassessment', 'workshop'); + $label = get_string('gradinggrade', 'workshop'); $mform->addElement('select', 'gradinggrade', $label , $grades); $mform->setDefault('gradinggrade', $workshopconfig->gradinggrade); $mform->setHelpButton('gradinggrade', array('gradinggrade', $label, 'workshop')); @@ -102,6 +102,16 @@ class mod_workshop_mod_form extends moodleform_mod { $mform->setDefault('strategy', $workshopconfig->strategy); $mform->setHelpButton('strategy', array('strategy', $label, 'workshop')); + $options = array(); + for ($i=5; $i>=0; $i--) { + $options[$i] = $i; + } + $label = get_string('gradedecimals', 'workshop'); + $mform->addElement('select', 'gradedecimals', $label, $options); + $mform->setHelpButton('gradedecimals', array('gradedecimals', $label, 'workshop')); + $mform->setAdvanced('gradedecimals'); + $mform->setDefault('gradedecimals', $workshopconfig->gradedecimals); + // Submission settings -------------------------------------------------------- $mform->addElement('header', 'submissionsettings', get_string('submissionsettings', 'workshop')); diff --git a/mod/workshop/renderer.php b/mod/workshop/renderer.php index 01271b2ed3..a9fa5fe6d8 100644 --- a/mod/workshop/renderer.php +++ b/mod/workshop/renderer.php @@ -429,9 +429,11 @@ class moodle_mod_workshop_renderer extends moodle_renderer_base { $sortbyname, $this->sortable_heading(get_string('submission', 'workshop'), 'submissiontitle', $sortby, $sorthow), $this->sortable_heading(get_string('receivedgrades', 'workshop')), - $this->sortable_heading(get_string('submissiongrade', 'workshop'), 'submissiongrade', $sortby, $sorthow), + $this->sortable_heading(get_string('submissiongradeof', 'workshop', $data->maxgrade), + 'submissiongrade', $sortby, $sorthow), $this->sortable_heading(get_string('givengrades', 'workshop')), - $this->sortable_heading(get_string('gradinggrade', 'workshop'), 'gradinggrade', $sortby, $sorthow), + $this->sortable_heading(get_string('gradinggradeof', 'workshop', $data->maxgradinggrade), + 'gradinggrade', $sortby, $sorthow), $this->sortable_heading(get_string('totalgrade', 'workshop'), 'totalgrade', $sortby, $sorthow), ); $table->rowclasses = array(); @@ -510,7 +512,11 @@ class moodle_mod_workshop_renderer extends moodle_renderer_base { // column #7 - total grade for assessment if ($tr == 0) { $cell = new html_table_cell(); - $cell->text = $participant->totalgrade; + if (is_null($participant->totalgrade)) { + $cell->text = get_string('nullgrade', 'workshop'); + } else { + $cell->text = $participant->totalgrade; + } $cell->rowspan = $numoftrs; $row->cells[] = $cell; } @@ -620,22 +626,6 @@ class moodle_mod_workshop_renderer extends moodle_renderer_base { return $grade; } - /** - * Format the grade for the output - * - * @param float $value the grade value - * @param int $decimals the precision to be displayed - * @return string - */ - public function grade($value, $decimals=0) { - if (is_null($value)) { - return get_string('nullgrade', 'workshop'); - } - - return format_float($value, $decimals, true); - } - - //////////////////////////////////////////////////////////////////////////// // Helper methods // //////////////////////////////////////////////////////////////////////////// diff --git a/mod/workshop/settings.php b/mod/workshop/settings.php index 3ea3befa30..6877a1d2b7 100644 --- a/mod/workshop/settings.php +++ b/mod/workshop/settings.php @@ -31,12 +31,19 @@ require_once($CFG->dirroot.'/mod/workshop/lib.php'); $grades = workshop_get_maxgrades(); -$settings->add(new admin_setting_configselect('workshop/grade', get_string('gradeforsubmission', 'workshop'), +$settings->add(new admin_setting_configselect('workshop/grade', get_string('submissiongrade', 'workshop'), get_string('configgrade', 'workshop'), 80, $grades)); -$settings->add(new admin_setting_configselect('workshop/gradinggrade', get_string('gradeforassessment', 'workshop'), +$settings->add(new admin_setting_configselect('workshop/gradinggrade', get_string('gradinggrade', 'workshop'), get_string('configgradinggrade', 'workshop'), 20, $grades)); +$options = array(); +for ($i = 5; $i >= 0; $i--) { + $options[$i] = $i; +} +$settings->add(new admin_setting_configselect('workshop/gradedecimals', get_string('gradedecimals', 'workshop'), + get_string('configgradedecimals', 'workshop'), 0, $options)); + $options = get_max_upload_sizes($CFG->maxbytes); $options[0] = get_string('courseuploadlimit'); $settings->add(new admin_setting_configselect('workshop/maxbytes', get_string('maxbytes', 'workshop'), diff --git a/mod/workshop/styles.php b/mod/workshop/styles.php index 2dac650363..808a01af29 100644 --- a/mod/workshop/styles.php +++ b/mod/workshop/styles.php @@ -405,6 +405,10 @@ border: 1px solid #ddd; } +.mod-workshop .grading-report th { + white-space: normal; +} + .mod-workshop .grading-report td { vertical-align: top; border: 1px solid #ddd; diff --git a/mod/workshop/version.php b/mod/workshop/version.php index 3745395921..883bc25d61 100644 --- a/mod/workshop/version.php +++ b/mod/workshop/version.php @@ -28,6 +28,6 @@ defined('MOODLE_INTERNAL') || die(); -$module->version = 2009092901; +$module->version = 2009101500; $module->requires = 2009090400; // Requires this Moodle version $module->cron = 60; -- 2.39.5