AutorÃa | Ultima modificación | Ver Log |
<?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/>.
/**
* unilabel type carousel.
*
* @package mod_unilabel
* @author Andreas Grabs <info@grabs-edv.de>
* @copyright 2018 onwards Grabs EDV {@link https://www.grabs-edv.de}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace mod_unilabel;
defined('MOODLE_INTERNAL') || die;
require_once($CFG->libdir . '/adminlib.php');
/**
* Content type definition.
* @package mod_unilabel
* @author Andreas Grabs <info@grabs-edv.de>
* @copyright 2018 onwards Grabs EDV {@link https://www.grabs-edv.de}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class setting_configselect_button extends \admin_setting {
/**
* Options used in select box and also in css templates.
*
* @var array
*/
private $options;
/**
* List of css codes for fontawesome.
*
* @var array
*/
public $buttonlist = [];
/**
* Constructor.
* @param string $name unique ascii name
* @param string $visiblename localised
* @param string $description long localised info
* @param string $defaultsetting
* @return void
*/
public function __construct($name, $visiblename, $description, $defaultsetting) {
$this->buttonlist = static::get_font_buttons();
$this->options = [0 => 0];
foreach ($this->buttonlist as $key => $btn) {
$this->options[$key] = $btn['next'];
}
parent::__construct($name, $visiblename, $description, $defaultsetting);
}
/**
* Retrieves the current setting using the objects name.
*
* @return string
*/
public function get_setting() {
return $this->config_read($this->name);
}
/**
* Sets the value for the setting.
*
* Sets the value for the setting to either the yes or no values
* of the object by comparing $data to yes
*
* @param mixed $data Gets converted to str for comparison against yes value
* @return string empty string or error
*/
public function write_setting($data) {
if (empty($data)) {
$data = 0;
}
return $this->config_write($this->name, $data) ? '' : get_string('errorsetting', 'admin');
}
/**
* Returns an XHTML checkbox field.
*
* @param string $data If $data matches yes then checkbox is checked
* @param string $query
* @return string XHTML field
*/
public function output_html($data, $query = '') {
global $OUTPUT;
$default = $this->get_defaultsetting();
// Get the string for default setting.
$defaultinfo = $default;
if (empty($default)) {
$defaultinfo = get_string('theme');
}
$values = [];
$currenttitle = get_string('choose');
foreach ($this->options as $key => $id) {
$value = new \stdClass();
$value->value = $key;
$value->title = $id;
if ($value->value == $data) {
$value->checked = 'checked';
$currentvalue = $value->value;
}
if ($key == 0) {
$value->title = $defaultinfo;
$value->istext = 1;
}
$values[] = $value;
}
$context = (object) [
'id' => $this->get_id(),
'name' => $this->get_full_name(),
'values' => $values,
'currentvalue' => $this->options[$currentvalue],
];
if ($currentvalue == 0) {
$context->currentvalue = $defaultinfo;
$context->currentvalueistext = 1;
}
// To make sure we have clean html we have to put the carousel css into the <head> by using javascript.
$cssstring = $OUTPUT->render_from_template('mod_unilabel/setting_configselect_style', $context);
$context->cssjsonstring = json_encode($cssstring);
$element = $OUTPUT->render_from_template('mod_unilabel/setting_configselect', $context);
return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', $defaultinfo, $query);
}
/**
* Get an array with a font awesome button definition. Depending on the Moodle
* version it returns font awesome 4.7 or 6.0 free.
*
* @return array
*/
public static function get_font_buttons() {
// Since Moodle 4.2 the new FontAwesome 6 is used.
if (version_compare(moodle_major_version(), '4.2', '<')) {
// The current Moodle version is less then 4.2. So we load the fontawesome 4.7 items.
return [
'1' => ['next' => 'fa fa-angle-right fa-xl', 'prev' => 'fa fa-angle-left fa-xl'],
'2' => ['next' => 'fa fa-angle-double-right fa-xl', 'prev' => 'fa fa-angle-double-left fa-xl'],
'3' => ['next' => 'fa fa-forward fa-xl', 'prev' => 'fa fa-backward fa-xl'],
'4' => ['next' => 'fa fa-caret-right fa-xl', 'prev' => 'fa fa-caret-left fa-xl'],
'5' => ['next' => 'fa fa-hand-o-right fa-xl', 'prev' => 'fa fa-hand-o-left fa-xl'],
'6' => ['next' => 'fa fa-arrow-right fa-xl', 'prev' => 'fa fa-arrow-left fa-xl'],
'7' => ['next' => 'fa fa-arrow-circle-right fa-xl', 'prev' => 'fa fa-arrow-circle-left fa-xl'],
'8' => ['next' => 'fa fa-arrow-circle-o-right fa-xl', 'prev' => 'fa fa-arrow-circle-o-left fa-xl'],
];
} else {
// The current Moodle version is 4.2 or later. So we load the fontawesome 6 items.
return [
'1' => ['next' => 'fa fa-solid fa-angle-right fa-xl', 'prev' => 'fa fa-solid fa-angle-left fa-xl'],
'2' => ['next' => 'fa fa-solid fa-angles-right fa-xl', 'prev' => 'fa fa-solid fa-angles-left fa-xl'],
'3' => ['next' => 'fa fa-solid fa-forward', 'prev' => 'fa fa-solid fa-backward'],
'4' => ['next' => 'fa fa-solid fa-caret-right fa-xl', 'prev' => 'fa fa-solid fa-caret-left fa-xl'],
'5' => ['next' => 'fa fa-regular fa-hand-point-right', 'prev' => 'fa fa-regular fa-hand-point-left'],
'6' => ['next' => 'fa fa-solid fa-arrow-right fa-xl', 'prev' => 'fa fa-solid fa-arrow-left fa-xl'],
'7' => ['next' => 'fa fa-regular fa-circle-right', 'prev' => 'fa fa-regular fa-circle-left'],
'8' => ['next' => 'fa fa-solid fa-circle-arrow-right', 'prev' => 'fa fa-solid fa-circle-arrow-left'],
];
}
}
}