Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 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 39 and 400] [Versions 39 and 401] [Versions 39 and 402] [Versions 39 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 the form for editing question categories.
  19   *
  20   * @package    moodlecore
  21   * @subpackage questionbank
  22   * @copyright  2007 Jamie Pratt me@jamiep.org
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  
  27  defined('MOODLE_INTERNAL') || die();
  28  
  29  require_once($CFG->libdir.'/formslib.php');
  30  
  31  
  32  /**
  33   * Form for editing qusetions categories (name, description, etc.)
  34   *
  35   * @copyright  2007 Jamie Pratt me@jamiep.org
  36   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  37   */
  38  class question_category_edit_form extends moodleform {
  39  
  40      protected function definition() {
  41          $mform    = $this->_form;
  42  
  43          $contexts   = $this->_customdata['contexts'];
  44          $currentcat   = $this->_customdata['currentcat'];
  45  
  46          $mform->addElement('header', 'categoryheader', get_string('addcategory', 'question'));
  47  
  48          $mform->addElement('questioncategory', 'parent', get_string('parentcategory', 'question'),
  49                  array('contexts' => $contexts, 'top' => true, 'currentcat' => $currentcat, 'nochildrenof' => $currentcat));
  50          $mform->setType('parent', PARAM_SEQUENCE);
  51          if (question_is_only_child_of_top_category_in_context($currentcat)) {
  52              $mform->hardFreeze('parent');
  53          }
  54          $mform->addHelpButton('parent', 'parentcategory', 'question');
  55  
  56          $mform->addElement('text', 'name', get_string('name'),'maxlength="254" size="50"');
  57          $mform->setDefault('name', '');
  58          $mform->addRule('name', get_string('categorynamecantbeblank', 'question'), 'required', null, 'client');
  59          $mform->setType('name', PARAM_TEXT);
  60  
  61          $mform->addElement('editor', 'info', get_string('categoryinfo', 'question'),
  62                  array('rows' => 10), array('noclean' => 1));
  63          $mform->setDefault('info', '');
  64          $mform->setType('info', PARAM_RAW);
  65  
  66          $mform->addElement('text', 'idnumber', get_string('idnumber', 'question'), 'maxlength="100"  size="10"');
  67          $mform->addHelpButton('idnumber', 'idnumber', 'question');
  68          $mform->setType('idnumber', PARAM_RAW);
  69  
  70          $this->add_action_buttons(false, get_string('addcategory', 'question'));
  71  
  72          $mform->addElement('hidden', 'id', 0);
  73          $mform->setType('id', PARAM_INT);
  74      }
  75  
  76      public function set_data($current) {
  77          if (is_object($current)) {
  78              $current = (array) $current;
  79          }
  80          if (!empty($current['info'])) {
  81              $current['info'] = array('text' => $current['info'],
  82                      'infoformat' => $current['infoformat']);
  83          } else {
  84              $current['info'] = array('text' => '', 'infoformat' => FORMAT_HTML);
  85          }
  86          parent::set_data($current);
  87      }
  88  
  89      /**
  90       * Validation.
  91       *
  92       * @param array $data
  93       * @param array $files
  94       * @return array the errors that were found
  95       */
  96      public function validation($data, $files) {
  97          global $DB;
  98  
  99          $errors = parent::validation($data, $files);
 100  
 101          // Add field validation check for duplicate idnumber.
 102          list($parentid, $contextid) = explode(',', $data['parent']);
 103          if (((string) $data['idnumber'] !== '') && !empty($contextid)) {
 104              $conditions = 'contextid = ? AND idnumber = ?';
 105              $params = [$contextid, $data['idnumber']];
 106              if (!empty($data['id'])) {
 107                  $conditions .= ' AND id <> ?';
 108                  $params[] = $data['id'];
 109              }
 110              if ($DB->record_exists_select('question_categories', $conditions, $params)) {
 111                  $errors['idnumber'] = get_string('idnumbertaken', 'error');
 112              }
 113          }
 114  
 115          return $errors;
 116      }
 117  }