]> git.mjollnir.org Git - moodle.git/commitdiff
Display real grade values in the grading report
authorDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:17:47 +0000 (18:17 +0000)
committerDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:17:47 +0000 (18:17 +0000)
mod/workshop/db/install.xml
mod/workshop/lang/en_utf8/workshop.php
mod/workshop/locallib.php
mod/workshop/mod_form.php
mod/workshop/renderer.php
mod/workshop/settings.php
mod/workshop/styles.php
mod/workshop/version.php

index 75e29dffd10fea51f49a73d91e4f9a355c517c33..4ebf728fb69f9d7b2fa5ac1e87a68b1133b2310d 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/workshop/db" VERSION="20090929" COMMENT="XMLDB file for Moodle mod/workshop"
+<XMLDB PATH="mod/workshop/db" VERSION="20091015" COMMENT="XMLDB file for Moodle mod/workshop"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
 >
@@ -22,8 +22,9 @@
         <FIELD NAME="useselfassessment" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="optional feature: students perform self assessment of their own work" PREVIOUS="usepeerassessment" NEXT="grade"/>
         <FIELD NAME="grade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="80" SEQUENCE="false" DECIMALS="5" COMMENT="The maximum grade for submission" PREVIOUS="useselfassessment" NEXT="gradinggrade"/>
         <FIELD NAME="gradinggrade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="20" SEQUENCE="false" DECIMALS="5" COMMENT="The maximum grade for assessment" PREVIOUS="grade" NEXT="strategy"/>
-        <FIELD NAME="strategy" TYPE="char" LENGTH="30" NOTNULL="true" SEQUENCE="false" COMMENT="The type of the current grading strategy used in this workshop" PREVIOUS="gradinggrade" NEXT="nattachments"/>
-        <FIELD NAME="nattachments" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Number of required submission attachments" PREVIOUS="strategy" NEXT="latesubmissions"/>
+        <FIELD NAME="strategy" TYPE="char" LENGTH="30" NOTNULL="true" SEQUENCE="false" COMMENT="The type of the current grading strategy used in this workshop" PREVIOUS="gradinggrade" NEXT="gradedecimals"/>
+        <FIELD NAME="gradedecimals" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Number of digits that should be shown after the decimal point when displaying grades" PREVIOUS="strategy" NEXT="nattachments"/>
+        <FIELD NAME="nattachments" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Number of required submission attachments" PREVIOUS="gradedecimals" NEXT="latesubmissions"/>
         <FIELD NAME="latesubmissions" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Allow submitting the work after the deadline" PREVIOUS="nattachments" NEXT="maxbytes"/>
         <FIELD NAME="maxbytes" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="100000" SEQUENCE="false" COMMENT="Maximum size of the one attached file" PREVIOUS="latesubmissions" NEXT="nexassessments"/>
         <FIELD NAME="nexassessments" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="If useexamples == 1: the number of required assessments of teacher examples (0 = all, greater than 0: the number)" PREVIOUS="maxbytes" NEXT="examplesmode"/>
index 66e63404376b7b8fc29e59fe8e270871250fc4a5..62b36af6a6fd5a89166f1c406df357e01c7fffd7 100644 (file)
@@ -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 (<del>$a->gradinggrade</del> / <ins>
 $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';
index 9c24cb699a8ee153a9ed63f699ab58c75a0f7a20..8501ef9753f4f039fe0dc8ed2dbd8c2908de154c 100644 (file)
@@ -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);
     }
 
     /**
index 75f187e3749b1da4879b94f1e3b40b2173183808..5e232a7b2d9b8b45d3aca27ab1451b87473296e9 100644 (file)
@@ -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'));
 
index 01271b2ed32ff6e6df6608aaba429813b75ce30c..a9fa5fe6d8ddffa0e4094816ba112430a9b7239e 100644 (file)
@@ -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                                                         //
     ////////////////////////////////////////////////////////////////////////////
index 3ea3befa30dde8cd8e6dd8de5363576218559878..6877a1d2b7dd7179c717ffcb6444ce3db70e9a6f 100644 (file)
@@ -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'),
index 2dac65036326fb8482e3b5b2037155854e6f8ce2..808a01af29c799736045ae98dbcf706ecb204bb5 100644 (file)
     border: 1px solid #ddd;
 }
 
+.mod-workshop .grading-report th {
+    white-space: normal;
+}
+
 .mod-workshop .grading-report td {
     vertical-align: top;
     border: 1px solid #ddd;
index 374539592112921565967a575a6329a15e0ab3fb..883bc25d614c3e63b34c2db08f6c3b3df8ae6420 100644 (file)
@@ -28,6 +28,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$module->version  = 2009092901;
+$module->version  = 2009101500;
 $module->requires = 2009090400;  // Requires this Moodle version
 $module->cron     = 60;