<?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"
>
<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"/>
$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';
$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';
$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';
$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';
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);
$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);
$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);
}
/**
$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'));
$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'));
$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();
// 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;
}
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 //
////////////////////////////////////////////////////////////////////////////
$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'),
border: 1px solid #ddd;
}
+.mod-workshop .grading-report th {
+ white-space: normal;
+}
+
.mod-workshop .grading-report td {
vertical-align: top;
border: 1px solid #ddd;
defined('MOODLE_INTERNAL') || die();
-$module->version = 2009092901;
+$module->version = 2009101500;
$module->requires = 2009090400; // Requires this Moodle version
$module->cron = 60;