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   * Renderer.
  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  defined('MOODLE_INTERNAL') || die();
  26  
  27  /**
  28   * Class containing the renderer functions for displaying file types.
  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_renderer extends plugin_renderer_base {
  35  
  36      /**
  37       * Renderer for displaying the file type edit table.
  38       *
  39       * @param array $filetypes An array of file type objects (from get_mimetypes_array)
  40       * @param array $deleted An array of deleted file types
  41       * @param bool $restricted If true, cannot be edited because set in config.php.
  42       * @return string HTML code
  43       */
  44      public function edit_table(array $filetypes, array $deleted, $restricted) {
  45          // Get combined array of all types, with deleted marker.
  46          $combined = array_merge($filetypes, $deleted);
  47          foreach ($deleted as $ext => $value) {
  48              $combined[$ext]['deleted'] = true;
  49          }
  50          ksort($combined);
  51  
  52          $out = $this->heading(get_string('pluginname', 'tool_filetypes'));
  53          if ($restricted) {
  54              $out .= html_writer::div(
  55                      html_writer::div(get_string('configoverride', 'admin'), 'alert alert-info'),
  56                      '', array('id' => 'adminsettings'));
  57          }
  58          if (count($combined) > 1) {
  59              // Display the file type table if any file types exist (other than 'xxx').
  60              $table = new html_table();
  61              $headings = new html_table_row();
  62              $headings->cells = array();
  63              $headings->cells[] = new html_table_cell(get_string('extension', 'tool_filetypes'));
  64              if (!$restricted) {
  65                  $headings->cells[] =
  66                          new html_table_cell(html_writer::span(get_string('edit'), 'accesshide'));
  67              }
  68              $headings->cells[] = new html_table_cell(get_string('source', 'tool_filetypes'));
  69              $headings->cells[] = new html_table_cell(get_string('mimetype', 'tool_filetypes'));
  70              $headings->cells[] = new html_table_cell(get_string('groups', 'tool_filetypes'));
  71              $headings->cells[] = new html_table_cell(get_string('displaydescription', 'tool_filetypes'));
  72              foreach ($headings->cells as $cell) {
  73                  $cell->header = true;
  74              }
  75              $table->data = array($headings);
  76              foreach ($combined as $extension => $filetype) {
  77                  if ($extension === 'xxx') {
  78                      continue;
  79                  }
  80                  $row = new html_table_row();
  81                  $row->cells = array();
  82  
  83                  // First cell has icon and extension.
  84                  $icon = $this->pix_icon('f/' . $filetype['icon'], '');
  85                  $iconcell = new html_table_cell($icon . ' ' . html_writer::span(s($extension)));
  86                  $iconcell->attributes['class'] = 'icon-size-5';
  87                  $row->cells[] = $iconcell;
  88  
  89                  // Reset URL and button if needed.
  90                  $reverturl = new \moodle_url('/admin/tool/filetypes/revert.php',
  91                          array('extension' => $extension));
  92                  $revertbutton = html_writer::link($reverturl, $this->pix_icon('t/restore',
  93                          get_string('revert', 'tool_filetypes', s($extension))));
  94                  if ($restricted) {
  95                      $revertbutton = '';
  96                  }
  97  
  98                  // Rest is different for deleted items.
  99                  if (!empty($filetype['deleted'])) {
 100                      // Show deleted standard types differently.
 101                      if (!$restricted) {
 102                          $row->cells[] = new html_table_cell('');
 103                      }
 104                      $source = new html_table_cell(get_string('source_deleted', 'tool_filetypes') .
 105                              ' ' . $revertbutton);
 106                      $source->attributes = array('class' => 'nonstandard');
 107                      $row->cells[] = $source;
 108  
 109                      // Other cells are blank.
 110                      $row->cells[] = new html_table_cell('');
 111                      $row->cells[] = new html_table_cell('');
 112                      $row->cells[] = new html_table_cell('');
 113                      $row->attributes = array('class' => 'deleted');
 114                  } else {
 115                      if (!$restricted) {
 116                          // Edit icons. For accessibility, the name of these links should
 117                          // be different for each row, so we have to include the extension.
 118                          $editurl = new \moodle_url('/admin/tool/filetypes/edit.php',
 119                                  array('oldextension' => $extension));
 120                          $editbutton = html_writer::link($editurl, $this->pix_icon('t/edit',
 121                                  get_string('edita', 'moodle', s($extension))));
 122                          $deleteurl = new \moodle_url('/admin/tool/filetypes/delete.php',
 123                                  array('extension' => $extension));
 124                          $deletebutton = html_writer::link($deleteurl, $this->pix_icon('t/delete',
 125                                  get_string('deletea', 'tool_filetypes', s($extension))));
 126                          $row->cells[] = new html_table_cell($editbutton . '&nbsp;' . $deletebutton);
 127                      }
 128  
 129                      // Source.
 130                      $sourcestring = 'source_';
 131                      if (!empty($filetype['custom'])) {
 132                          $sourcestring .= 'custom';
 133                      } else if (!empty($filetype['modified'])) {
 134                          $sourcestring .= 'modified';
 135                      } else {
 136                          $sourcestring .= 'standard';
 137                      }
 138                      $source = new html_table_cell(get_string($sourcestring, 'tool_filetypes') .
 139                              ($sourcestring === 'source_modified' ? ' ' . $revertbutton : ''));
 140                      if ($sourcestring !== 'source_standard') {
 141                          $source->attributes = array('class' => 'nonstandard');
 142                      }
 143                      $row->cells[] = $source;
 144  
 145                      // MIME type.
 146                      $mimetype = html_writer::div(s($filetype['type']), 'mimetype');
 147                      if (!empty($filetype['defaulticon'])) {
 148                          // Include the 'default for MIME type' info in the MIME type cell.
 149                          $mimetype .= html_writer::div(html_writer::tag('i',
 150                                  get_string('defaulticon', 'tool_filetypes')));
 151                      }
 152                      $row->cells[] = new html_table_cell($mimetype);
 153  
 154                      // Groups.
 155                      $groups = !empty($filetype['groups']) ? implode(', ', $filetype['groups']) : '';
 156                      $row->cells[] = new html_table_cell(s($groups));
 157  
 158                      // Description.
 159                      $description = get_mimetype_description(array('filename' => 'a.' . $extension));
 160                      // Don't show the description if it's just a copy of the MIME type,
 161                      // it makes the table ugly with the long duplicate text; leave blank instead.
 162                      if ($description === $filetype['type']) {
 163                          $description = '';
 164                      }
 165                      $row->cells[] = new html_table_cell($description);
 166                  }
 167  
 168                  $table->data[] = $row;
 169              }
 170              $out .= html_writer::table($table);
 171          } else {
 172              $out .= html_writer::tag('div', get_string('emptylist', 'tool_filetypes'));
 173          }
 174          // Displaying the 'Add' button.
 175          if (!$restricted) {
 176              $out .= $this->single_button(new moodle_url('/admin/tool/filetypes/edit.php',
 177                      array('name' => 'add')), get_string('addfiletypes', 'tool_filetypes'), 'get');
 178          }
 179          return $out;
 180      }
 181  }