Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.

Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403] [Versions 401 and 403] [Versions 402 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   * Renderers for outputting parts of the question bank.
  19   *
  20   * @package    core_question
  21   * @copyright  2011 The Open University
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  
  26  defined('MOODLE_INTERNAL') || die();
  27  
  28  
  29  /**
  30   * This renderer outputs parts of the question bank.
  31   *
  32   * @copyright  2011 The Open University
  33   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  34   */
  35  class core_question_bank_renderer extends plugin_renderer_base {
  36  
  37      /**
  38       * Display additional navigation if needed.
  39       *
  40       * @param string $active
  41       * @return string
  42       */
  43      public function extra_horizontal_navigation($active = null) {
  44          // Horizontal navigation for question bank.
  45          if ($questionnode = $this->page->settingsnav->find("questionbank", \navigation_node::TYPE_CONTAINER)) {
  46              if ($children = $questionnode->children) {
  47                  $tabs = [];
  48                  foreach ($children as $key => $node) {
  49                      $tabs[] = new \tabobject($node->key, $node->action, $node->text);
  50                  }
  51                  if (empty($active) && $questionnode->find_active_node()) {
  52                      $active = $questionnode->find_active_node()->key;
  53                  }
  54                  return \html_writer::div(print_tabs([$tabs], $active, null, null, true),
  55                          'questionbank-navigation');
  56              }
  57          }
  58          return '';
  59      }
  60  
  61      /**
  62       * Output the icon for a question type.
  63       *
  64       * @param string $qtype the question type.
  65       * @return string HTML fragment.
  66       */
  67      public function qtype_icon($qtype) {
  68          $qtype = question_bank::get_qtype($qtype, false);
  69          $namestr = $qtype->local_name();
  70  
  71          return $this->image_icon('icon', $namestr, $qtype->plugin_name(), array('title' => $namestr));
  72      }
  73  
  74      /**
  75       * Render the column headers.
  76       *
  77       * @param array $qbankheaderdata
  78       * @return bool|string
  79       */
  80      public function render_column_header($qbankheaderdata) {
  81          return $this->render_from_template('core_question/column_header', $qbankheaderdata);
  82      }
  83  
  84      /**
  85       * Render the column sort elements.
  86       *
  87       * @param array $sortdata
  88       * @return bool|string
  89       */
  90      public function render_column_sort($sortdata) {
  91          return $this->render_from_template('core_question/column_sort', $sortdata);
  92      }
  93  
  94      /**
  95       * Render a qbank_chooser.
  96       *
  97       * @param renderable $qbankchooser The chooser.
  98       * @return string
  99       * @deprecated since Moodle 4.0
 100       * @see \qbank_editquestion\output\renderer
 101       * @todo Final deprecation on Moodle 4.4 MDL-72438
 102       */
 103      public function render_qbank_chooser(renderable $qbankchooser) {
 104          debugging('Function render_qbank_chooser is deprecated,
 105           please use qbank_editquestion renderer instead.', DEBUG_DEVELOPER);
 106          return $this->render_from_template('core_question/qbank_chooser', $qbankchooser->export_for_template($this));
 107      }
 108  
 109      /**
 110       * Render category condition.
 111       *
 112       * @param array $displaydata
 113       * @return bool|string
 114       * @deprecated since Moodle 4.3
 115       * @todo Final deprecation on Moodle 4.7 MDL-78090
 116       */
 117      public function render_category_condition($displaydata) {
 118          debugging(
 119              'Function render_category_condition() has been deprecated and moved to qbank_managecategories plugin, ' .
 120                  'Please use qbank_managecategories\output\renderer::render_category_condition() instead.',
 121              DEBUG_DEVELOPER
 122          );
 123          return $this->render_from_template('qbank_managecategories/category_condition', $displaydata);
 124      }
 125  
 126      /**
 127       * Render category condition advanced.
 128       *
 129       * @param array $displaydata
 130       * @return bool|string
 131       * @deprecated since Moodle 4.3
 132       * @todo Final deprecation on Moodle 4.7 MDL-78090
 133       */
 134      public function render_category_condition_advanced($displaydata) {
 135          debugging(
 136              'Function render_category_condition_advanced() has been deprecated',
 137              DEBUG_DEVELOPER
 138          );
 139          // The template category_condition_advanced should also be deleted with this function.
 140          return $this->render_from_template('qbank_managecategories/category_condition_advanced', $displaydata);
 141      }
 142  
 143      /**
 144       * Render hidden condition advanced.
 145       *
 146       * @param array $displaydata
 147       * @return bool|string
 148       * @see qbank_deletequestion\output\renderer
 149       * @deprecated since Moodle 4.3
 150       * @todo Final deprecation on Moodle 4.7 MDL-78090
 151       */
 152      public function render_hidden_condition_advanced($displaydata) {
 153          debugging(
 154              'Function render_hidden_condition_advanced() has been deprecated and moved to qbank_deletequestion plugin, ' .
 155                  'Please use qbank_deletequestion\output\renderer::render_hidden_condition_advanced() instead.',
 156              DEBUG_DEVELOPER
 157          );
 158          return $this->render_from_template('qbank_deletequestion/hidden_condition_advanced', $displaydata);
 159      }
 160  
 161      /**
 162       * Render question pagination.
 163       *
 164       * @param array $displaydata
 165       * @return bool|string
 166       */
 167      public function render_question_pagination($displaydata) {
 168          return $this->render_from_template('core_question/question_pagination', $displaydata);
 169      }
 170  
 171      /**
 172       * Render the showtext option.
 173       *
 174       * It's not a checkbox any more! [Name your API after the purpose, not the implementation!]
 175       *
 176       * @param array $displaydata
 177       * @return string
 178       */
 179      public function render_showtext_checkbox($displaydata) {
 180          return $this->render_from_template('core_question/showtext_option',
 181                  ['selected' . $displaydata['checked'] => true]);
 182      }
 183  
 184      /**
 185       * Render bulk actions ui.
 186       *
 187       * @param array $displaydata
 188       * @return bool|string
 189       */
 190      public function render_bulk_actions_ui($displaydata) {
 191          return $this->render_from_template('core_question/bulk_actions_ui', $displaydata);
 192      }
 193  
 194      /**
 195       * Build the HTML for the question chooser javascript popup.
 196       *
 197       * @param array $real A set of real question types
 198       * @param array $fake A set of fake question types
 199       * @param object $course The course that will be displayed
 200       * @param array $hiddenparams Any hidden parameters to add to the form
 201       * @return string The composed HTML for the questionbank chooser
 202       * @todo Final deprecation on Moodle 4.4 MDL-72438
 203       */
 204      public function qbank_chooser($real, $fake, $course, $hiddenparams) {
 205          debugging('Method core_question_bank_renderer::qbank_chooser() is deprecated, ' .
 206                  'see core_question_bank_renderer::render_qbank_chooser().', DEBUG_DEVELOPER);
 207          return '';
 208      }
 209  
 210      /**
 211       * Build the HTML for a specified set of question types.
 212       *
 213       * @param array $types A set of question types as used by the qbank_chooser_module function
 214       * @return string The composed HTML for the module
 215       * @todo Final deprecation on Moodle 4.4 MDL-72438
 216       */
 217      protected function qbank_chooser_types($types) {
 218          debugging('Method core_question_bank_renderer::qbank_chooser_types() is deprecated, ' .
 219                  'see core_question_bank_renderer::render_qbank_chooser().', DEBUG_DEVELOPER);
 220          return '';
 221      }
 222  
 223      /**
 224       * Return the HTML for the specified question type, adding any required classes.
 225       *
 226       * @param object $qtype An object containing the title, and link. An icon, and help text may optionally be specified.
 227       * If the module contains subtypes in the types option, then these will also be displayed.
 228       * @param array $classes Additional classes to add to the encompassing div element
 229       * @return string The composed HTML for the question type
 230       * @todo Final deprecation on Moodle 4.4 MDL-72438
 231       */
 232      protected function qbank_chooser_qtype($qtype, $classes = array()) {
 233          debugging('Method core_question_bank_renderer::qbank_chooser_qtype() is deprecated, ' .
 234                  'see core_question_bank_renderer::render_qbank_chooser().', DEBUG_DEVELOPER);
 235          return '';
 236      }
 237  
 238      /**
 239       * Return the title for the question bank chooser.
 240       *
 241       * @param string $title The language string identifier
 242       * @param string $identifier The component identifier
 243       * @return string The composed HTML for the title
 244       * @todo Final deprecation on Moodle 4.4 MDL-72438
 245       */
 246      protected function qbank_chooser_title($title, $identifier = null) {
 247          debugging('Method core_question_bank_renderer::qbank_chooser_title() is deprecated, ' .
 248                  'see core_question_bank_renderer::render_qbank_chooser().', DEBUG_DEVELOPER);
 249          return '';
 250      }
 251  
 252  }