// Generate the grades file
$this->add_step(new backup_activity_grades_structure_step('activity_grades', 'grades.xml'));
+ // Generate the grading file (conditionally)
+ $this->add_step(new backup_activity_grading_structure_step('activity_grading', 'grading.xml'));
+
// Annotate the scales used in already annotated outcomes
$this->add_step(new backup_annotate_scales_from_outcomes('annotate_scales'));
--- /dev/null
+<?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/>.
+
+/**
+ * @package core
+ * @subpackage backup-moodle2
+ * @copyright 2011 David Mudrak <david@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Base class for all advanced grading form plugins
+ */
+abstract class backup_gradingform_plugin extends backup_plugin {
+
+}
require_once($CFG->dirroot . '/backup/moodle2/backup_xml_transformer.class.php');
require_once($CFG->dirroot . '/backup/moodle2/backup_plugin.class.php');
require_once($CFG->dirroot . '/backup/moodle2/backup_qtype_plugin.class.php');
+require_once($CFG->dirroot . '/backup/moodle2/backup_gradingform_plugin.class.php');
require_once($CFG->dirroot . '/backup/moodle2/backup_format_plugin.class.php');
require_once($CFG->dirroot . '/backup/moodle2/backup_theme_plugin.class.php');
require_once($CFG->dirroot . '/backup/moodle2/backup_coursereport_plugin.class.php');
}
}
+
+/**
+ * Defines the backup step for advanced grading methods attached to the activity module
+ */
+class backup_activity_grading_structure_step extends backup_structure_step {
+
+ /**
+ * Include the grading.xml only if the module supports advanced grading
+ */
+ protected function execute_condition() {
+ return plugin_supports('mod', $this->get_task()->get_modulename(), FEATURE_ADVANCED_GRADING, false);
+ }
+
+ /**
+ * Declares the gradable areas structures and data sources
+ */
+ protected function define_structure() {
+
+ // To know if we are including userinfo
+ $userinfo = $this->get_setting_value('userinfo');
+
+ // Define the elements
+
+ $areas = new backup_nested_element('areas');
+
+ $area = new backup_nested_element('area', array('id'), array(
+ 'areaname', 'activemethod'));
+
+ $definitions = new backup_nested_element('definitions');
+
+ $definition = new backup_nested_element('definition', array('id'), array(
+ 'method', 'name', 'description', 'descriptionformat', 'status',
+ 'timecreated', 'timemodified', 'options'));
+
+ $instances = new backup_nested_element('instances');
+
+ $instance = new backup_nested_element('instance', array('id'), array(
+ 'raterid', 'itemid', 'rawgrade', 'status', 'feedback',
+ 'feedbackformat', 'timemodified'));
+
+ // Build the tree including the method specific structures
+ // (beware - the order of how gradingform plugins structures are attached is important)
+ $areas->add_child($area);
+ $area->add_child($definitions);
+ $definitions->add_child($definition);
+ $this->add_plugin_structure('gradingform', $definition, true);
+ $definition->add_child($instances);
+ $instances->add_child($instance);
+ $this->add_plugin_structure('gradingform', $instance, false);
+
+ // Define data sources
+
+ $area->set_source_table('grading_areas', array('contextid' => backup::VAR_CONTEXTID,
+ 'component' => array('sqlparam' => 'mod_'.$this->get_task()->get_modulename())));
+
+ $definition->set_source_table('grading_definitions', array('areaid' => backup::VAR_PARENTID));
+
+ if ($userinfo) {
+ $instance->set_source_table('grading_instances', array('formid' => backup::VAR_PARENTID));
+ }
+
+ // Annotate references
+ $definition->annotate_files('grading', 'description', 'id');
+ $instance->annotate_ids('user', 'raterid');
+
+ // Return the root element
+ return $areas;
+ }
+}
+
+
/**
* structure step in charge of constructing the grades.xml file for all the grade items
* and letters related to one activity
--- /dev/null
+<?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/>.
+
+/**
+ * Support for backup API
+ *
+ * @package gradingform
+ * @subpackage 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();
+
+/**
+ * Defines rubric backup structures
+ */
+class backup_gradingform_rubric_plugin extends backup_gradingform_plugin {
+
+ /**
+ * Declares rubric structures to append to the grading form definition
+ */
+ protected function define_definition_plugin_structure() {
+
+ // Append data only if the grand-parent element has 'method' set to 'rubric'
+ $plugin = $this->get_plugin_element(null, '../../method', 'rubric');
+
+ // Create a visible container for our data
+ $pluginwrapper = new backup_nested_element($this->get_recommended_name());
+
+ // Connect our visible container to the parent
+ $plugin->add_child($pluginwrapper);
+
+ // Define our elements
+
+ $criteria = new backup_nested_element('criteria');
+
+ $criterion = new backup_nested_element('criterion', array('id'), array(
+ 'sortorder', 'description', 'descriptionformat'));
+
+ $levels = new backup_nested_element('levels');
+
+ $level = new backup_nested_element('level', array('id'), array(
+ 'score', 'definition', 'definitionformat'));
+
+ // Build elements hierarchy
+
+ $pluginwrapper->add_child($criteria);
+ $criteria->add_child($criterion);
+ $criterion->add_child($levels);
+ $levels->add_child($level);
+
+ // Set sources to populate the data
+
+ $criterion->set_source_table('gradingform_rubric_criteria',
+ array('formid' => backup::VAR_PARENTID));
+
+ $level->set_source_table('gradingform_rubric_levels',
+ array('criterionid' => backup::VAR_PARENTID));
+
+ // no need to annotate ids or files yet (one day when criterion definition supports
+ // embedded files, they must be annotated here)
+
+ return $plugin;
+ }
+
+ /**
+ * Declares rubric structures to append to the grading form instances
+ */
+ protected function define_instance_plugin_structure() {
+
+ // Append data only if the ancestor 'definition' element has 'method' set to 'rubric'
+ $plugin = $this->get_plugin_element(null, '../../../../method', 'rubric');
+
+ // Create a visible container for our data
+ $pluginwrapper = new backup_nested_element($this->get_recommended_name());
+
+ // Connect our visible container to the parent
+ $plugin->add_child($pluginwrapper);
+
+ // Define our elements
+
+ $fillings = new backup_nested_element('fillings');
+
+ $filling = new backup_nested_element('filling', array('id'), array(
+ 'criterionid', 'levelid', 'remark', 'remarkformat'));
+
+ // Build elements hierarchy
+
+ $pluginwrapper->add_child($fillings);
+ $fillings->add_child($filling);
+
+ // Set sources to populate the data
+
+ $filling->set_source_table('gradingform_rubric_fillings',
+ array('forminstanceid' => backup::VAR_PARENTID));
+
+ // no need to annotate ids or files yet (one day when remark field supports
+ // embedded fileds, they must be annotated here)
+
+ return $plugin;
+ }
+}