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/>.
/**
* Form for editing Dash block instances.
*
* @package block_dash
* @copyright 2019 bdecent gmbh <https://bdecent.de>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
use block_dash\local\data_source\data_source_factory;
/**
* Form for editing Dash block instances.
*
* @package block_dash
* @copyright 2019 bdecent gmbh <https://bdecent.de>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class block_dash_edit_form extends block_edit_form {
/**
* Add form fields.
*
* @param MoodleQuickForm $mform
* @throws coding_exception
*/
protected function specific_definition($mform) {
global $CFG;
// Fields for editing HTML block title and contents.
$mform->addElement('header', 'dashconfigheader', get_string('blocksettings', 'block'));
$mform->addElement('text', 'config_title', get_string('blocktitle', 'block_dash'));
$mform->setType('config_title', PARAM_TEXT);
$this->add_datasource_group($mform, $this->block->config);
$mform->addElement('header', 'headerfooter', get_string('headerfooter', 'block_dash'));
$mform->addElement('editor', 'config_header_content', get_string('headercontent', 'block_dash'));
$mform->setType('config_header_content', PARAM_RAW);
$mform->addHelpButton('config_header_content', 'headercontent', 'block_dash');
$mform->addElement('editor', 'config_footer_content', get_string('footercontent', 'block_dash'));
$mform->setType('config_footer_content', PARAM_RAW);
$mform->addHelpButton('config_footer_content', 'footercontent', 'block_dash');
$mform->addElement('header', 'apperance', get_string('appearance'));
$mform->addElement('select', 'config_showheader', get_string('showheader', 'block_dash'), [
0 => get_string('hidden', 'block_dash'),
1 => get_string('visible'),
]);
$mform->setType('config_showheader', PARAM_INT);
$mform->setDefault('config_showheader', get_config('block_dash', 'showheader'));
$mform->addHelpButton('config_showheader', 'showheader', 'block_dash');
$mform->addElement('select', 'config_width', get_string('blockwidth', 'block_dash'), [
100 => '100',
50 => '1/2',
33 => '1/3',
66 => '2/3',
25 => '1/4',
20 => '1/5',
16 => '1/6',
]);
$mform->setType('config_width', PARAM_INT);
$mform->setDefault('config_width', 100);
$mform->addElement('select', 'config_hide_when_empty', get_string('hidewhenempty', 'block_dash'), [
0 => get_string('no'),
1 => get_string('yes'),
]);
$mform->setType('config_hide_when_empty', PARAM_INT);
$mform->setDefault('config_hide_when_empty', get_config('block_dash', 'hide_when_empty'));
$attributes['tags'] = true;
$attributes['multiple'] = 'multiple';
$attributes['placeholder'] = get_string('enterclasses', 'block_dash');
$cssclassses = explode(',', get_config('block_dash', 'cssclass'));
$cssclassses = array_combine($cssclassses, $cssclassses);
$mform->addElement('autocomplete', 'config_css_class', get_string('cssclass', 'block_dash'), $cssclassses, $attributes);
$mform->setType('config_css_class', PARAM_TEXT);
$mform->addHelpButton('config_css_class', 'cssclass', 'block_dash');
$mform->addElement('filemanager', 'config_backgroundimage', get_string('backgroundimage', 'block_dash'), null,
['subdirs' => 0, 'maxfiles' => 1, 'accepted_types' => ['image'], 'return_types' => FILE_INTERNAL | FILE_EXTERNAL]);
$mform->addHelpButton('config_backgroundimage', 'backgroundimage', 'block_dash');
$postions = [
'initial' => get_string('initial', 'block_dash'),
'left top' => get_string('lefttop', 'block_dash'),
'left center' => get_string('leftcenter', 'block_dash'),
'left bottom' => get_string('leftbottom', 'block_dash'),
'right top' => get_string('righttop', 'block_dash'),
'right center' => get_string('rightcenter', 'block_dash'),
'right bottom' => get_string('rightbottom', 'block_dash'),
'center top' => get_string('centertop', 'block_dash'),
'center center' => get_string('centercenter', 'block_dash'),
'center bottom' => get_string('centerbottom', 'block_dash'),
'custom' => get_string('strcustom', 'block_dash'),
];
// Module background image poisiton.
$mform->addElement('select', 'config_backgroundimage_position', get_string('backgroundposition', 'block_dash'),
$postions);
$mform->setType('config_backgroundimage_position', PARAM_RAW);
$mform->addHelpButton('config_backgroundimage_position', 'backgroundposition', 'block_dash');
// Module background image custom poisiton.
$mform->addElement('text', 'config_backgroundimage_customposition',
get_string('designercustombgposition', 'block_dash'));
$mform->setType('config_backgroundimage_customposition', PARAM_RAW);
$mform->addHelpButton('config_backgroundimage_customposition', 'backgroundposition', 'block_dash');
$mform->hideIf('config_backgroundimage_customposition', 'config_backgroundimage_position', 'neq', 'custom');
// Module background image size.
$sizes = [
'auto' => get_string('auto', 'block_dash'),
'cover' => get_string('cover', 'block_dash'),
'contain' => get_string('contain', 'block_dash'),
'custom' => get_string('strcustom', 'block_dash'),
];
$mform->addElement('select', 'config_backgroundimage_size', get_string('backgroundsize',
'block_dash'), $sizes);
$mform->setType('config_backgroundimage_size', PARAM_RAW);
$mform->addHelpButton('config_backgroundimage_size', 'backgroundsize', 'block_dash');
// Module background image custom size.
$mform->addElement('text', 'config_backgroundimage_customsize', get_string('designercustombgsize', 'block_dash'));
$mform->setType('config_backgroundimage_customsize', PARAM_RAW);
$mform->addHelpButton('config_backgroundimage_customsize', 'backgroundsize', 'block_dash');
$mform->hideIf('config_backgroundimage_customsize', 'config_backgroundimage_size', 'neq', 'custom');
require_once($CFG->dirroot.'/blocks/dash/form/gradientpicker.php');
MoodleQuickForm::registerElementType('dashgradientpicker', $CFG->dirroot.'/blocks/dash/form/gradientpicker.php',
'moodlequickform_dashgradientpicker');
$mform->addElement('dashgradientpicker', 'config_backgroundgradient', get_string('backgroundgradient', 'block_dash'),
['placeholder' => 'linear-gradient(#e66465, #9198e5)']);
$mform->setType('config_backgroundgradient', PARAM_TEXT);
$mform->addHelpButton('config_backgroundgradient', 'backgroundgradient', 'block_dash');
require_once($CFG->dirroot.'/blocks/dash/form/element-colorpicker.php');
MoodleQuickForm::registerElementType('dashcolorpicker', $CFG->dirroot.'/blocks/dash/form/element-colorpicker.php',
'moodlequickform_dashcolorpicker');
$mform->addElement('dashcolorpicker', 'config_headerfootercolor', get_string('fontcolor', 'block_dash'));
$mform->setType('config_headerfootercolor', PARAM_RAW);
$mform->addHelpButton('config_headerfootercolor', 'fontcolor', 'block_dash');
$mform->addElement('select', 'config_border_option', get_string('border_option', 'block_dash'), [
0 => get_string('hidden', 'block_dash'),
1 => get_string('visible'),
]);
$mform->setType('config_border_option', PARAM_INT);
$mform->setDefault('config_border_option', 1);
$mform->addHelpButton('config_border_option', 'border_option', 'block_dash');
$mform->addElement('text', 'config_border', get_string('bordervalue', 'block_dash'));
$mform->setType('config_border', PARAM_TEXT);
$mform->addHelpButton('config_border', 'border', 'block_dash');
$mform->hideIf('config_border', 'config_border_option', 'eq', 0);
$mform->addElement('text', 'config_css[min-height]', get_string('minheight', 'block_dash'));
$mform->setType('config_css[min-height]', PARAM_TEXT);
$mform->addHelpButton('config_css[min-height]', 'minheight', 'block_dash');
$mform->addElement('header', 'emptystateheading', get_string('emptystateheading', 'block_dash'));
$mform->addElement('editor', 'config_emptystate', get_string('content'), ['rows' => 5]);
$mform->setType('config_emptystate', PARAM_CLEANHTML);
$widgetlist = data_source_factory::get_data_source_form_options('widget');
foreach ($widgetlist as $id => $source) {
if (method_exists($id, 'extend_config_form')) {
$id::extend_config_form($mform, $source, $this);
$showcustom = true;
}
}
}
/**
* Add available data source groups.
*
* @param moodleform $mform
* @param stdclass $config
* @return void
*/
public function add_datasource_group(&$mform, $config) {
global $OUTPUT;
$label[] = $mform->createElement('html', html_writer::start_div('datasource-content heading'));
$label[] = $mform->createElement('html', html_writer::end_div());
$mform->addGroup($label, 'datasources_label', get_string('choosefeature', 'block_dash'), [' '], false);
$mform->setType('datasources_label', PARAM_TEXT);
if (!isset($config->data_source_idnumber)) {
self::dash_features_list($mform, $this->block->context, $this->page);
$mform->addElement('hidden', 'config_dash_configure_options', 1);
$mform->setType('config_dash_configure_options', PARAM_INT);
} else {
if ($ds = data_source_factory::build_data_source($config->data_source_idnumber,
$this->block->context)) {
$label = $ds->get_name();
} else {
$label = get_string('datasourcemissing', 'block_dash');
}
$datalabel = ($ds && $ds->is_widget())
? get_string('widget', 'block_dash') : get_string('datasource', 'block_dash');
$mform->addElement('static', 'data_source_label', $datalabel.' : ', $label);
}
}
/**
* Data features list.
*
* @param \moodleform $mform
* @param \context $context
* @param \moodle_page $page
* @return void
*/
public static function dash_features_list(&$mform, $context, $page) {
global $OUTPUT;
// Group of datasources.
if (has_capability('block/dash:managedatasource', $context)) {
$datasources = data_source_factory::get_data_source_form_options();
// Description of the datasources.
$group[] = $mform->createElement('html',
html_writer::tag('p', get_string('datasourcedesc', 'block_dash'), ['class' => 'dash-source-desc']));
$group[] = $mform->createElement('html', html_writer::start_div('datasource-content'));
foreach ($datasources as $id => $source) {
if (block_dash_visible_addons($id)) {
$group[] = $mform->createElement('html', html_writer::start_div('datasource-item'));
$group[] = $mform->createElement('radio', 'config_data_source_idnumber', '', $source['name'], $id);
if ($help = $source['help']) {
$helpcontent = $OUTPUT->help_icon($help['name'], $help['component'], $help['name']);
$group[] = $mform->createElement('html', $helpcontent);
}
$group[] = $mform->createElement('html', html_writer::end_div());
}
}
$group[] = $mform->createElement('html', html_writer::end_div());
$mform->addGroup($group, 'datasources', get_string('buildown', 'block_dash'), [' '], false);
$mform->setType('datasources', PARAM_TEXT);
$mform->addHelpButton('datasources', 'buildown', 'block_dash');
}
// Widgets data source.
if (has_capability('block/dash:managewidget', $context)) {
$widgetlist = data_source_factory::get_data_source_form_options('widget');
$widgets[] = $mform->createElement('html',
html_writer::tag('p', get_string('widgetsdesc', 'block_dash'), ['class' => 'dash-source-desc']));
$widgets[] = $mform->createElement('html', html_writer::start_div('datasource-content'));
foreach ($widgetlist as $id => $source) {
if (block_dash_visible_addons($id)) {
$widgets[] = $mform->createElement('html', html_writer::start_div('datasource-item'));
$widgets[] = $mform->createElement('radio', 'config_data_source_idnumber', '', $source['name'], $id);
if ($source['help']) {
$widgets[] = $mform->createElement('html', $OUTPUT->help_icon($source['help'], 'block_dash',
$source['help']));
}
$widgets[] = $mform->createElement('html', html_writer::end_div());
}
}
$widgets[] = $mform->createElement('html', html_writer::end_div());
$mform->addGroup($widgets, 'widgets', get_string('readymatewidgets', 'block_dash'), [' '], false);
$mform->setType('widgets', PARAM_TEXT);
$mform->addHelpButton('widgets', 'readymatewidgets', 'block_dash');
}
// Content layout.
$customfeatures = data_source_factory::get_data_source_form_options('custom');
if ($customfeatures) {
foreach ($customfeatures as $id => $source) {
if ($id::has_capbility($context)) {
$id::get_features_config($mform, $source);
$showcustom = true;
}
}
if (isset($showcustom)) {
$page->requires->js_amd_inline('require(["jquery"], function($) {
$("body").on("change", "[data-target=\"subsource-config\"] [type=radio]", function(e) {
var subConfig;
if (subConfig = e.target.closest("[data-target=\"subsource-config\"]")) {
if (subConfig.parentNode !== null) {
var dataSource = subConfig.parentNode.querySelector("[name=\"config_data_source_idnumber\"]");
dataSource.click(); // = true;
}
}
});
})'
);
}
}
}
/**
* Display the configuration form when block is being added to the page
*
* @return bool
*/
public static function display_form_when_adding(): bool {
return false;
}
}
/**
* Dash features form to configure the data source or widget.
*/
class block_dash_featuresform extends \moodleform {
/**
* Defined the form fields for the datasource selector list.
*
* @return void
*/
public function definition() {
// @codingStandardsIgnoreStart
global $PAGE;
// Ignore the phplint due to block class not allowed to include the PAGE global variable.
// @codingStandardsIgnoreEnd
$mform = $this->_form;
$mform->updateAttributes(['class' => 'form-inline']);
$mform->updateAttributes(['id' => 'dash-configuration']);
$block = $this->_customdata['block'] ?? '';
// @codingStandardsIgnoreStart
// Ignore the phplint due to block class not allowed to include the PAGE global variable.
block_dash_edit_form::dash_features_list($mform, $block, $PAGE);
// @codingStandardsIgnoreEnd
}
}