|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00027 defined('MOODLE_INTERNAL') || die(); 00028 00034 class backup_workshop_activity_structure_step extends backup_activity_structure_step { 00035 00036 protected function define_structure() { 00037 00038 // are we including userinfo? 00039 $userinfo = $this->get_setting_value('userinfo'); 00040 00042 // XML nodes declaration - non-user data 00044 00045 // root element describing workshop instance 00046 $workshop = new backup_nested_element('workshop', array('id'), array( 00047 'name', 'intro', 'introformat', 'instructauthors', 00048 'instructauthorsformat', 'instructreviewers', 00049 'instructreviewersformat', 'timemodified', 'phase', 'useexamples', 00050 'usepeerassessment', 'useselfassessment', 'grade', 'gradinggrade', 00051 'strategy', 'evaluation', 'gradedecimals', 'nattachments', 00052 'latesubmissions', 'maxbytes', 'examplesmode', 'submissionstart', 00053 'submissionend', 'assessmentstart', 'assessmentend')); 00054 00055 // assessment forms definition 00056 $this->add_subplugin_structure('workshopform', $workshop, true); 00057 00058 // grading evaluations data 00059 $this->add_subplugin_structure('workshopeval', $workshop, true); 00060 00061 // example submissions 00062 $examplesubmissions = new backup_nested_element('examplesubmissions'); 00063 $examplesubmission = new backup_nested_element('examplesubmission', array('id'), array( 00064 'timecreated', 'timemodified', 'title', 'content', 'contentformat', 00065 'contenttrust', 'attachment')); 00066 00067 // reference assessment of the example submission 00068 $referenceassessment = new backup_nested_element('referenceassessment', array('id'), array( 00069 'timecreated', 'timemodified', 'grade')); 00070 00071 // dimension grades for the reference assessment (that is how the form is filled) 00072 $this->add_subplugin_structure('workshopform', $referenceassessment, true); 00073 00075 // XML nodes declaration - user data 00077 00078 // assessments of example submissions 00079 $exampleassessments = new backup_nested_element('exampleassessments'); 00080 $exampleassessment = new backup_nested_element('exampleassessment', array('id'), array( 00081 'reviewerid', 'weight', 'timecreated', 'timemodified', 'grade', 00082 'gradinggrade', 'gradinggradeover', 'gradinggradeoverby', 00083 'feedbackauthor', 'feedbackauthorformat', 'feedbackreviewer', 00084 'feedbackreviewerformat')); 00085 00086 // dimension grades for the assessment of example submission (that is assessment forms are filled) 00087 $this->add_subplugin_structure('workshopform', $exampleassessment, true); 00088 00089 // submissions 00090 $submissions = new backup_nested_element('submissions'); 00091 $submission = new backup_nested_element('submission', array('id'), array( 00092 'authorid', 'timecreated', 'timemodified', 'title', 'content', 00093 'contentformat', 'contenttrust', 'attachment', 'grade', 00094 'gradeover', 'gradeoverby', 'feedbackauthor', 00095 'feedbackauthorformat', 'timegraded', 'published', 'late')); 00096 00097 // allocated assessments 00098 $assessments = new backup_nested_element('assessments'); 00099 $assessment = new backup_nested_element('assessment', array('id'), array( 00100 'reviewerid', 'weight', 'timecreated', 'timemodified', 'grade', 00101 'gradinggrade', 'gradinggradeover', 'gradinggradeoverby', 00102 'feedbackauthor', 'feedbackauthorformat', 'feedbackreviewer', 00103 'feedbackreviewerformat')); 00104 00105 // dimension grades for the assessment (that is assessment forms are filled) 00106 $this->add_subplugin_structure('workshopform', $assessment, true); 00107 00108 // aggregations of grading grades in this workshop 00109 $aggregations = new backup_nested_element('aggregations'); 00110 $aggregation = new backup_nested_element('aggregation', array('id'), array( 00111 'userid', 'gradinggrade', 'timegraded')); 00112 00114 // build the tree in the order needed for restore 00116 $workshop->add_child($examplesubmissions); 00117 $examplesubmissions->add_child($examplesubmission); 00118 00119 $examplesubmission->add_child($referenceassessment); 00120 00121 $examplesubmission->add_child($exampleassessments); 00122 $exampleassessments->add_child($exampleassessment); 00123 00124 $workshop->add_child($submissions); 00125 $submissions->add_child($submission); 00126 00127 $submission->add_child($assessments); 00128 $assessments->add_child($assessment); 00129 00130 $workshop->add_child($aggregations); 00131 $aggregations->add_child($aggregation); 00132 00134 // data sources - non-user data 00136 00137 $workshop->set_source_table('workshop', array('id' => backup::VAR_ACTIVITYID)); 00138 00139 $examplesubmission->set_source_sql(" 00140 SELECT * 00141 FROM {workshop_submissions} 00142 WHERE workshopid = ? AND example = 1", 00143 array(backup::VAR_PARENTID)); 00144 00145 $referenceassessment->set_source_sql(" 00146 SELECT * 00147 FROM {workshop_assessments} 00148 WHERE weight = 1 AND submissionid = ?", 00149 array(backup::VAR_PARENTID)); 00150 00152 // data sources - user related data 00154 00155 if ($userinfo) { 00156 00157 $exampleassessment->set_source_sql(" 00158 SELECT * 00159 FROM {workshop_assessments} 00160 WHERE weight = 0 AND submissionid = ?", 00161 array(backup::VAR_PARENTID)); 00162 00163 $submission->set_source_sql(" 00164 SELECT * 00165 FROM {workshop_submissions} 00166 WHERE workshopid = ? AND example = 0", 00167 array(backup::VAR_PARENTID)); // must use SQL here, for the same reason as above 00168 00169 $assessment->set_source_table('workshop_assessments', array('submissionid' => backup::VAR_PARENTID)); 00170 00171 $aggregation->set_source_table('workshop_aggregations', array('workshopid' => backup::VAR_PARENTID)); 00172 } 00173 00175 // id annotations 00177 00178 $exampleassessment->annotate_ids('user', 'reviewerid'); 00179 $submission->annotate_ids('user', 'authorid'); 00180 $submission->annotate_ids('user', 'gradeoverby'); 00181 $assessment->annotate_ids('user', 'reviewerid'); 00182 $assessment->annotate_ids('user', 'gradinggradeoverby'); 00183 $aggregation->annotate_ids('user', 'userid'); 00184 00186 // file annotations 00188 00189 $workshop->annotate_files('mod_workshop', 'intro', null); // no itemid used 00190 $workshop->annotate_files('mod_workshop', 'instructauthors', null); // no itemid used 00191 $workshop->annotate_files('mod_workshop', 'instructreviewers', null); // no itemid used 00192 00193 $examplesubmission->annotate_files('mod_workshop', 'submission_content', 'id'); 00194 $examplesubmission->annotate_files('mod_workshop', 'submission_attachment', 'id'); 00195 00196 $submission->annotate_files('mod_workshop', 'submission_content', 'id'); 00197 $submission->annotate_files('mod_workshop', 'submission_attachment', 'id'); 00198 00199 // return the root element (workshop), wrapped into standard activity structure 00200 return $this->prepare_activity_structure($workshop); 00201 } 00202 }