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  defined('MOODLE_INTERNAL') || die();
  18  
  19  /**
  20   * Plugin for managing files embedded in the text editor
  21   *
  22   * @package   tinymce_managefiles
  23   * @copyright 2013 Marina Glancy
  24   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  25   */
  26  class tinymce_managefiles extends editor_tinymce_plugin {
  27      /** @var array list of buttons defined by this plugin */
  28      protected $buttons = array('managefiles');
  29  
  30      /**
  31       * Adjusts TinyMCE init parameters for tinymce_managefiles
  32       *
  33       * Adds file area restrictions parameters and actual 'managefiles' button
  34       *
  35       * @param array $params TinyMCE init parameters array
  36       * @param context $context Context where editor is being shown
  37       * @param array $options Options for this editor
  38       */
  39      protected function update_init_params(array &$params, context $context,
  40              array $options = null) {
  41          global $USER;
  42  
  43          if (!isloggedin() or isguestuser()) {
  44              // Must be a real user to manage any files.
  45              return;
  46          }
  47          if (!isset($options['maxfiles']) or $options['maxfiles'] == 0) {
  48              // No files allowed - easy, do not load anything.
  49              return;
  50          }
  51  
  52          // Add parameters for filemanager
  53          $params['managefiles'] = array('usercontext' => context_user::instance($USER->id)->id);
  54          foreach (array('itemid', 'context', 'areamaxbytes', 'maxbytes', 'subdirs', 'return_types') as $key) {
  55              if (isset($options[$key])) {
  56                  if ($key === 'context' && is_object($options[$key])) {
  57                      // Just context id is enough
  58                      $params['managefiles'][$key] = $options[$key]->id;
  59                  } else {
  60                      $params['managefiles'][$key] = $options[$key];
  61                  }
  62              }
  63          }
  64  
  65          if ($row = $this->find_button($params, 'moodlemedia')) {
  66              // Add button after 'moodlemedia' button.
  67              $this->add_button_after($params, $row, 'managefiles', 'moodlemedia');
  68          } else if ($row = $this->find_button($params, 'image')) {
  69              // If 'moodlemedia' is not found add after 'image'.
  70              $this->add_button_after($params, $row, 'managefiles', 'image');
  71          } else {
  72              // OTherwise add button in the end of the last row.
  73              $this->add_button_after($params, $this->count_button_rows($params), 'managefiles');
  74          }
  75  
  76          // Add JS file, which uses default name.
  77          $this->add_js_plugin($params);
  78      }
  79  
  80      protected function get_sort_order() {
  81          return 310;
  82      }
  83  }