Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
   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  /**
  18   * Defines backup_qtype_extrafields_plugin class
  19   *
  20   * @package    core_backup
  21   * @copyright  2012 Oleg Sychev, Volgograd State Technical University
  22   * @author     Valeriy Streltsov <vostreltsov@gmail.com>
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  defined('MOODLE_INTERNAL') || die();
  27  
  28  global $CFG;
  29  require_once($CFG->dirroot . '/question/engine/bank.php');
  30  
  31  /**
  32   * Class extending backup_qtype_plugin in order to use extra fields method
  33   *
  34   * See qtype_shortanswer for an example
  35   *
  36   * @copyright  2012 Oleg Sychev, Volgograd State Technical University
  37   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  38   */
  39  class backup_qtype_extrafields_plugin extends backup_qtype_plugin {
  40  
  41      /**
  42       * Returns the qtype information to attach to question element.
  43       */
  44      protected function define_question_plugin_structure() {
  45          $qtypeobj = question_bank::get_qtype($this->pluginname);
  46  
  47          // Define the virtual plugin element with the condition to fulfill.
  48          $plugin = $this->get_plugin_element(null, '../../qtype', $qtypeobj->name());
  49  
  50          // Create one standard named plugin element (the visible container).
  51          $pluginwrapper = new backup_nested_element($this->get_recommended_name());
  52  
  53          // Connect the visible container ASAP.
  54          $plugin->add_child($pluginwrapper);
  55  
  56          // This qtype uses standard question_answers, add them here
  57          // to the tree before any other information that will use them.
  58          $this->add_question_question_answers($pluginwrapper);
  59          $answers = $pluginwrapper->get_child('answers');
  60          $answer = $answers->get_child('answer');
  61  
  62          // Extra question fields.
  63          $extraquestionfields = $qtypeobj->extra_question_fields();
  64          if (!empty($extraquestionfields)) {
  65              $tablename = array_shift($extraquestionfields);
  66              $child = new backup_nested_element($qtypeobj->name(), array('id'), $extraquestionfields);
  67              $pluginwrapper->add_child($child);
  68              $child->set_source_table($tablename, array($qtypeobj->questionid_column_name() => backup::VAR_PARENTID));
  69          }
  70  
  71          // Extra answer fields.
  72          $extraanswerfields = $qtypeobj->extra_answer_fields();
  73          if (!empty($extraanswerfields)) {
  74              $tablename = array_shift($extraanswerfields);
  75              $child = new backup_nested_element('extraanswerdata', array('id'), $extraanswerfields);
  76              $answer->add_child($child);
  77              $child->set_source_table($tablename, array('answerid' => backup::VAR_PARENTID));
  78          }
  79  
  80          // Don't need to annotate ids nor files.
  81          return $plugin;
  82      }
  83  }