/mod/workshop/backup/moodle2/backup_workshop_stepslib.php

https://github.com/tmuras/moodle-debian · PHP · 202 lines · 97 code · 43 blank · 62 comment · 2 complexity · 718e69c491a2e05504bd9c76153373e4 MD5 · raw file

  1. <?php
  2. // This file is part of Moodle - http://moodle.org/
  3. //
  4. // Moodle is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // Moodle is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  16. /**
  17. * Defines all the backup steps that will be used by {@link backup_workshop_activity_task}
  18. *
  19. * @package mod
  20. * @subpackage workshop
  21. * @copyright 2010 David Mudrak <david.mudrak@gmail.com>
  22. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23. */
  24. defined('MOODLE_INTERNAL') || die();
  25. /**
  26. * Defines the complete workshop structure for backup, with file and id annotations
  27. *
  28. * @see http://docs.moodle.org/en/Development:Workshop for XML structure diagram
  29. */
  30. class backup_workshop_activity_structure_step extends backup_activity_structure_step {
  31. protected function define_structure() {
  32. // are we including userinfo?
  33. $userinfo = $this->get_setting_value('userinfo');
  34. ////////////////////////////////////////////////////////////////////////
  35. // XML nodes declaration - non-user data
  36. ////////////////////////////////////////////////////////////////////////
  37. // root element describing workshop instance
  38. $workshop = new backup_nested_element('workshop', array('id'), array(
  39. 'name', 'intro', 'introformat', 'instructauthors',
  40. 'instructauthorsformat', 'instructreviewers',
  41. 'instructreviewersformat', 'timemodified', 'phase', 'useexamples',
  42. 'usepeerassessment', 'useselfassessment', 'grade', 'gradinggrade',
  43. 'strategy', 'evaluation', 'gradedecimals', 'nattachments',
  44. 'latesubmissions', 'maxbytes', 'examplesmode', 'submissionstart',
  45. 'submissionend', 'assessmentstart', 'assessmentend'));
  46. // assessment forms definition
  47. $this->add_subplugin_structure('workshopform', $workshop, true);
  48. // grading evaluations data
  49. $this->add_subplugin_structure('workshopeval', $workshop, true);
  50. // example submissions
  51. $examplesubmissions = new backup_nested_element('examplesubmissions');
  52. $examplesubmission = new backup_nested_element('examplesubmission', array('id'), array(
  53. 'timecreated', 'timemodified', 'title', 'content', 'contentformat',
  54. 'contenttrust', 'attachment'));
  55. // reference assessment of the example submission
  56. $referenceassessment = new backup_nested_element('referenceassessment', array('id'), array(
  57. 'timecreated', 'timemodified', 'grade'));
  58. // dimension grades for the reference assessment (that is how the form is filled)
  59. $this->add_subplugin_structure('workshopform', $referenceassessment, true);
  60. ////////////////////////////////////////////////////////////////////////
  61. // XML nodes declaration - user data
  62. ////////////////////////////////////////////////////////////////////////
  63. // assessments of example submissions
  64. $exampleassessments = new backup_nested_element('exampleassessments');
  65. $exampleassessment = new backup_nested_element('exampleassessment', array('id'), array(
  66. 'reviewerid', 'weight', 'timecreated', 'timemodified', 'grade',
  67. 'gradinggrade', 'gradinggradeover', 'gradinggradeoverby',
  68. 'feedbackauthor', 'feedbackauthorformat', 'feedbackreviewer',
  69. 'feedbackreviewerformat'));
  70. // dimension grades for the assessment of example submission (that is assessment forms are filled)
  71. $this->add_subplugin_structure('workshopform', $exampleassessment, true);
  72. // submissions
  73. $submissions = new backup_nested_element('submissions');
  74. $submission = new backup_nested_element('submission', array('id'), array(
  75. 'authorid', 'timecreated', 'timemodified', 'title', 'content',
  76. 'contentformat', 'contenttrust', 'attachment', 'grade',
  77. 'gradeover', 'gradeoverby', 'feedbackauthor',
  78. 'feedbackauthorformat', 'timegraded', 'published', 'late'));
  79. // allocated assessments
  80. $assessments = new backup_nested_element('assessments');
  81. $assessment = new backup_nested_element('assessment', array('id'), array(
  82. 'reviewerid', 'weight', 'timecreated', 'timemodified', 'grade',
  83. 'gradinggrade', 'gradinggradeover', 'gradinggradeoverby',
  84. 'feedbackauthor', 'feedbackauthorformat', 'feedbackreviewer',
  85. 'feedbackreviewerformat'));
  86. // dimension grades for the assessment (that is assessment forms are filled)
  87. $this->add_subplugin_structure('workshopform', $assessment, true);
  88. // aggregations of grading grades in this workshop
  89. $aggregations = new backup_nested_element('aggregations');
  90. $aggregation = new backup_nested_element('aggregation', array('id'), array(
  91. 'userid', 'gradinggrade', 'timegraded'));
  92. ////////////////////////////////////////////////////////////////////////
  93. // build the tree in the order needed for restore
  94. ////////////////////////////////////////////////////////////////////////
  95. $workshop->add_child($examplesubmissions);
  96. $examplesubmissions->add_child($examplesubmission);
  97. $examplesubmission->add_child($referenceassessment);
  98. $examplesubmission->add_child($exampleassessments);
  99. $exampleassessments->add_child($exampleassessment);
  100. $workshop->add_child($submissions);
  101. $submissions->add_child($submission);
  102. $submission->add_child($assessments);
  103. $assessments->add_child($assessment);
  104. $workshop->add_child($aggregations);
  105. $aggregations->add_child($aggregation);
  106. ////////////////////////////////////////////////////////////////////////
  107. // data sources - non-user data
  108. ////////////////////////////////////////////////////////////////////////
  109. $workshop->set_source_table('workshop', array('id' => backup::VAR_ACTIVITYID));
  110. $examplesubmission->set_source_sql("
  111. SELECT *
  112. FROM {workshop_submissions}
  113. WHERE workshopid = ? AND example = 1",
  114. array(backup::VAR_PARENTID));
  115. $referenceassessment->set_source_sql("
  116. SELECT *
  117. FROM {workshop_assessments}
  118. WHERE weight = 1 AND submissionid = ?",
  119. array(backup::VAR_PARENTID));
  120. ////////////////////////////////////////////////////////////////////////
  121. // data sources - user related data
  122. ////////////////////////////////////////////////////////////////////////
  123. if ($userinfo) {
  124. $exampleassessment->set_source_sql("
  125. SELECT *
  126. FROM {workshop_assessments}
  127. WHERE weight = 0 AND submissionid = ?",
  128. array(backup::VAR_PARENTID));
  129. $submission->set_source_sql("
  130. SELECT *
  131. FROM {workshop_submissions}
  132. WHERE workshopid = ? AND example = 0",
  133. array(backup::VAR_PARENTID)); // must use SQL here, for the same reason as above
  134. $assessment->set_source_table('workshop_assessments', array('submissionid' => backup::VAR_PARENTID));
  135. $aggregation->set_source_table('workshop_aggregations', array('workshopid' => backup::VAR_PARENTID));
  136. }
  137. ////////////////////////////////////////////////////////////////////////
  138. // id annotations
  139. ////////////////////////////////////////////////////////////////////////
  140. $exampleassessment->annotate_ids('user', 'reviewerid');
  141. $submission->annotate_ids('user', 'authorid');
  142. $submission->annotate_ids('user', 'gradeoverby');
  143. $assessment->annotate_ids('user', 'reviewerid');
  144. $assessment->annotate_ids('user', 'gradinggradeoverby');
  145. $aggregation->annotate_ids('user', 'userid');
  146. ////////////////////////////////////////////////////////////////////////
  147. // file annotations
  148. ////////////////////////////////////////////////////////////////////////
  149. $workshop->annotate_files('mod_workshop', 'intro', null); // no itemid used
  150. $workshop->annotate_files('mod_workshop', 'instructauthors', null); // no itemid used
  151. $workshop->annotate_files('mod_workshop', 'instructreviewers', null); // no itemid used
  152. $examplesubmission->annotate_files('mod_workshop', 'submission_content', 'id');
  153. $examplesubmission->annotate_files('mod_workshop', 'submission_attachment', 'id');
  154. $submission->annotate_files('mod_workshop', 'submission_content', 'id');
  155. $submission->annotate_files('mod_workshop', 'submission_attachment', 'id');
  156. // return the root element (workshop), wrapped into standard activity structure
  157. return $this->prepare_activity_structure($workshop);
  158. }
  159. }