PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/login/signup_form.php

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