Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]

   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 classes used for plugin info.
  19   *
  20   * @package    core
  21   * @copyright  2011 David Mudrak <david@moodle.com>
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  namespace core\plugininfo;
  25  
  26  use moodle_url, core_plugin_manager;
  27  
  28  defined('MOODLE_INTERNAL') || die();
  29  
  30  /**
  31   * Class for question behaviours.
  32   */
  33  class qbehaviour extends base {
  34      /**
  35       * Finds all enabled plugins, the result may include missing plugins.
  36       * @return array|null of enabled plugins $pluginname=>$pluginname, null means unknown
  37       */
  38      public static function get_enabled_plugins() {
  39          $plugins = core_plugin_manager::instance()->get_installed_plugins('qbehaviour');
  40          if (!$plugins) {
  41              return array();
  42          }
  43          if ($disabled = get_config('question', 'disabledbehaviours')) {
  44              $disabled = explode(',', $disabled);
  45          } else {
  46              $disabled = array();
  47          }
  48  
  49          $enabled = array();
  50          foreach ($plugins as $plugin => $version) {
  51              if (in_array($plugin, $disabled)) {
  52                  continue;
  53              }
  54              $enabled[$plugin] = $plugin;
  55          }
  56  
  57          return $enabled;
  58      }
  59  
  60      public function is_uninstall_allowed() {
  61          global $DB;
  62  
  63          if ($this->name === 'missing') {
  64              // qbehaviour_missing is used by the system. It cannot be uninstalled.
  65              return false;
  66          }
  67  
  68          return !$DB->record_exists('question_attempts', array('behaviour' => $this->name));
  69      }
  70  
  71      /**
  72       * Pre-uninstall hook.
  73       *
  74       * This is intended for disabling of plugin, some DB table purging, etc.
  75       *
  76       * NOTE: to be called from uninstall_plugin() only.
  77       * @private
  78       */
  79      public function uninstall_cleanup() {
  80          if ($disabledbehaviours = get_config('question', 'disabledbehaviours')) {
  81              $disabledbehaviours = explode(',', $disabledbehaviours);
  82              $disabledbehaviours = array_unique($disabledbehaviours);
  83          } else {
  84              $disabledbehaviours = array();
  85          }
  86          if (($key = array_search($this->name, $disabledbehaviours)) !== false) {
  87              unset($disabledbehaviours[$key]);
  88              set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
  89          }
  90  
  91          if ($behaviourorder = get_config('question', 'behavioursortorder')) {
  92              $behaviourorder = explode(',', $behaviourorder);
  93              $behaviourorder = array_unique($behaviourorder);
  94          } else {
  95              $behaviourorder = array();
  96          }
  97          if (($key = array_search($this->name, $behaviourorder)) !== false) {
  98              unset($behaviourorder[$key]);
  99              set_config('behavioursortorder', implode(',', $behaviourorder), 'question');
 100          }
 101  
 102          parent::uninstall_cleanup();
 103      }
 104  
 105      /**
 106       * Return URL used for management of plugins of this type.
 107       * @return moodle_url
 108       */
 109      public static function get_manage_url() {
 110          return new moodle_url('/admin/qbehaviours.php');
 111      }
 112  }
 113