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
 * User sign-up form.
19
 *
20
 * @package    core
21
 * @subpackage auth
22
 * @copyright  1999 onwards Martin Dougiamas  http://dougiamas.com
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 */
25
 
26
defined('MOODLE_INTERNAL') || die();
27
 
28
require_once($CFG->libdir.'/formslib.php');
29
require_once($CFG->dirroot.'/user/profile/lib.php');
30
require_once($CFG->dirroot . '/user/editlib.php');
31
require_once('lib.php');
32
 
33
class login_signup_form extends moodleform implements renderable, templatable {
34
    function definition() {
35
        global $USER, $CFG;
36
 
37
        $mform = $this->_form;
38
 
39
        $mform->addElement('text', 'username', get_string('username'), 'maxlength="100" size="12" autocapitalize="none"');
40
        $mform->setType('username', PARAM_RAW);
41
        $mform->addRule('username', get_string('missingusername'), 'required', null, 'client');
42
 
43
        if (!empty($CFG->passwordpolicy)){
44
            $mform->addElement('static', 'passwordpolicyinfo', '', print_password_policy());
45
        }
46
        $mform->addElement('password', 'password', get_string('password'), [
47
            'maxlength' => MAX_PASSWORD_CHARACTERS,
48
            'size' => 12,
49
            'autocomplete' => 'new-password'
50
        ]);
51
        $mform->setType('password', core_user::get_property_type('password'));
52
        $mform->addRule('password', get_string('missingpassword'), 'required', null, 'client');
53
        $mform->addRule('password', get_string('maximumchars', '', MAX_PASSWORD_CHARACTERS),
54
            'maxlength', MAX_PASSWORD_CHARACTERS, 'client');
55
 
56
        $mform->addElement('text', 'email', get_string('email'), 'maxlength="100" size="25"');
57
        $mform->setType('email', core_user::get_property_type('email'));
58
        $mform->addRule('email', get_string('missingemail'), 'required', null, 'client');
59
        $mform->setForceLtr('email');
60
 
61
        $mform->addElement('text', 'email2', get_string('emailagain'), 'maxlength="100" size="25"');
62
        $mform->setType('email2', core_user::get_property_type('email'));
63
        $mform->addRule('email2', get_string('missingemail'), 'required', null, 'client');
64
        $mform->setForceLtr('email2');
65
 
66
        $namefields = useredit_get_required_name_fields();
67
        foreach ($namefields as $field) {
68
            $mform->addElement('text', $field, get_string($field), 'maxlength="100" size="30"');
69
            $mform->setType($field, core_user::get_property_type('firstname'));
70
            $stringid = 'missing' . $field;
71
            if (!get_string_manager()->string_exists($stringid, 'moodle')) {
72
                $stringid = 'required';
73
            }
74
            $mform->addRule($field, get_string($stringid), 'required', null, 'client');
75
        }
76
 
77
        $mform->addElement('text', 'city', get_string('city'), 'maxlength="120" size="20"');
78
        $mform->setType('city', core_user::get_property_type('city'));
79
        if (!empty($CFG->defaultcity)) {
80
            $mform->setDefault('city', $CFG->defaultcity);
81
        }
82
 
83
        $country = get_string_manager()->get_list_of_countries();
84
        $default_country[''] = get_string('selectacountry');
85
        $country = array_merge($default_country, $country);
86
        $mform->addElement('select', 'country', get_string('country'), $country);
87
 
88
        if( !empty($CFG->country) ){
89
            $mform->setDefault('country', $CFG->country);
90
        }else{
91
            $mform->setDefault('country', '');
92
        }
93
 
94
        profile_signup_fields($mform);
95
 
96
        if (signup_captcha_enabled()) {
97
            $mform->addElement('recaptcha', 'recaptcha_element', get_string('security_question', 'auth'));
98
            $mform->addHelpButton('recaptcha_element', 'recaptcha', 'auth');
99
            $mform->closeHeaderBefore('recaptcha_element');
100
        }
101
 
102
        // Hook for plugins to extend form definition.
103
        core_login_extend_signup_form($mform);
104
 
105
        // Add "Agree to sitepolicy" controls. By default it is a link to the policy text and a checkbox but
106
        // it can be implemented differently in custom sitepolicy handlers.
107
        $manager = new \core_privacy\local\sitepolicy\manager();
108
        $manager->signup_form($mform);
109
 
110
        // buttons
111
        $this->set_display_vertical();
112
        $this->add_action_buttons(true, get_string('createaccount'));
113
 
114
    }
115
 
116
    function definition_after_data(){
117
        $mform = $this->_form;
118
        $mform->applyFilter('username', 'trim');
119
 
120
        // Trim required name fields.
121
        foreach (useredit_get_required_name_fields() as $field) {
122
            $mform->applyFilter($field, 'trim');
123
        }
124
    }
125
 
126
    /**
127
     * Validate user supplied data on the signup form.
128
     *
129
     * @param array $data array of ("fieldname"=>value) of submitted data
130
     * @param array $files array of uploaded files "element_name"=>tmp_file_path
131
     * @return array of "element_name"=>"error_description" if there are errors,
132
     *         or an empty array if everything is OK (true allowed for backwards compatibility too).
133
     */
134
    public function validation($data, $files) {
135
        $errors = parent::validation($data, $files);
136
 
137
        // Extend validation for any form extensions from plugins.
138
        $errors = array_merge($errors, core_login_validate_extend_signup_form($data));
139
 
140
        if (signup_captcha_enabled()) {
141
            $recaptchaelement = $this->_form->getElement('recaptcha_element');
142
            if (!empty($this->_form->_submitValues['g-recaptcha-response'])) {
143
                $response = $this->_form->_submitValues['g-recaptcha-response'];
144
                if (!$recaptchaelement->verify($response)) {
145
                    $errors['recaptcha_element'] = get_string('incorrectpleasetryagain', 'auth');
146
                }
147
            } else {
148
                $errors['recaptcha_element'] = get_string('missingrecaptchachallengefield');
149
            }
150
        }
151
 
152
        $errors += signup_validate_data($data, $files);
153
 
154
        return $errors;
155
    }
156
 
157
    /**
158
     * Export this data so it can be used as the context for a mustache template.
159
     *
160
     * @param renderer_base $output Used to do a final render of any components that need to be rendered for export.
161
     * @return array
162
     */
163
    public function export_for_template(renderer_base $output) {
164
        ob_start();
165
        $this->display();
166
        $formhtml = ob_get_contents();
167
        ob_end_clean();
168
        $context = [
169
            'formhtml' => $formhtml
170
        ];
171
        return $context;
172
    }
173
}