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/>./*** Defines all the backup steps that will be used by {@link backup_workshop_activity_task}** @package mod_workshop* @category backup* @copyright 2010 David Mudrak <david.mudrak@gmail.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/defined('MOODLE_INTERNAL') || die();/*** Defines the complete workshop structure for backup, with file and id annotations** @link http://docs.moodle.org/dev/Workshop for XML structure diagram*/class backup_workshop_activity_structure_step extends backup_activity_structure_step {/*** Defines the structure of the 'workshop' element inside the workshop.xml file** @return backup_nested_element*/protected function define_structure() {// are we including userinfo?$userinfo = $this->get_setting_value('userinfo');////////////////////////////////////////////////////////////////////////// XML nodes declaration - non-user data////////////////////////////////////////////////////////////////////////// root element describing workshop instance$workshop = new backup_nested_element('workshop', array('id'), array('name', 'intro', 'introformat', 'instructauthors','instructauthorsformat', 'instructreviewers','instructreviewersformat', 'timemodified', 'phase', 'useexamples','usepeerassessment', 'useselfassessment', 'grade', 'gradinggrade','strategy', 'evaluation', 'gradedecimals', 'submissiontypetext', 'submissiontypefile', 'nattachments','submissionfiletypes', 'latesubmissions', 'maxbytes', 'examplesmode', 'submissionstart','submissionend', 'assessmentstart', 'assessmentend','conclusion', 'conclusionformat', 'overallfeedbackmode','overallfeedbackfiles', 'overallfeedbackfiletypes', 'overallfeedbackmaxbytes'));// assessment forms definition$this->add_subplugin_structure('workshopform', $workshop, true);// grading evaluations data$this->add_subplugin_structure('workshopeval', $workshop, true);// example submissions$examplesubmissions = new backup_nested_element('examplesubmissions');$examplesubmission = new backup_nested_element('examplesubmission', array('id'), array('timecreated', 'timemodified', 'title', 'content', 'contentformat','contenttrust', 'attachment'));// reference assessment of the example submission$referenceassessment = new backup_nested_element('referenceassessment', array('id'), array('timecreated', 'timemodified', 'grade', 'feedbackauthor', 'feedbackauthorformat','feedbackauthorattachment'));// dimension grades for the reference assessment (that is how the form is filled)$this->add_subplugin_structure('workshopform', $referenceassessment, true);////////////////////////////////////////////////////////////////////////// XML nodes declaration - user data////////////////////////////////////////////////////////////////////////// assessments of example submissions$exampleassessments = new backup_nested_element('exampleassessments');$exampleassessment = new backup_nested_element('exampleassessment', array('id'), array('reviewerid', 'weight', 'timecreated', 'timemodified', 'grade','gradinggrade', 'gradinggradeover', 'gradinggradeoverby','feedbackauthor', 'feedbackauthorformat', 'feedbackauthorattachment','feedbackreviewer', 'feedbackreviewerformat'));// dimension grades for the assessment of example submission (that is assessment forms are filled)$this->add_subplugin_structure('workshopform', $exampleassessment, true);// submissions$submissions = new backup_nested_element('submissions');$submission = new backup_nested_element('submission', array('id'), array('authorid', 'timecreated', 'timemodified', 'title', 'content','contentformat', 'contenttrust', 'attachment', 'grade','gradeover', 'gradeoverby', 'feedbackauthor','feedbackauthorformat', 'timegraded', 'published', 'late'));// allocated assessments$assessments = new backup_nested_element('assessments');$assessment = new backup_nested_element('assessment', array('id'), array('reviewerid', 'weight', 'timecreated', 'timemodified', 'grade','gradinggrade', 'gradinggradeover', 'gradinggradeoverby','feedbackauthor', 'feedbackauthorformat', 'feedbackauthorattachment','feedbackreviewer', 'feedbackreviewerformat'));// dimension grades for the assessment (that is assessment forms are filled)$this->add_subplugin_structure('workshopform', $assessment, true);// aggregations of grading grades in this workshop$aggregations = new backup_nested_element('aggregations');$aggregation = new backup_nested_element('aggregation', array('id'), array('userid', 'gradinggrade', 'timegraded'));////////////////////////////////////////////////////////////////////////// build the tree in the order needed for restore////////////////////////////////////////////////////////////////////////$workshop->add_child($examplesubmissions);$examplesubmissions->add_child($examplesubmission);$examplesubmission->add_child($referenceassessment);$examplesubmission->add_child($exampleassessments);$exampleassessments->add_child($exampleassessment);$workshop->add_child($submissions);$submissions->add_child($submission);$submission->add_child($assessments);$assessments->add_child($assessment);$workshop->add_child($aggregations);$aggregations->add_child($aggregation);////////////////////////////////////////////////////////////////////////// data sources - non-user data////////////////////////////////////////////////////////////////////////$workshop->set_source_table('workshop', array('id' => backup::VAR_ACTIVITYID));$examplesubmission->set_source_sql("SELECT *FROM {workshop_submissions}WHERE workshopid = ? AND example = 1",array(backup::VAR_PARENTID));$referenceassessment->set_source_sql("SELECT *FROM {workshop_assessments}WHERE weight = 1 AND submissionid = ?",array(backup::VAR_PARENTID));////////////////////////////////////////////////////////////////////////// data sources - user related data////////////////////////////////////////////////////////////////////////if ($userinfo) {$exampleassessment->set_source_sql("SELECT *FROM {workshop_assessments}WHERE weight = 0 AND submissionid = ?",array(backup::VAR_PARENTID));$submission->set_source_sql("SELECT *FROM {workshop_submissions}WHERE workshopid = ? AND example = 0",array(backup::VAR_PARENTID)); // must use SQL here, for the same reason as above$assessment->set_source_table('workshop_assessments', array('submissionid' => backup::VAR_PARENTID));$aggregation->set_source_table('workshop_aggregations', array('workshopid' => backup::VAR_PARENTID));}////////////////////////////////////////////////////////////////////////// id annotations////////////////////////////////////////////////////////////////////////$exampleassessment->annotate_ids('user', 'reviewerid');$submission->annotate_ids('user', 'authorid');$submission->annotate_ids('user', 'gradeoverby');$assessment->annotate_ids('user', 'reviewerid');$assessment->annotate_ids('user', 'gradinggradeoverby');$aggregation->annotate_ids('user', 'userid');////////////////////////////////////////////////////////////////////////// file annotations////////////////////////////////////////////////////////////////////////$workshop->annotate_files('mod_workshop', 'intro', null); // no itemid used$workshop->annotate_files('mod_workshop', 'instructauthors', null); // no itemid used$workshop->annotate_files('mod_workshop', 'instructreviewers', null); // no itemid used$workshop->annotate_files('mod_workshop', 'conclusion', null); // no itemid used$examplesubmission->annotate_files('mod_workshop', 'submission_content', 'id');$examplesubmission->annotate_files('mod_workshop', 'submission_attachment', 'id');$referenceassessment->annotate_files('mod_workshop', 'overallfeedback_content', 'id');$referenceassessment->annotate_files('mod_workshop', 'overallfeedback_attachment', 'id');$exampleassessment->annotate_files('mod_workshop', 'overallfeedback_content', 'id');$exampleassessment->annotate_files('mod_workshop', 'overallfeedback_attachment', 'id');$submission->annotate_files('mod_workshop', 'submission_content', 'id');$submission->annotate_files('mod_workshop', 'submission_attachment', 'id');$assessment->annotate_files('mod_workshop', 'overallfeedback_content', 'id');$assessment->annotate_files('mod_workshop', 'overallfeedback_attachment', 'id');// return the root element (workshop), wrapped into standard activity structurereturn $this->prepare_activity_structure($workshop);}}