Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
   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   * Customised file types editing form.
  19   *
  20   * @package tool_filetypes
  21   * @copyright 2014 The Open University
  22   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  require_once($CFG->dirroot . '/lib/formslib.php');
  26  
  27  /**
  28   * Form for adding a new custom file type or updating an existing custom file type.
  29   *
  30   * @package tool_filetypes
  31   * @copyright 2014 The Open University
  32   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  33   */
  34  class tool_filetypes_form extends moodleform {
  35  
  36      public function definition() {
  37          global $CFG;
  38          $mform = $this->_form;
  39          $oldextension = $this->_customdata['oldextension'];
  40  
  41          $mform->addElement('text', 'extension', get_string('extension', 'tool_filetypes'));
  42          $mform->setType('extension', PARAM_ALPHANUMEXT);
  43          $mform->addRule('extension', null, 'required', null, 'client');
  44          $mform->addHelpButton('extension', 'extension', 'tool_filetypes');
  45  
  46          $mform->addElement('text', 'mimetype',  get_string('mimetype', 'tool_filetypes'));
  47          $mform->setType('mimetype', PARAM_RAW);
  48          $mform->addRule('mimetype', null, 'required', null, 'client');
  49          $mform->addHelpButton('mimetype', 'mimetype', 'tool_filetypes');
  50  
  51          $fileicons = \tool_filetypes\utils::get_file_icons();
  52          $mform->addElement('select', 'icon',
  53                  get_string('icon', 'tool_filetypes'), $fileicons);
  54          $mform->addHelpButton('icon', 'icon', 'tool_filetypes');
  55  
  56          $mform->addElement('text', 'groups',  get_string('groups', 'tool_filetypes'));
  57          $mform->setType('groups', PARAM_RAW);
  58          $mform->addHelpButton('groups', 'groups', 'tool_filetypes');
  59  
  60          $mform->addElement('select', 'descriptiontype', get_string('descriptiontype', 'tool_filetypes'),
  61                  array('' => get_string('descriptiontype_default', 'tool_filetypes'),
  62                  'custom' => get_string('descriptiontype_custom', 'tool_filetypes'),
  63                  'lang' => get_string('descriptiontype_lang', 'tool_filetypes')));
  64  
  65          $mform->addElement('text', 'description',  get_string('description', 'tool_filetypes'));
  66          $mform->setType('description', PARAM_TEXT);
  67          $mform->addHelpButton('description', 'description', 'tool_filetypes');
  68          $mform->hideIf('description', 'descriptiontype', 'ne', 'custom');
  69  
  70          $mform->addElement('text', 'corestring',  get_string('corestring', 'tool_filetypes'));
  71          $mform->setType('corestring', PARAM_ALPHANUMEXT);
  72          $mform->addHelpButton('corestring', 'corestring', 'tool_filetypes');
  73          $mform->hideIf('corestring', 'descriptiontype', 'ne', 'lang');
  74  
  75          $mform->addElement('checkbox', 'defaulticon',  get_string('defaulticon', 'tool_filetypes'));
  76          $mform->addHelpButton('defaulticon', 'defaulticon', 'tool_filetypes');
  77  
  78          $mform->addElement('hidden', 'oldextension', $oldextension);
  79          $mform->setType('oldextension', PARAM_RAW);
  80          $this->add_action_buttons(true, get_string('savechanges'));
  81      }
  82  
  83      public function set_data($data) {
  84          // Set up the description type.
  85          if (!empty($data['corestring'])) {
  86              $data['descriptiontype'] = 'lang';
  87          } else if (!empty($data['description'])) {
  88              $data['descriptiontype'] = 'custom';
  89          } else {
  90              $data['descriptiontype'] = '';
  91          }
  92  
  93          // Call parent.
  94          parent::set_data($data);
  95      }
  96  
  97      public function get_data() {
  98          $data = parent::get_data();
  99  
 100          // Update the data to handle the descriptiontype dropdown. (The type
 101          // is not explicitly stored, we just set or unset relevant fields.)
 102          if ($data) {
 103              switch ($data->descriptiontype) {
 104                  case 'lang' :
 105                      unset($data->description);
 106                      break;
 107                  case 'custom' :
 108                      unset($data->corestring);
 109                      break;
 110                  default:
 111                      unset($data->description);
 112                      unset($data->corestring);
 113                      break;
 114              }
 115              unset($data->descriptiontype);
 116          }
 117          return $data;
 118      }
 119  
 120      public function validation($data, $files) {
 121          $errors = parent::validation($data, $files);
 122  
 123          // Check the extension isn't already in use.
 124          $oldextension = $data['oldextension'];
 125          $extension = trim($data['extension']);
 126          if (\tool_filetypes\utils::is_extension_invalid($extension, $oldextension)) {
 127              $errors['extension'] = get_string('error_extension', 'tool_filetypes', $extension);
 128          }
 129  
 130          // Check the 'default icon' setting doesn't conflict with an existing one.
 131          if (!empty($data['defaulticon']) && !\tool_filetypes\utils::is_defaulticon_allowed(
 132                  $data['mimetype'], $oldextension)) {
 133              $errors['defaulticon'] = get_string('error_defaulticon', 'tool_filetypes', $extension);
 134          }
 135  
 136          // If you choose 'lang' or 'custom' descriptiontype, you must fill something in the field.
 137          switch ($data['descriptiontype']) {
 138              case 'lang' :
 139                  if (!trim($data['corestring'])) {
 140                      $errors['corestring'] = get_string('required');
 141                  }
 142                  break;
 143              case 'custom' :
 144                  if (!trim($data['description'])) {
 145                      $errors['description'] = get_string('required');
 146                  }
 147                  break;
 148          }
 149  
 150          return $errors;
 151      }
 152  }