diff --git a/mod/workshop/assessment.php b/mod/workshop/assessment.php index e400882f8b2..528f911a0bb 100644 --- a/mod/workshop/assessment.php +++ b/mod/workshop/assessment.php @@ -69,30 +69,7 @@ if ('preview' == $mode) { $PAGE->set_heading($course->fullname); } -// load the grading strategy logic -$strategy = $workshop->grading_strategy_instance(); - -// load the form to edit the grading strategy dimensions -$mform = $strategy->get_assessment_form($PAGE->url, $mode, $assessment); - -if ($mform->is_cancelled()) { - redirect($workshop->view_url()); - -} elseif ($data = $mform->get_data()) { - if (isset($data->backtoeditform)) { - // user wants to return from preview to form editing - redirect($workshop->editform_url()); - } - $strategy->save_assessment($assessment, $data); - if (isset($data->saveandclose)) { - redirect($workshop->view_url()); - } else { - // save and continue - redirect to self to prevent data being re-posted by pressing "Reload" - redirect($PAGE->url); - } -} - -// build the navigation and the header +// build the navigation and the header - todo this will be changed by the new navigation api $navlinks = array(); $navlinks[] = array('name' => get_string('modulenameplural', 'workshop'), 'link' => "index.php?id=$course->id", @@ -114,6 +91,34 @@ if ($mode == 'preview') { } $navigation = build_navigation($navlinks); +// load the grading strategy logic +$strategy = $workshop->grading_strategy_instance(); + +// load the form to edit the grading strategy dimensions +$mform = $strategy->get_assessment_form($PAGE->url, $mode, $assessment); + +if ($mform->is_cancelled()) { + redirect($workshop->view_url()); + +} elseif ($data = $mform->get_data()) { + if (isset($data->backtoeditform)) { + // user wants to return from preview to form editing + redirect($workshop->editform_url()); + } + $rawgrade = $strategy->save_assessment($assessment, $data); + if (isset($data->saveandclose)) { + echo $OUTPUT->header($navigation); + echo $OUTPUT->heading(get_string('assessmentresult', 'workshop'), 2); + echo $OUTPUT->box('Given grade: ' . $rawgrade); // todo more detailed info using own renderer + echo $OUTPUT->continue_button($workshop->view_url()); + echo $OUTPUT->footer(); + die(); // bye-bye + } else { + // save and continue - redirect to self to prevent data being re-posted by pressing "Reload" + redirect($PAGE->url); + } +} + // Output starts here echo $OUTPUT->header($navigation); diff --git a/mod/workshop/grading/accumulative/strategy.php b/mod/workshop/grading/accumulative/strategy.php index 310f239aefb..41ded34f9bf 100644 --- a/mod/workshop/grading/accumulative/strategy.php +++ b/mod/workshop/grading/accumulative/strategy.php @@ -35,8 +35,8 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w /** @var workshop the parent workshop instance */ protected $workshop; - /** @var int number of dimensions defined in database, must be set in {@link load_fields()} */ - protected $nodimensions=null; + /** @var array definition of the assessment form fields */ + protected $dimensions = null; /** @var array options for dimension description fields */ protected $descriptionopts; @@ -49,6 +49,7 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w */ public function __construct($workshop) { $this->workshop = $workshop; + $this->dimensions = $this->load_fields(); $this->descriptionopts = array('trusttext' => true, 'subdirs' => true, 'maxfiles' => -1); } @@ -70,11 +71,9 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w require_once(dirname(__FILE__) . '/edit_form.php'); - $fields = $this->load_fields(); - if (is_null($this->nodimensions)) { - throw new coding_exception('You forgot to set the number of dimensions in load_fields()'); - } - $norepeatsdefault = max($this->nodimensions + WORKSHOP_STRATEGY_ADDDIMS, WORKSHOP_STRATEGY_MINDIMS); + $fields = $this->prepare_form_fields($this->dimensions); + $nodimensions = count($this->dimensions); + $norepeatsdefault = max($nodimensions + WORKSHOP_STRATEGY_ADDDIMS, WORKSHOP_STRATEGY_MINDIMS); $norepeats = optional_param('norepeats', $norepeatsdefault, PARAM_INT); // number of dimensions $noadddims = optional_param('noadddims', '', PARAM_ALPHA); // shall we add more? if ($noadddims) { @@ -82,7 +81,7 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w } // prepare the embeded files - for ($i = 0; $i < $this->nodimensions; $i++) { + for ($i = 0; $i < $nodimensions; $i++) { // prepare all editor elements $fields = file_prepare_standard_editor($fields, 'description__idx_'.$i, $this->descriptionopts, $PAGE->context, 'workshop_dimension_description', $fields->{'dimensionid__idx_'.$i}); @@ -100,7 +99,9 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w } /** - * Returns the fields of the assessment form and sets {@var nodimensions} + * Loads the fields of the assessment form + * + * @return array definition of assessment dimensions */ protected function load_fields() { global $DB; @@ -112,22 +113,16 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w ORDER BY master.sort'; $params[0] = $this->workshop->id; - $dims = $DB->get_records_sql($sql, $params); - $this->nodimensions = count($dims); - $fields = $this->_cook_dimension_records($dims); - return $fields; + return $DB->get_records_sql($sql, $params); } /** - * Maps the data from DB to their form fields + * Maps the dimension data from DB to the form fields * - * Called internally from load_form(). Could be private but keeping protected - * for unit testing purposes. - * - * @param array $raw Array of raw dimension records as fetched by get_record() + * @param array $raw Array of raw dimension records as returned by {@link load_fields()} * @return array Array of fields data to be used by the mform set_data */ - protected function _cook_dimension_records(array $raw) { + protected function prepare_form_fields(array $raw) { $formdata = new stdClass(); $key = 0; @@ -256,13 +251,11 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w global $DB; require_once(dirname(__FILE__) . '/assessment_form.php'); - $fields = $this->load_fields(); - if (is_null($this->nodimensions)) { - throw new coding_exception('You forgot to set the number of dimensions in load_fields()'); - } + $fields = $this->prepare_form_fields($this->dimensions); + $nodimensions = count($this->dimensions); // rewrite URLs to the embeded files - for ($i = 0; $i < $this->nodimensions; $i++) { + for ($i = 0; $i < $nodimensions; $i++) { $fields->{'description__idx_'.$i} = file_rewrite_pluginfile_urls($fields->{'description__idx_'.$i}, 'pluginfile.php', $PAGE->context->id, 'workshop_dimension_description', $fields->{'dimensionid__idx_'.$i}); } @@ -271,7 +264,7 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w // load the previously saved assessment data $grades = $DB->get_records('workshop_grades', array('assessmentid' => $assessment->id), '', 'dimensionid,*'); $current = new stdClass(); - for ($i = 0; $i < $this->nodimensions; $i++) { + for ($i = 0; $i < $nodimensions; $i++) { $dimid = $fields->{'dimensionid__idx_'.$i}; if (isset($grades[$dimid])) { $current->{'gradeid__idx_'.$i} = $grades[$dimid]->id; @@ -286,7 +279,7 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w $customdata['mode'] = $mode; // set up strategy-specific custom data - $customdata['nodims'] = $this->nodimensions; + $customdata['nodims'] = $nodimensions; $customdata['fields'] = $fields; $customdata['current'] = isset($current) ? $current : null; $attributes = array('class' => 'assessmentform accumulative'); @@ -301,7 +294,7 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w * * @param object $assessment Assessment being filled * @param object $data Raw data as returned by the assessment form - * @return void + * @return float Percentual grade for submission as suggested by the peer */ public function save_assessment(stdClass $assessment, stdClass $data) { global $DB; @@ -329,7 +322,16 @@ class workshop_accumulative_strategy extends workshop_base_strategy implements w $DB->update_record('workshop_grades', $grade); } } - // todo recalculate grades immediately or by cron ? + return $this->update_peer_grade($assessment); } + /** + * Aggregate the assessment form data and set the grade for the submission given by the peer + * + * @param stdClass $assessment Assessment record + * @return float Percentual grade for submission as suggested by the peer + */ + protected function update_peer_grade(stdClass $assessment) { + return 60.2; + } } diff --git a/mod/workshop/grading/lib.php b/mod/workshop/grading/lib.php index 36f0d9d65bd..eaaaed59fa3 100644 --- a/mod/workshop/grading/lib.php +++ b/mod/workshop/grading/lib.php @@ -71,13 +71,13 @@ interface workshop_strategy { public function get_assessment_form(moodle_url $actionurl=null, $mode='preview'); /** - * Saves the filled assessment + * Saves the filled assessment and returns the grade for submission as suggested by the reviewer * * This method processes data submitted using the form returned by {@link get_assessment_form()} * * @param object $assessment Assessment being filled * @param object $data Raw data as returned by the assessment form - * @return void + * @return float Percentual grade for submission as suggested by the peer */ public function save_assessment(stdClass $assessment, stdClass $data); } diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index 9d4ca29ac26..cdc15560ff5 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -41,7 +41,6 @@ $string[''] = ''; $string[''] = ''; $string[''] = ''; $string[''] = ''; -$string[''] = ''; $string['accesscontrol'] = 'Access control'; $string['addmoredimensionsaccumulative'] = 'Blanks for $a more aspects'; $string['addmoredimensionsnoerrors'] = 'Blanks for $a more assertions'; @@ -72,6 +71,7 @@ $string['assessmentdeleted'] = 'Assessment deallocated'; $string['assessmentdeleteddetail'] = 'Assessment deallocated: $a->reviewername is no longer reviewer of $a->authorname'; $string['assessmentend'] = 'End of assessment phase'; $string['assessmentform'] = 'Assessment form'; +$string['assessmentresult'] = 'Assessment result'; $string['assessmentsettings'] = 'Assessment settings'; $string['assessmentstart'] = 'Start of assessment phase'; $string['assesswosubmission'] = 'Users can assess without their own submission';