Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Menu profile field.
19
 *
20
 * @package    profilefield_menu
21
 * @copyright  2007 onwards Shane Elliot {@link http://pukunui.com}
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
/**
26
 * Class profile_field_menu
27
 *
28
 * @copyright  2007 onwards Shane Elliot {@link http://pukunui.com}
29
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
30
 */
31
class profile_field_menu extends profile_field_base {
32
 
33
    /** @var array $options */
34
    public $options;
35
 
36
    /** @var int $datakey */
37
    public $datakey;
38
 
39
    /**
40
     * Constructor method.
41
     *
42
     * Pulls out the options for the menu from the database and sets the the corresponding key for the data if it exists.
43
     *
44
     * @param int $fieldid
45
     * @param int $userid
46
     * @param object $fielddata
47
     */
48
    public function __construct($fieldid = 0, $userid = 0, $fielddata = null) {
49
        // First call parent constructor.
50
        parent::__construct($fieldid, $userid, $fielddata);
51
 
52
        // Param 1 for menu type is the options.
53
        if (isset($this->field->param1)) {
54
            $options = explode("\n", $this->field->param1);
55
        } else {
56
            $options = array();
57
        }
58
        $this->options = array();
59
        if (!empty($this->field->required)) {
60
            $this->options[''] = get_string('choose').'...';
61
        }
62
        foreach ($options as $key => $option) {
63
            // Multilang formatting with filters.
64
            $this->options[$option] = format_string($option, true, ['context' => context_system::instance()]);
65
        }
66
 
67
        // Set the data key.
68
        if ($this->data !== null) {
69
            $key = $this->data;
70
            if (isset($this->options[$key]) || ($key = array_search($key, $this->options)) !== false) {
71
                $this->data = $key;
72
                $this->datakey = $key;
73
            }
74
        }
75
    }
76
 
77
    /**
78
     * Create the code snippet for this field instance
79
     * Overwrites the base class method
80
     * @param moodleform $mform Moodle form instance
81
     */
82
    public function edit_field_add($mform) {
83
        $mform->addElement('select', $this->inputname, format_string($this->field->name), $this->options);
84
    }
85
 
86
    /**
87
     * Set the default value for this field instance
88
     * Overwrites the base class method.
89
     * @param moodleform $mform Moodle form instance
90
     */
91
    public function edit_field_set_default($mform) {
92
        $key = $this->field->defaultdata;
93
        if (isset($this->options[$key]) || ($key = array_search($key, $this->options)) !== false){
94
            $defaultkey = $key;
95
        } else {
96
            $defaultkey = '';
97
        }
98
        $mform->setDefault($this->inputname, $defaultkey);
99
    }
100
 
101
    /**
102
     * The data from the form returns the key.
103
     *
104
     * This should be converted to the respective option string to be saved in database
105
     * Overwrites base class accessor method.
106
     *
107
     * @param mixed $data The key returned from the select input in the form
108
     * @param stdClass $datarecord The object that will be used to save the record
109
     * @return mixed Data or null
110
     */
111
    public function edit_save_data_preprocess($data, $datarecord) {
112
        return isset($this->options[$data]) ? $data : null;
113
    }
114
 
115
    /**
116
     * When passing the user object to the form class for the edit profile page
117
     * we should load the key for the saved data
118
     *
119
     * Overwrites the base class method.
120
     *
121
     * @param stdClass $user User object.
122
     */
123
    public function edit_load_user_data($user) {
124
        $user->{$this->inputname} = $this->datakey;
125
    }
126
 
127
    /**
128
     * HardFreeze the field if locked.
129
     * @param moodleform $mform instance of the moodleform class
130
     */
131
    public function edit_field_set_locked($mform) {
132
        if (!$mform->elementExists($this->inputname)) {
133
            return;
134
        }
135
        if ($this->is_locked() and !has_capability('moodle/user:update', context_system::instance())) {
136
            $mform->hardFreeze($this->inputname);
137
            $mform->setConstant($this->inputname, format_string($this->datakey));
138
        }
139
    }
140
    /**
141
     * Convert external data (csv file) from value to key for processing later by edit_save_data_preprocess
142
     *
143
     * @param string $value one of the values in menu options.
144
     * @return int options key for the menu
145
     */
146
    public function convert_external_data($value) {
147
        if (isset($this->options[$value])) {
148
            $retval = $value;
149
        } else {
150
            $retval = array_search($value, $this->options);
151
        }
152
 
153
        // If value is not found in options then return null, so that it can be handled
154
        // later by edit_save_data_preprocess.
155
        if ($retval === false) {
156
            $retval = null;
157
        }
158
        return $retval;
159
    }
160
 
161
    /**
162
     * Return the field type and null properties.
163
     * This will be used for validating the data submitted by a user.
164
     *
165
     * @return array the param type and null property
166
     * @since Moodle 3.2
167
     */
168
    public function get_field_properties() {
169
        return array(PARAM_TEXT, NULL_NOT_ALLOWED);
170
    }
171
 
172
    /**
173
     * Return the field settings suitable to be exported via an external function.
174
     *
175
     * @return array all the settings
176
     */
177
    public function get_field_config_for_external() {
178
 
179
        if (isset($this->field->param1) && !empty($this->options)) {
180
            // Remove "Choose" option to make it consisten with the rest of the data.
181
            if (!empty($this->field->required)) {
182
                unset($this->options['']);
183
            }
184
            $this->field->param2 = implode("\n", array_values($this->options));
185
        }
186
 
187
        return (array) $this->field;
188
    }
189
}
190
 
191