Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php///////////////////////////////////////////////////////////////////////////// //// NOTICE OF COPYRIGHT //// //// Moodle - Modular Object-Oriented Dynamic Learning Environment //// http://moodle.org //// //// Copyright (C) 1999-onwards Moodle Pty Ltd http://moodle.com //// //// This program 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 2 of the License, or //// (at your option) any later version. //// //// This program 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: //// //// http://www.gnu.org/copyleft/gpl.html //// /////////////////////////////////////////////////////////////////////////////class data_field_menu extends data_field_base {var $type = 'menu';/*** priority for globalsearch indexing** @var int*/protected static $priority = self::HIGH_PRIORITY;public function supports_preview(): bool {return true;}public function get_data_content_preview(int $recordid): stdClass {$options = explode("\n", $this->field->param1);$options = array_map('trim', $options);$selected = $options[$recordid % count($options)];return (object)['id' => 0,'fieldid' => $this->field->id,'recordid' => $recordid,'content' => $selected,'content1' => null,'content2' => null,'content3' => null,'content4' => null,];}function display_add_field($recordid = 0, $formdata = null) {global $DB, $OUTPUT;if ($formdata) {$fieldname = 'field_' . $this->field->id;$content = $formdata->$fieldname;} else if ($recordid) {$content = $DB->get_field('data_content', 'content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid));$content = trim($content);} else {$content = '';}$str = '<div title="' . s($this->field->description) . '">';$options = array();$rawoptions = explode("\n",$this->field->param1);foreach ($rawoptions as $option) {$option = trim($option);if (strlen($option) > 0) {$options[$option] = $option;}}$str .= '<label for="' . 'field_' . $this->field->id . '">';$str .= html_writer::span($this->field->name, 'accesshide');if ($this->field->required) {$image = $OUTPUT->pix_icon('req', get_string('requiredelement', 'form'));$str .= html_writer::div($image, 'inline-req');}$str .= '</label>';$str .= html_writer::select($options, 'field_'.$this->field->id, $content, array('' => get_string('menuchoose', 'data')),array('id' => 'field_'.$this->field->id, 'class' => 'mod-data-input custom-select'));$str .= '</div>';return $str;}function display_search_field($content = '') {global $CFG, $DB;$varcharcontent = $DB->sql_compare_text('content', 255);$sql = "SELECT DISTINCT $varcharcontent AS contentFROM {data_content}WHERE fieldid=? AND content IS NOT NULL";$usedoptions = array();if ($used = $DB->get_records_sql($sql, array($this->field->id))) {foreach ($used as $data) {$value = $data->content;if ($value === '') {continue;}$usedoptions[$value] = $value;}}$options = array();foreach (explode("\n",$this->field->param1) as $option) {$option = trim($option);if (!isset($usedoptions[$option])) {continue;}$options[$option] = $option;}if (!$options) {// oh, nothing to search forreturn '';}$return = html_writer::label(get_string('fieldtypelabel', "datafield_" . $this->type),'menuf_' . $this->field->id, false, array('class' => 'accesshide'));$return .= html_writer::select($options, 'f_'.$this->field->id, $content, array('' => get_string('menuchoose', 'data')),array('class' => 'custom-select'));return $return;}public function parse_search_field($defaults = null) {$param = 'f_'.$this->field->id;if (empty($defaults[$param])) {$defaults = array($param => '');}return optional_param($param, $defaults[$param], PARAM_NOTAGS);}function generate_sql($tablealias, $value) {global $DB;static $i=0;$i++;$name = "df_menu_$i";$varcharcontent = $DB->sql_compare_text("{$tablealias}.content", 255);return array(" ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = :$name) ", array($name=>$value));}/*** Check if a field from an add form is empty** @param mixed $value* @param mixed $name* @return bool*/function notemptyfield($value, $name) {return strval($value) !== '';}/*** Return the plugin configs for external functions.** @return array the list of config parameters* @since Moodle 3.3*/public function get_config_for_external() {// Return all the config parameters.$configs = [];for ($i = 1; $i <= 10; $i++) {$configs["param$i"] = $this->field->{"param$i"};}return $configs;}}