e4ac3e0a74e97e06be2b940b5602488367dc8de3
[moodle.git] / mod / data / field / menu / field.class.php
1 <?php
2 ///////////////////////////////////////////////////////////////////////////
3 //                                                                       //
4 // NOTICE OF COPYRIGHT                                                   //
5 //                                                                       //
6 // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
7 //          http://moodle.org                                            //
8 //                                                                       //
9 // Copyright (C) 1999-onwards Moodle Pty Ltd  http://moodle.com          //
10 //                                                                       //
11 // This program is free software; you can redistribute it and/or modify  //
12 // it under the terms of the GNU General Public License as published by  //
13 // the Free Software Foundation; either version 2 of the License, or     //
14 // (at your option) any later version.                                   //
15 //                                                                       //
16 // This program is distributed in the hope that it will be useful,       //
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of        //
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
19 // GNU General Public License for more details:                          //
20 //                                                                       //
21 //          http://www.gnu.org/copyleft/gpl.html                         //
22 //                                                                       //
23 ///////////////////////////////////////////////////////////////////////////
25 class data_field_menu extends data_field_base {
27     var $type = 'menu';
28     /**
29      * priority for globalsearch indexing
30      *
31      * @var int
32      */
33     protected static $priority = self::HIGH_PRIORITY;
35     function display_add_field($recordid = 0, $formdata = null) {
36         global $DB, $OUTPUT;
38         if ($formdata) {
39             $fieldname = 'field_' . $this->field->id;
40             $content = $formdata->$fieldname;
41         } else if ($recordid) {
42             $content = $DB->get_field('data_content', 'content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid));
43             $content = trim($content);
44         } else {
45             $content = '';
46         }
47         $str = '<div title="' . s($this->field->description) . '">';
49         $options = array();
50         $rawoptions = explode("\n",$this->field->param1);
51         foreach ($rawoptions as $option) {
52             $option = trim($option);
53             if (strlen($option) > 0) {
54                 $options[$option] = $option;
55             }
56         }
58         $str .= '<label for="' . 'field_' . $this->field->id . '">';
59         $str .= html_writer::span($this->field->name, 'accesshide');
60         if ($this->field->required) {
61             $image = $OUTPUT->pix_icon('req', get_string('requiredelement', 'form'));
62             $str .= html_writer::div($image, 'inline-req');
63         }
64         $str .= '</label>';
65         $str .= html_writer::select($options, 'field_'.$this->field->id, $content, array('' => get_string('menuchoose', 'data')),
66                                     array('id' => 'field_'.$this->field->id, 'class' => 'mod-data-input custom-select'));
68         $str .= '</div>';
70         return $str;
71     }
73     function display_search_field($content = '') {
74         global $CFG, $DB;
76         $varcharcontent =  $DB->sql_compare_text('content', 255);
77         $sql = "SELECT DISTINCT $varcharcontent AS content
78                   FROM {data_content}
79                  WHERE fieldid=? AND content IS NOT NULL";
81         $usedoptions = array();
82         if ($used = $DB->get_records_sql($sql, array($this->field->id))) {
83             foreach ($used as $data) {
84                 $value = $data->content;
85                 if ($value === '') {
86                     continue;
87                 }
88                 $usedoptions[$value] = $value;
89             }
90         }
92         $options = array();
93         foreach (explode("\n",$this->field->param1) as $option) {
94             $option = trim($option);
95             if (!isset($usedoptions[$option])) {
96                 continue;
97             }
98             $options[$option] = $option;
99         }
100         if (!$options) {
101             // oh, nothing to search for
102             return '';
103         }
105         $return = html_writer::label(get_string('fieldtypelabel', "datafield_" . $this->type),
106             'menuf_' . $this->field->id, false, array('class' => 'accesshide'));
107         $return .= html_writer::select($options, 'f_'.$this->field->id, $content, array('class' => 'custom-select'));
108         return $return;
109     }
111     public function parse_search_field($defaults = null) {
112         $param = 'f_'.$this->field->id;
113         if (empty($defaults[$param])) {
114             $defaults = array($param => '');
115         }
116         return optional_param($param, $defaults[$param], PARAM_NOTAGS);
117     }
119     function generate_sql($tablealias, $value) {
120         global $DB;
122         static $i=0;
123         $i++;
124         $name = "df_menu_$i";
125         $varcharcontent = $DB->sql_compare_text("{$tablealias}.content", 255);
127         return array(" ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = :$name) ", array($name=>$value));
128     }
130     /**
131      * Check if a field from an add form is empty
132      *
133      * @param mixed $value
134      * @param mixed $name
135      * @return bool
136      */
137     function notemptyfield($value, $name) {
138         return strval($value) !== '';
139     }
141     /**
142      * Return the plugin configs for external functions.
143      *
144      * @return array the list of config parameters
145      * @since Moodle 3.3
146      */
147     public function get_config_for_external() {
148         // Return all the config parameters.
149         $configs = [];
150         for ($i = 1; $i <= 10; $i++) {
151             $configs["param$i"] = $this->field->{"param$i"};
152         }
153         return $configs;
154     }