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 structure
return $this->prepare_activity_structure($workshop);
}
}