<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Renderer.
*
* @package tool_filetypes
* @copyright 2014 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Class containing the renderer functions for displaying file types.
*
* @package tool_filetypes
* @copyright 2014 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_filetypes_renderer extends plugin_renderer_base {
/**
* Renderer for displaying the file type edit table.
*
* @param array $filetypes An array of file type objects (from get_mimetypes_array)
* @param array $deleted An array of deleted file types
* @param bool $restricted If true, cannot be edited because set in config.php.
* @return string HTML code
*/
public function edit_table(array $filetypes, array $deleted, $restricted) {
// Get combined array of all types, with deleted marker.
$combined = array_merge($filetypes, $deleted);
foreach ($deleted as $ext => $value) {
$combined[$ext]['deleted'] = true;
}
ksort($combined);
$out = $this->heading(get_string('pluginname', 'tool_filetypes'));
if ($restricted) {
$out .= html_writer::div(
html_writer::div(get_string('configoverride', 'admin'), 'alert alert-info'),
'', array('id' => 'adminsettings'));
}
if (count($combined) > 1) {
// Display the file type table if any file types exist (other than 'xxx').
$table = new html_table();
$headings = new html_table_row();
$headings->cells = array();
$headings->cells[] = new html_table_cell(get_string('extension', 'tool_filetypes'));
if (!$restricted) {
$headings->cells[] =
new html_table_cell(html_writer::span(get_string('edit'), 'accesshide'));
}
$headings->cells[] = new html_table_cell(get_string('source', 'tool_filetypes'));
$headings->cells[] = new html_table_cell(get_string('mimetype', 'tool_filetypes'));
$headings->cells[] = new html_table_cell(get_string('groups', 'tool_filetypes'));
$headings->cells[] = new html_table_cell(get_string('displaydescription', 'tool_filetypes'));
foreach ($headings->cells as $cell) {
$cell->header = true;
}
$table->data = array($headings);
foreach ($combined as $extension => $filetype) {
if ($extension === 'xxx') {
continue;
}
$row = new html_table_row();
$row->cells = array();
// First cell has icon and extension.
$icon = $this->pix_icon('f/' . $filetype['icon'], '');
< $row->cells[] = new html_table_cell($icon . ' ' . html_writer::span(s($extension)));
> $iconcell = new html_table_cell($icon . ' ' . html_writer::span(s($extension)));
> $iconcell->attributes['class'] = 'icon-size-5';
> $row->cells[] = $iconcell;
// Reset URL and button if needed.
$reverturl = new \moodle_url('/admin/tool/filetypes/revert.php',
array('extension' => $extension));
$revertbutton = html_writer::link($reverturl, $this->pix_icon('t/restore',
get_string('revert', 'tool_filetypes', s($extension))));
if ($restricted) {
$revertbutton = '';
}
// Rest is different for deleted items.
if (!empty($filetype['deleted'])) {
// Show deleted standard types differently.
if (!$restricted) {
$row->cells[] = new html_table_cell('');
}
$source = new html_table_cell(get_string('source_deleted', 'tool_filetypes') .
' ' . $revertbutton);
$source->attributes = array('class' => 'nonstandard');
$row->cells[] = $source;
// Other cells are blank.
$row->cells[] = new html_table_cell('');
$row->cells[] = new html_table_cell('');
$row->cells[] = new html_table_cell('');
$row->attributes = array('class' => 'deleted');
} else {
if (!$restricted) {
// Edit icons. For accessibility, the name of these links should
// be different for each row, so we have to include the extension.
$editurl = new \moodle_url('/admin/tool/filetypes/edit.php',
array('oldextension' => $extension));
$editbutton = html_writer::link($editurl, $this->pix_icon('t/edit',
get_string('edita', 'moodle', s($extension))));
$deleteurl = new \moodle_url('/admin/tool/filetypes/delete.php',
array('extension' => $extension));
$deletebutton = html_writer::link($deleteurl, $this->pix_icon('t/delete',
get_string('deletea', 'tool_filetypes', s($extension))));
$row->cells[] = new html_table_cell($editbutton . ' ' . $deletebutton);
}
// Source.
$sourcestring = 'source_';
if (!empty($filetype['custom'])) {
$sourcestring .= 'custom';
} else if (!empty($filetype['modified'])) {
$sourcestring .= 'modified';
} else {
$sourcestring .= 'standard';
}
$source = new html_table_cell(get_string($sourcestring, 'tool_filetypes') .
($sourcestring === 'source_modified' ? ' ' . $revertbutton : ''));
if ($sourcestring !== 'source_standard') {
$source->attributes = array('class' => 'nonstandard');
}
$row->cells[] = $source;
// MIME type.
$mimetype = html_writer::div(s($filetype['type']), 'mimetype');
if (!empty($filetype['defaulticon'])) {
// Include the 'default for MIME type' info in the MIME type cell.
$mimetype .= html_writer::div(html_writer::tag('i',
get_string('defaulticon', 'tool_filetypes')));
}
$row->cells[] = new html_table_cell($mimetype);
// Groups.
$groups = !empty($filetype['groups']) ? implode(', ', $filetype['groups']) : '';
$row->cells[] = new html_table_cell(s($groups));
// Description.
$description = get_mimetype_description(array('filename' => 'a.' . $extension));
// Don't show the description if it's just a copy of the MIME type,
// it makes the table ugly with the long duplicate text; leave blank instead.
if ($description === $filetype['type']) {
$description = '';
}
$row->cells[] = new html_table_cell($description);
}
$table->data[] = $row;
}
$out .= html_writer::table($table);
} else {
$out .= html_writer::tag('div', get_string('emptylist', 'tool_filetypes'));
}
// Displaying the 'Add' button.
if (!$restricted) {
$out .= $this->single_button(new moodle_url('/admin/tool/filetypes/edit.php',
array('name' => 'add')), get_string('addfiletypes', 'tool_filetypes'), 'get');
}
return $out;
}
}