Ir a la última revisión | Autoría | Comparar con el anterior | 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/>.namespace core\output\local\dropdown;use core\output\choicelist;/*** Class to render a dropdown dialog element.** A dropdown dialog allows to render any arbitrary HTML into a dropdown elements triggered* by a button.** @package core* @category output* @copyright 2023 Ferran Recio <ferran@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class status extends dialog {/*** @var choicelist content of dialog.*/protected $choices = null;/*** Constructor.** The definition object could contain the following keys:* - classes: component CSS classes.* - buttonclasses: the button CSS classes.* - dialogwidth: the dropdown width.* - extras: extra HTML attributes (attribute => value).* - buttonsync: if the button should be synced with the selected value.* - updatestatus: if component must update the status and trigger a change event when clicked.** @param string $buttoncontent the button content* @param choicelist $choices the choice object* @param array $definition an optional array of the element definition*/public function __construct(string $buttoncontent, choicelist $choices, array $definition = []) {parent::__construct($buttoncontent, '', $definition);$this->set_choice($choices);if ($definition['buttonsync'] ?? false) {$this->extras['data-button-sync'] = 'true';}if ($definition['updatestatus'] ?? false) {$this->extras['data-update-status'] = 'true';}}/*** Set the dialog contents.** @param choicelist $choices*/public function set_choice(choicelist $choices) {$this->choices = $choices;$description = $choices->get_description();if (!empty($description)) {$this->set_content($description);}}/*** Export this data so it can be used as the context for a mustache template (core/inplace_editable).** @param \renderer_base $output typically, the renderer that's calling this function* @return array data context for a mustache template*/public function export_for_template(\renderer_base $output): array {$data = parent::export_for_template($output);if ($this->choices !== null) {$data['choices'] = $this->choices->export_for_template($output);}$selectedvalue = $this->choices->get_selected_value();if ($selectedvalue !== null) {$data['extras'][] = (object)['attribute' => 'data-value','value' => $selectedvalue,];}return $data;}/*** Get the name of the template to use for this templatable.** @param \renderer_base $renderer The renderer requesting the template name* @return string the template name*/public function get_template_name(\renderer_base $renderer): string {return 'core/local/dropdown/status';}}