AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Provides support for the conversion of moodle1 backup to the moodle2 format** @package workshopform_rubric* @copyright 2011 David Mudrak <david@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/defined('MOODLE_INTERNAL') || die();/*** Conversion handler for the rubric grading strategy data*/class moodle1_workshopform_rubric_handler extends moodle1_workshopform_handler {/** @var array legacy elements to process */protected $elements = array();/** @var array legacy rubrics records to process */protected $rubrics = array();/*** Prepare to gather legacy elements info for a new workshop instance*/public function on_elements_start() {$this->elements = array();$this->rubrics = array();}/*** Processes one <ELEMENT>** @param array $data legacy element data* @param array $raw raw element data*/public function process_legacy_element(array $data, array $raw) {$this->elements[] = $data;$this->rubrics[$data['id']] = array();}/*** Processes one <RUBRIC>*/public function process_legacy_rubric($data, $raw) {$this->rubrics[$data['elementid']][] = $data;}/*** Processes gathered elements and rubrics*/public function on_elements_end() {$numofrubrics = 0;foreach ($this->rubrics as $itemid => $levels) {$numofrubrics += count($levels);}if ($numofrubrics == 0) {$this->convert_legacy_criterion_elements();} else {$this->convert_legacy_rubric_elements();}}/*** Processes gathered elements coming from the legacy criterion strategy** Legacy criterion strategy is converted to a rubric with single rubric item* and the layout set to 'list'.*/protected function convert_legacy_criterion_elements() {$this->write_xml('workshopform_rubric_config', array('layout' => 'list'));$firstelement = reset($this->elements);if ($firstelement === false) {// no elements defined in moodle.xmlreturn;}// write the xml describing the artificial single rubric item$this->xmlwriter->begin_tag('workshopform_rubric_dimension', array('id' => $firstelement['id']));$this->xmlwriter->full_tag('sort', 1);$this->xmlwriter->full_tag('description', trim(get_string('dimensionnumber', 'workshopform_rubric', '')));$this->xmlwriter->full_tag('descriptionformat', FORMAT_HTML);foreach ($this->elements as $element) {$this->write_xml('workshopform_rubric_level', array('id' => $element['id'],'grade' => $element['maxscore'],'definition' => $element['description'],'definitionformat' => FORMAT_HTML), array('/workshopform_rubric_level/id'));}$this->xmlwriter->end_tag('workshopform_rubric_dimension');}/*** Processes gathered elements coming from the legacy rubric strategy*/protected function convert_legacy_rubric_elements() {$this->write_xml('workshopform_rubric_config', array('layout' => 'grid'));foreach ($this->elements as $element) {$this->xmlwriter->begin_tag('workshopform_rubric_dimension', array('id' => $element['id']));$this->xmlwriter->full_tag('sort', $element['elementno']);$this->xmlwriter->full_tag('description', $element['description']);$this->xmlwriter->full_tag('descriptionformat', FORMAT_HTML);foreach ($this->rubrics[$element['id']] as $rubric) {$fakerecord = new stdClass();$fakerecord->rgrade = $rubric['rubricno'];$fakerecord->eweight = $element['weight'];$fakerecord->rdesc = $rubric['description'];$level = (array)workshopform_rubric_upgrade_rubric_level($fakerecord, $element['id']);unset($level['dimensionid']);$level['id'] = $this->converter->get_nextid();$this->write_xml('workshopform_rubric_level', $level, array('/workshopform_rubric_level/id'));}$this->xmlwriter->end_tag('workshopform_rubric_dimension');}}}/*** Transforms given record into an object to be saved into workshopform_rubric_levels** This is used during Rubric 1.9 -> Rubric 2.0 conversion** @param stdClass $old legacy record from joined workshop_elements_old + workshop_rubrics_old* @param int $newdimensionid id of the new workshopform_rubric dimension record to be linked to* @return stdclass to be saved in workshopform_rubric_levels*/function workshopform_rubric_upgrade_rubric_level(stdclass $old, $newdimensionid) {$new = new stdclass();$new->dimensionid = $newdimensionid;$new->grade = $old->rgrade * workshopform_rubric_upgrade_weight($old->eweight);$new->definition = $old->rdesc;$new->definitionformat = FORMAT_HTML;return $new;}/*** Given old workshop element weight, returns the weight multiplier** Negative weights are not supported any more and are replaced with weight = 0.* Legacy workshop did not store the raw weight but the index in the array* of weights (see $WORKSHOP_EWEIGHTS in workshop 1.x). workshop 2.0 uses* integer weights only (0-16) so all previous weights are multiplied by 4.** @param $oldweight index in legacy $WORKSHOP_EWEIGHTS* @return int new weight*/function workshopform_rubric_upgrade_weight($oldweight) {switch ($oldweight) {case 8: $weight = 1; break;case 9: $weight = 2; break;case 10: $weight = 3; break;case 11: $weight = 4; break;case 12: $weight = 6; break;case 13: $weight = 8; break;case 14: $weight = 16; break;default: $weight = 0;}return $weight;}