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() {// @codingStandardsIgnoreStartglobal $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}}