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  
   3  // This file is part of Moodle - http://moodle.org/
   4  //
   5  // Moodle is free software: you can redistribute it and/or modify
   6  // it under the terms of the GNU General Public License as published by
   7  // the Free Software Foundation, either version 3 of the License, or
   8  // (at your option) any later version.
   9  //
  10  // Moodle is distributed in the hope that it will be useful,
  11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13  // GNU General Public License for more details.
  14  //
  15  // You should have received a copy of the GNU General Public License
  16  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  17  
  18  /**
  19   * Defines backup_theme_plugin class
  20   *
  21   * @package     core_backup
  22   * @subpackage  moodle2
  23   * @category    backup
  24   * @copyright   2011 onwards The Open University
  25   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  26   */
  27  
  28  defined('MOODLE_INTERNAL') || die();
  29  
  30  /**
  31   * Base class for theme backup plugins.
  32   *
  33   * NOTE: When you back up a course, it runs backup for ALL themes - not just
  34   * the currently selected one.
  35   *
  36   * That means that if, for example, a course was once in theme A, and theme A
  37   * had some data settings, but it is then changed to theme B, the data settings
  38   * will still be included in the backup and restore. With the restored course,
  39   * if you ever change it back to theme A, the settings will be ready.
  40   *
  41   * It also means that other themes which are not the one set up for the course,
  42   * but might be seen by some users (eg user themes, session themes, mnet themes)
  43   * can store data.
  44   *
  45   * If this behaviour is not desired for a particular theme's data, the subclass
  46   * can call is_current_theme('myname') to check.
  47   */
  48  abstract class backup_theme_plugin extends backup_plugin {
  49  
  50      /**
  51       * @var string Current theme for course (may not be the same as plugin).
  52       */
  53      protected $coursetheme;
  54  
  55      /**
  56       * @param string $plugintype Plugin type (always 'theme')
  57       * @param string $pluginname Plugin name (name of theme)
  58       * @param backup_optigroup $optigroup Group that will contain this data
  59       * @param backup_course_structure_step $step Backup step that this is part of
  60       */
  61      public function __construct($plugintype, $pluginname, $optigroup, $step) {
  62  
  63          parent::__construct($plugintype, $pluginname, $optigroup, $step);
  64  
  65          $this->coursetheme = backup_plan_dbops::get_theme_from_courseid(
  66                      $this->task->get_courseid());
  67  
  68      }
  69  
  70      /**
  71       * Return condition for whether this theme should be backed up (= if it
  72       * is the same theme as the one used in this course). This condition has
  73       * the theme used in the course. It will be compared against the name
  74       * of the theme, by use of third parameter in get_plugin_element; in
  75       * subclass, you should do:
  76       * $plugin = $this->get_plugin_element(null, $this->get_theme_condition(), 'mytheme');
  77       */
  78      protected function get_theme_condition() {
  79          return array('sqlparam' => $this->coursetheme);
  80      }
  81  }