inscription.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use ChamiloSession as Session;
  4. /**
  5. * This script displays a form for registering new users.
  6. * @package chamilo.auth
  7. */
  8. //quick hack to adapt the registration form result to the selected registration language
  9. if (!empty($_POST['language'])) {
  10. $_GET['language'] = $_POST['language'];
  11. }
  12. require_once __DIR__.'/../inc/global.inc.php';
  13. $hideHeaders = isset($_GET['hide_headers']);
  14. $allowedFields = [
  15. 'official_code',
  16. 'phone',
  17. 'status',
  18. 'language',
  19. 'extra_fields',
  20. 'address'
  21. ];
  22. $allowedFieldsConfiguration = api_get_configuration_value('allow_fields_inscription');
  23. if ($allowedFieldsConfiguration !== false) {
  24. $allowedFields = isset($allowedFieldsConfiguration['fields']) ? $allowedFieldsConfiguration['fields'] : [];
  25. $allowedFields['extra_fields'] = isset($allowedFieldsConfiguration['extra_fields']) ? $allowedFieldsConfiguration['extra_fields'] : [];
  26. }
  27. $gMapsPlugin = GoogleMapsPlugin::create();
  28. $geolocalization = $gMapsPlugin->get('enable_api') === 'true';
  29. if ($geolocalization) {
  30. $gmapsApiKey = $gMapsPlugin->get('api_key');
  31. $htmlHeadXtra[] = '<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?sensor=true&key='.$gmapsApiKey.'" ></script>';
  32. }
  33. $htmlHeadXtra[] = api_get_password_checker_js('#username', '#pass1');
  34. // User is not allowed if Terms and Conditions are disabled and
  35. // registration is disabled too.
  36. $isNotAllowedHere = api_get_setting('allow_terms_conditions') === 'false' && api_get_setting('allow_registration') === 'false';
  37. if ($isNotAllowedHere) {
  38. api_not_allowed(true, get_lang('RegistrationDisabled'));
  39. }
  40. if (!empty($_SESSION['user_language_choice'])) {
  41. $user_selected_language = $_SESSION['user_language_choice'];
  42. } elseif (!empty($_SESSION['_user']['language'])) {
  43. $user_selected_language = $_SESSION['_user']['language'];
  44. } else {
  45. $user_selected_language = api_get_setting('platformLanguage');
  46. }
  47. $form = new FormValidator('registration');
  48. $user_already_registered_show_terms = false;
  49. if (api_get_setting('allow_terms_conditions') == 'true') {
  50. $user_already_registered_show_terms = isset($_SESSION['term_and_condition']['user_id']);
  51. if (api_is_anonymous() === true) {
  52. $user_already_registered_show_terms = false;
  53. }
  54. }
  55. $sessionPremiumChecker = Session::read('SessionIsPremium');
  56. $sessionId = Session::read('sessionId');
  57. // Direct Link Session Subscription feature #12220
  58. $sessionRedirect = isset($_REQUEST['s']) && !empty($_REQUEST['s']) ? $_REQUEST['s'] : null;
  59. $onlyOneCourseSessionRedirect = isset($_REQUEST['cr']) && !empty($_REQUEST['cr']) ? $_REQUEST['cr'] : null;
  60. if (api_get_configuration_value('allow_redirect_to_session_after_inscription_about')) {
  61. if (!empty($sessionRedirect)) {
  62. Session::write('session_redirect', $sessionRedirect);
  63. Session::write('only_one_course_session_redirect', $onlyOneCourseSessionRedirect);
  64. }
  65. }
  66. // Direct Link Subscription feature #5299
  67. $course_code_redirect = isset($_REQUEST['c']) && !empty($_REQUEST['c']) ? $_REQUEST['c'] : null;
  68. $exercise_redirect = isset($_REQUEST['e']) && !empty($_REQUEST['e']) ? $_REQUEST['e'] : null;
  69. if (!empty($course_code_redirect)) {
  70. Session::write('course_redirect', $course_code_redirect);
  71. Session::write('exercise_redirect', $exercise_redirect);
  72. }
  73. if ($user_already_registered_show_terms === false) {
  74. if (api_is_western_name_order()) {
  75. // FIRST NAME and LAST NAME
  76. $form->addElement('text', 'firstname', get_lang('FirstName'), array('size' => 40));
  77. $form->addElement('text', 'lastname', get_lang('LastName'), array('size' => 40));
  78. } else {
  79. // LAST NAME and FIRST NAME
  80. $form->addElement('text', 'lastname', get_lang('LastName'), array('size' => 40));
  81. $form->addElement('text', 'firstname', get_lang('FirstName'), array('size' => 40));
  82. }
  83. $form->applyFilter(array('lastname', 'firstname'), 'trim');
  84. $form->addRule('lastname', get_lang('ThisFieldIsRequired'), 'required');
  85. $form->addRule('firstname', get_lang('ThisFieldIsRequired'), 'required');
  86. // EMAIL
  87. $form->addElement('text', 'email', get_lang('Email'), array('size' => 40));
  88. if (api_get_setting('registration', 'email') === 'true') {
  89. $form->addRule('email', get_lang('ThisFieldIsRequired'), 'required');
  90. }
  91. if (api_get_setting('login_is_email') === 'true') {
  92. $form->applyFilter('email', 'trim');
  93. if (api_get_setting('registration', 'email') != 'true') {
  94. $form->addRule('email', get_lang('ThisFieldIsRequired'), 'required');
  95. }
  96. $form->addRule(
  97. 'email',
  98. sprintf(
  99. get_lang('UsernameMaxXCharacters'),
  100. (string) USERNAME_MAX_LENGTH
  101. ),
  102. 'maxlength',
  103. USERNAME_MAX_LENGTH
  104. );
  105. $form->addRule('email', get_lang('UserTaken'), 'username_available');
  106. }
  107. $form->addRule('email', get_lang('EmailWrong'), 'email');
  108. if (api_get_setting('openid_authentication') === 'true') {
  109. $form->addElement('text', 'openid', get_lang('OpenIDURL'), array('size' => 40));
  110. }
  111. // OFFICIAL CODE
  112. if (CONFVAL_ASK_FOR_OFFICIAL_CODE) {
  113. if (in_array('official_code', $allowedFields)) {
  114. $form->addElement(
  115. 'text',
  116. 'official_code',
  117. get_lang('OfficialCode'),
  118. array('size' => 40)
  119. );
  120. if (api_get_setting('registration', 'officialcode') == 'true') {
  121. $form->addRule(
  122. 'official_code',
  123. get_lang('ThisFieldIsRequired'),
  124. 'required'
  125. );
  126. }
  127. }
  128. }
  129. // USERNAME
  130. if (api_get_setting('login_is_email') != 'true') {
  131. $form->addText(
  132. 'username',
  133. get_lang('UserName'),
  134. true,
  135. array(
  136. 'id' => 'username',
  137. 'size' => USERNAME_MAX_LENGTH,
  138. 'autocomplete' => 'off'
  139. )
  140. );
  141. $form->applyFilter('username', 'trim');
  142. $form->addRule('username', get_lang('ThisFieldIsRequired'), 'required');
  143. $form->addRule(
  144. 'username',
  145. sprintf(
  146. get_lang('UsernameMaxXCharacters'),
  147. (string) USERNAME_MAX_LENGTH
  148. ),
  149. 'maxlength',
  150. USERNAME_MAX_LENGTH
  151. );
  152. $form->addRule('username', get_lang('UsernameWrong'), 'username');
  153. $form->addRule('username', get_lang('UserTaken'), 'username_available');
  154. }
  155. // PASSWORD
  156. $form->addElement(
  157. 'password',
  158. 'pass1',
  159. get_lang('Pass'),
  160. array('id' => 'pass1', 'size' => 20, 'autocomplete' => 'off')
  161. );
  162. $checkPass = api_get_setting('allow_strength_pass_checker');
  163. if ($checkPass === 'true') {
  164. $form->addElement('label', null, '<div id="password_progress"></div>');
  165. }
  166. $form->addElement(
  167. 'password',
  168. 'pass2',
  169. get_lang('Confirmation'),
  170. array('id' => 'pass2', 'size' => 20, 'autocomplete' => 'off')
  171. );
  172. $form->addRule('pass1', get_lang('ThisFieldIsRequired'), 'required');
  173. $form->addRule('pass2', get_lang('ThisFieldIsRequired'), 'required');
  174. $form->addRule(array('pass1', 'pass2'), get_lang('PassTwo'), 'compare');
  175. $form->addPasswordRule('pass1');
  176. // PHONE
  177. if (in_array('phone', $allowedFields)) {
  178. $form->addElement(
  179. 'text',
  180. 'phone',
  181. get_lang('Phone'),
  182. array('size' => 20)
  183. );
  184. if (api_get_setting('registration', 'phone') == 'true') {
  185. $form->addRule(
  186. 'phone',
  187. get_lang('ThisFieldIsRequired'),
  188. 'required'
  189. );
  190. }
  191. }
  192. // Language
  193. if (in_array('language', $allowedFields)) {
  194. if (api_get_setting('registration', 'language') == 'true') {
  195. $form->addSelectLanguage(
  196. 'language',
  197. get_lang('Language')
  198. );
  199. }
  200. }
  201. // STUDENT/TEACHER
  202. if (api_get_setting('allow_registration_as_teacher') != 'false') {
  203. if (in_array('status', $allowedFields)) {
  204. $form->addElement(
  205. 'radio',
  206. 'status',
  207. get_lang('Profile'),
  208. get_lang('RegStudent'),
  209. STUDENT
  210. );
  211. $form->addElement(
  212. 'radio',
  213. 'status',
  214. null,
  215. get_lang('RegAdmin'),
  216. COURSEMANAGER
  217. );
  218. }
  219. }
  220. $captcha = api_get_setting('allow_captcha');
  221. $allowCaptcha = $captcha === 'true';
  222. if ($allowCaptcha) {
  223. $ajax = api_get_path(WEB_AJAX_PATH).'form.ajax.php?a=get_captcha';
  224. $options = array(
  225. 'width' => 220,
  226. 'height' => 90,
  227. 'callback' => $ajax.'&var='.basename(__FILE__, '.php'),
  228. 'sessionVar' => basename(__FILE__, '.php'),
  229. 'imageOptions' => array(
  230. 'font_size' => 20,
  231. 'font_path' => api_get_path(SYS_FONTS_PATH).'opensans/',
  232. 'font_file' => 'OpenSans-Regular.ttf',
  233. //'output' => 'gif'
  234. )
  235. );
  236. $captcha_question = $form->addElement(
  237. 'CAPTCHA_Image',
  238. 'captcha_question',
  239. '',
  240. $options
  241. );
  242. $form->addElement('static', null, null, get_lang('ClickOnTheImageForANewOne'));
  243. $form->addElement(
  244. 'text',
  245. 'captcha',
  246. get_lang('EnterTheLettersYouSee'),
  247. array('size' => 40)
  248. );
  249. $form->addRule(
  250. 'captcha',
  251. get_lang('EnterTheCharactersYouReadInTheImage'),
  252. 'required',
  253. null,
  254. 'client'
  255. );
  256. $form->addRule(
  257. 'captcha',
  258. get_lang('TheTextYouEnteredDoesNotMatchThePicture'),
  259. 'CAPTCHA',
  260. $captcha_question
  261. );
  262. }
  263. // EXTENDED FIELDS
  264. if (api_get_setting('extended_profile') == 'true' &&
  265. api_get_setting('extendedprofile_registration', 'mycomptetences') == 'true'
  266. ) {
  267. $form->addHtmlEditor(
  268. 'competences',
  269. get_lang('MyCompetences'),
  270. false,
  271. false,
  272. array('ToolbarSet' => 'register', 'Width' => '100%', 'Height' => '130')
  273. );
  274. }
  275. if (api_get_setting('extended_profile') == 'true' &&
  276. api_get_setting('extendedprofile_registration', 'mydiplomas') == 'true'
  277. ) {
  278. $form->addHtmlEditor(
  279. 'diplomas',
  280. get_lang('MyDiplomas'),
  281. false,
  282. false,
  283. array('ToolbarSet' => 'register', 'Width' => '100%', 'Height' => '130')
  284. );
  285. }
  286. if (api_get_setting('extended_profile') == 'true' &&
  287. api_get_setting('extendedprofile_registration', 'myteach') == 'true'
  288. ) {
  289. $form->addHtmlEditor(
  290. 'teach',
  291. get_lang('MyTeach'),
  292. false,
  293. false,
  294. array('ToolbarSet' => 'register', 'Width' => '100%', 'Height' => '130')
  295. );
  296. }
  297. if (api_get_setting('extended_profile') == 'true' &&
  298. api_get_setting('extendedprofile_registration', 'mypersonalopenarea') == 'true'
  299. ) {
  300. $form->addHtmlEditor(
  301. 'openarea',
  302. get_lang('MyPersonalOpenArea'),
  303. false,
  304. false,
  305. array('ToolbarSet' => 'register', 'Width' => '100%', 'Height' => '130')
  306. );
  307. }
  308. if (api_get_setting('extended_profile') === 'true') {
  309. if (api_get_setting('extendedprofile_registration', 'mycomptetences') === 'true' &&
  310. api_get_setting('extendedprofile_registrationrequired', 'mycomptetences') === 'true'
  311. ) {
  312. $form->addRule('competences', get_lang('ThisFieldIsRequired'), 'required');
  313. }
  314. if (api_get_setting('extendedprofile_registration', 'mydiplomas') === 'true' &&
  315. api_get_setting('extendedprofile_registrationrequired', 'mydiplomas') === 'true'
  316. ) {
  317. $form->addRule('diplomas', get_lang('ThisFieldIsRequired'), 'required');
  318. }
  319. if (api_get_setting('extendedprofile_registration', 'myteach') === 'true' &&
  320. api_get_setting('extendedprofile_registrationrequired', 'myteach') === 'true'
  321. ) {
  322. $form->addRule('teach', get_lang('ThisFieldIsRequired'), 'required');
  323. }
  324. if (api_get_setting('extendedprofile_registration', 'mypersonalopenarea') === 'true' &&
  325. api_get_setting('extendedprofile_registrationrequired', 'mypersonalopenarea') === 'true'
  326. ) {
  327. $form->addRule('openarea', get_lang('ThisFieldIsRequired'), 'required');
  328. }
  329. }
  330. // EXTRA FIELDS
  331. if (array_key_exists('extra_fields', $allowedFields) ||
  332. in_array('extra_fields', $allowedFields)
  333. ) {
  334. $extraField = new ExtraField('user');
  335. $extraFieldList = isset($allowedFields['extra_fields']) && is_array($allowedFields['extra_fields']) ? $allowedFields['extra_fields'] : [];
  336. $returnParams = $extraField->addElements(
  337. $form,
  338. 0,
  339. [],
  340. false,
  341. false,
  342. $extraFieldList
  343. );
  344. }
  345. }
  346. if (isset($_SESSION['user_language_choice']) && $_SESSION['user_language_choice'] != '') {
  347. $defaults['language'] = $_SESSION['user_language_choice'];
  348. } else {
  349. $defaults['language'] = api_get_setting('platformLanguage');
  350. }
  351. if (!empty($_GET['username'])) {
  352. $defaults['username'] = Security::remove_XSS($_GET['username']);
  353. }
  354. if (!empty($_GET['email'])) {
  355. $defaults['email'] = Security::remove_XSS($_GET['email']);
  356. }
  357. if (!empty($_GET['phone'])) {
  358. $defaults['phone'] = Security::remove_XSS($_GET['phone']);
  359. }
  360. if (api_get_setting('openid_authentication') === 'true' && !empty($_GET['openid'])) {
  361. $defaults['openid'] = Security::remove_XSS($_GET['openid']);
  362. }
  363. $defaults['status'] = STUDENT;
  364. $defaults['extra_mail_notify_invitation'] = 1;
  365. $defaults['extra_mail_notify_message'] = 1;
  366. $defaults['extra_mail_notify_group_message'] = 1;
  367. $form->setDefaults($defaults);
  368. $content = null;
  369. if (!CustomPages::enabled()) {
  370. // Load terms & conditions from the current lang
  371. if (api_get_setting('allow_terms_conditions') === 'true') {
  372. $get = array_keys($_GET);
  373. if (isset($get)) {
  374. if (isset($get[0]) && $get[0] == 'legal') {
  375. $language = api_get_interface_language();
  376. $language = api_get_language_id($language);
  377. $term_preview = LegalManager::get_last_condition($language);
  378. if (!$term_preview) {
  379. //look for the default language
  380. $language = api_get_setting('platformLanguage');
  381. $language = api_get_language_id($language);
  382. $term_preview = LegalManager::get_last_condition($language);
  383. }
  384. $tool_name = get_lang('TermsAndConditions');
  385. Display::display_header($tool_name);
  386. if (!empty($term_preview['content'])) {
  387. echo $term_preview['content'];
  388. } else {
  389. echo get_lang('ComingSoon');
  390. }
  391. Display::display_footer();
  392. exit;
  393. }
  394. }
  395. }
  396. $tool_name = get_lang('Registration', null, (!empty($_POST['language']) ? $_POST['language'] : $_user['language']));
  397. if (api_get_setting('allow_terms_conditions') === 'true' && $user_already_registered_show_terms) {
  398. $tool_name = get_lang('TermsAndConditions');
  399. }
  400. }
  401. $home = api_get_path(SYS_APP_PATH).'home/';
  402. if (api_is_multiple_url_enabled()) {
  403. $access_url_id = api_get_current_access_url_id();
  404. if ($access_url_id != -1) {
  405. $url_info = api_get_access_url($access_url_id);
  406. $url = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $url_info['url']));
  407. $clean_url = api_replace_dangerous_char($url);
  408. $clean_url = str_replace('/', '-', $clean_url);
  409. $clean_url .= '/';
  410. $home_old = api_get_path(SYS_APP_PATH).'home/';
  411. $home = api_get_path(SYS_APP_PATH).'home/'.$clean_url;
  412. }
  413. }
  414. if (file_exists($home.'register_top_'.$user_selected_language.'.html')) {
  415. $home_top_temp = @(string) file_get_contents($home.'register_top_'.$user_selected_language.'.html');
  416. $open = str_replace('{rel_path}', api_get_path(REL_PATH), $home_top_temp);
  417. $open = api_to_system_encoding($open, api_detect_encoding(strip_tags($open)));
  418. if (!empty($open)) {
  419. $content = '<div class="well_border">'.$open.'</div>';
  420. }
  421. }
  422. // Forbidden to self-register
  423. if ($isNotAllowedHere) {
  424. api_not_allowed(true, get_lang('RegistrationDisabled'));
  425. }
  426. if (api_get_setting('allow_registration') === 'approval') {
  427. $content .= Display::return_message(get_lang('YourAccountHasToBeApproved'));
  428. }
  429. //if openid was not found
  430. if (!empty($_GET['openid_msg']) && $_GET['openid_msg'] == 'idnotfound') {
  431. $content .= Display::return_message(get_lang('OpenIDCouldNotBeFoundPleaseRegister'));
  432. }
  433. $showTerms = false;
  434. // Terms and conditions
  435. if (api_get_setting('allow_terms_conditions') == 'true') {
  436. if (!api_is_platform_admin()) {
  437. if (api_get_setting('show_terms_if_profile_completed') === 'true') {
  438. $userInfo = api_get_user_info();
  439. if ($userInfo && $userInfo['status'] != ANONYMOUS) {
  440. if ((int) $userInfo['profile_completed'] !== 1) {
  441. api_not_allowed(true);
  442. }
  443. }
  444. }
  445. }
  446. $language = api_get_interface_language();
  447. $language = api_get_language_id($language);
  448. $term_preview = LegalManager::get_last_condition($language);
  449. if (!$term_preview) {
  450. //we load from the platform
  451. $language = api_get_setting('platformLanguage');
  452. $language = api_get_language_id($language);
  453. $term_preview = LegalManager::get_last_condition($language);
  454. //if is false we load from english
  455. if (!$term_preview) {
  456. $language = api_get_language_id('english'); //this must work
  457. $term_preview = LegalManager::get_last_condition($language);
  458. }
  459. }
  460. // Version and language
  461. $form->addElement('hidden', 'legal_accept_type', $term_preview['version'].':'.$term_preview['language_id']);
  462. $form->addElement('hidden', 'legal_info', $term_preview['id'].':'.$term_preview['language_id']);
  463. if ($term_preview['type'] == 1) {
  464. $form->addElement(
  465. 'checkbox',
  466. 'legal_accept',
  467. null,
  468. get_lang('IHaveReadAndAgree').'&nbsp;<a href="inscription.php?legal" target="_blank">'.get_lang('TermsAndConditions').'</a>'
  469. );
  470. $form->addRule('legal_accept', get_lang('ThisFieldIsRequired'), 'required');
  471. } else {
  472. $preview = LegalManager::show_last_condition($term_preview);
  473. $form->addElement('label', null, $preview);
  474. }
  475. $showTerms = true;
  476. }
  477. $allowDoubleValidation = api_get_configuration_value('allow_double_validation_in_registration');
  478. if ($allowDoubleValidation && $showTerms == false) {
  479. $htmlHeadXtra[] = '<script>
  480. $(document).ready(function() {
  481. $("#pre_validation").click(function() {
  482. $(this).hide();
  483. $("#final_button").show();
  484. });
  485. });
  486. </script>';
  487. $form->addLabel(
  488. null,
  489. Display::url(
  490. get_lang('Ok'),
  491. 'javascript:void',
  492. ['class' => 'btn btn-default', 'id' => 'pre_validation']
  493. )
  494. );
  495. $form->addHtml('<div id="final_button" style="display: none">');
  496. $form->addLabel(
  497. null,
  498. Display::return_message(get_lang('DoubleValidationMessage'), 'info', false)
  499. );
  500. $form->addButton('submit', get_lang('RegisterUser'), '', 'primary');
  501. $form->addHtml('</div>');
  502. } else {
  503. $form->addButtonNext(get_lang('RegisterUser'));
  504. }
  505. $course_code_redirect = Session::read('course_redirect');
  506. $sessionToRedirect = Session::read('session_redirect');
  507. if ($form->validate()) {
  508. $values = $form->getSubmitValues(1);
  509. // Make *sure* the login isn't too long
  510. if (isset($values['username'])) {
  511. $values['username'] = api_substr($values['username'], 0, USERNAME_MAX_LENGTH);
  512. }
  513. if (api_get_setting('allow_registration_as_teacher') === 'false') {
  514. $values['status'] = STUDENT;
  515. }
  516. if (empty($values['official_code']) && !empty($values['username'])) {
  517. $values['official_code'] = api_strtoupper($values['username']);
  518. }
  519. if (api_get_setting('login_is_email') == 'true') {
  520. $values['username'] = $values['email'];
  521. }
  522. if ($user_already_registered_show_terms &&
  523. api_get_setting('allow_terms_conditions') === 'true'
  524. ) {
  525. $user_id = $_SESSION['term_and_condition']['user_id'];
  526. $is_admin = UserManager::is_admin($user_id);
  527. Session::write('is_platformAdmin', $is_admin);
  528. } else {
  529. // Moved here to include extra fields when creating a user. Formerly placed after user creation
  530. // Register extra fields
  531. $extras = array();
  532. foreach ($values as $key => $value) {
  533. if (substr($key, 0, 6) == 'extra_') {
  534. //an extra field
  535. $extras[substr($key, 6)] = $value;
  536. } elseif (strpos($key, 'remove_extra_') !== false) {
  537. $extra_value = Security::filter_filename(urldecode(key($value)));
  538. // To remove from user_field_value and folder
  539. UserManager::update_extra_field_value(
  540. $user_id,
  541. substr($key, 13),
  542. $extra_value
  543. );
  544. }
  545. }
  546. $status = isset($values['status']) ? $values['status'] : STUDENT;
  547. $phone = isset($values['phone']) ? $values['phone'] : null;
  548. $values['language'] = isset($values['language']) ? $values['language'] : api_get_interface_language();
  549. $values['address'] = isset($values['address']) ? $values['address'] : '';
  550. // Creates a new user
  551. $user_id = UserManager::create_user(
  552. $values['firstname'],
  553. $values['lastname'],
  554. $status,
  555. $values['email'],
  556. $values['username'],
  557. $values['pass1'],
  558. $values['official_code'],
  559. $values['language'],
  560. $phone,
  561. null,
  562. PLATFORM_AUTH_SOURCE,
  563. null,
  564. 1,
  565. 0,
  566. $extras,
  567. null,
  568. true,
  569. false,
  570. $values['address'],
  571. false,
  572. $form
  573. );
  574. // Update the extra fields
  575. $count_extra_field = count($extras);
  576. if ($count_extra_field > 0 && is_integer($user_id)) {
  577. foreach ($extras as $key => $value) {
  578. // For array $value -> if exists key 'tmp_name' then must not be empty
  579. // This avoid delete from user field value table when doesn't upload a file
  580. if (is_array($value)) {
  581. if (array_key_exists('tmp_name', $value) && empty($value['tmp_name'])) {
  582. //Nothing to do
  583. } else {
  584. if (array_key_exists('tmp_name', $value)) {
  585. $value['tmp_name'] = Security::filter_filename($value['tmp_name']);
  586. }
  587. if (array_key_exists('name', $value)) {
  588. $value['name'] = Security::filter_filename($value['name']);
  589. }
  590. UserManager::update_extra_field_value($user_id, $key, $value);
  591. }
  592. } else {
  593. UserManager::update_extra_field_value($user_id, $key, $value);
  594. }
  595. }
  596. }
  597. if ($user_id) {
  598. // Storing the extended profile
  599. $store_extended = false;
  600. $sql = "UPDATE ".Database::get_main_table(TABLE_MAIN_USER)." SET ";
  601. if (api_get_setting('extended_profile') == 'true' &&
  602. api_get_setting('extendedprofile_registration', 'mycomptetences') == 'true'
  603. ) {
  604. $sql_set[] = "competences = '".Database::escape_string($values['competences'])."'";
  605. $store_extended = true;
  606. }
  607. if (api_get_setting('extended_profile') == 'true' &&
  608. api_get_setting('extendedprofile_registration', 'mydiplomas') == 'true'
  609. ) {
  610. $sql_set[] = "diplomas = '".Database::escape_string($values['diplomas'])."'";
  611. $store_extended = true;
  612. }
  613. if (api_get_setting('extended_profile') == 'true' &&
  614. api_get_setting('extendedprofile_registration', 'myteach') == 'true'
  615. ) {
  616. $sql_set[] = "teach = '".Database::escape_string($values['teach'])."'";
  617. $store_extended = true;
  618. }
  619. if (api_get_setting('extended_profile') == 'true' &&
  620. api_get_setting('extendedprofile_registration', 'mypersonalopenarea') == 'true'
  621. ) {
  622. $sql_set[] = "openarea = '".Database::escape_string($values['openarea'])."'";
  623. $store_extended = true;
  624. }
  625. if ($store_extended) {
  626. $sql .= implode(',', $sql_set);
  627. $sql .= " WHERE user_id = ".intval($user_id)."";
  628. Database::query($sql);
  629. }
  630. // Saving user to Session if it was set
  631. if (!empty($sessionToRedirect) && !$sessionPremiumChecker) {
  632. $sessionInfo = api_get_session_info($sessionToRedirect);
  633. if (!empty($sessionInfo)) {
  634. SessionManager::subscribe_users_to_session(
  635. $sessionToRedirect,
  636. [$user_id],
  637. SESSION_VISIBLE_READ_ONLY,
  638. false
  639. );
  640. }
  641. }
  642. // Saving user to course if it was set.
  643. if (!empty($course_code_redirect)) {
  644. $course_info = api_get_course_info($course_code_redirect);
  645. if (!empty($course_info)) {
  646. if (in_array(
  647. $course_info['visibility'],
  648. array(
  649. COURSE_VISIBILITY_OPEN_PLATFORM,
  650. COURSE_VISIBILITY_OPEN_WORLD
  651. )
  652. )
  653. ) {
  654. CourseManager::subscribe_user(
  655. $user_id,
  656. $course_info['code']
  657. );
  658. }
  659. }
  660. }
  661. /* If the account has to be approved then we set the account to inactive,
  662. sent a mail to the platform admin and exit the page.*/
  663. if (api_get_setting('allow_registration') === 'approval') {
  664. // 1. Send mail to all platform admin
  665. $emailsubject = get_lang('ApprovalForNewAccount', null, $values['language']).': '.$values['username'];
  666. $emailbody = get_lang('ApprovalForNewAccount', null, $values['language'])."\n";
  667. $emailbody .= get_lang('UserName', null, $values['language']).': '.$values['username']."\n";
  668. if (api_is_western_name_order()) {
  669. $emailbody .= get_lang('FirstName', null, $values['language']).': '.$values['firstname']."\n";
  670. $emailbody .= get_lang('LastName', null, $values['language']).': '.$values['lastname']."\n";
  671. } else {
  672. $emailbody .= get_lang('LastName', null, $values['language']).': '.$values['lastname']."\n";
  673. $emailbody .= get_lang('FirstName', null, $values['language']).': '.$values['firstname']."\n";
  674. }
  675. $emailbody .= get_lang('Email', null, $values['language']).': '.$values['email']."\n";
  676. $emailbody .= get_lang('Status', null, $values['language']).': '.$values['status']."\n\n";
  677. $url_edit = Display::url(
  678. api_get_path(WEB_CODE_PATH).'admin/user_edit.php?user_id='.$user_id,
  679. api_get_path(WEB_CODE_PATH).'admin/user_edit.php?user_id='.$user_id
  680. );
  681. $emailbody .= get_lang('ManageUser', null, $values['language']).": $url_edit";
  682. $admins = UserManager::get_all_administrators();
  683. foreach ($admins as $admin_info) {
  684. MessageManager::send_message(
  685. $admin_info['user_id'],
  686. $emailsubject,
  687. $emailbody,
  688. [],
  689. [],
  690. null,
  691. null,
  692. null,
  693. null,
  694. $user_id
  695. );
  696. }
  697. // 2. set account inactive
  698. $sql = "UPDATE $TABLE_USER SET active='0' WHERE user_id = ".$user_id;
  699. Database::query($sql);
  700. // 3. exit the page
  701. unset($user_id);
  702. Display::display_header($tool_name);
  703. echo Display::page_header($tool_name);
  704. echo $content;
  705. Display::display_footer();
  706. exit;
  707. } elseif (api_get_setting('allow_registration') === 'confirmation') {
  708. $TABLE_USER = Database::get_main_table(TABLE_MAIN_USER);
  709. // 1. Send mail to the user
  710. $thisUser = api_get_user_entity($user_id);
  711. UserManager::sendUserConfirmationMail($thisUser);
  712. // 2. set account inactive
  713. $sql = "UPDATE $TABLE_USER SET active='0' WHERE user_id = ".$user_id;
  714. Database::query($sql);
  715. // 3. exit the page
  716. unset($user_id);
  717. Display::display_header(get_lang('ConfirmationForNewAccount', null, $values['language']));
  718. echo Display::page_header(get_lang('YouNeedConfirmYourAccountViaEmailToAccessThePlatform'));
  719. echo $content;
  720. Display::display_footer();
  721. exit;
  722. }
  723. }
  724. }
  725. // Terms & Conditions
  726. if (api_get_setting('allow_terms_conditions') === 'true') {
  727. // Update the terms & conditions.
  728. if (isset($values['legal_accept_type'])) {
  729. $cond_array = explode(':', $values['legal_accept_type']);
  730. if (!empty($cond_array[0]) && !empty($cond_array[1])) {
  731. $time = time();
  732. $condition_to_save = intval($cond_array[0]).':'.intval($cond_array[1]).':'.$time;
  733. UserManager::update_extra_field_value(
  734. $user_id,
  735. 'legal_accept',
  736. $condition_to_save
  737. );
  738. $bossList = UserManager::getStudentBossList($user_id);
  739. if (!empty($bossList)) {
  740. $bossList = array_column($bossList, 'boss_id');
  741. $currentUserInfo = api_get_user_info($user_id);
  742. foreach ($bossList as $bossId) {
  743. $subjectEmail = sprintf(
  744. get_lang('UserXSignedTheAgreement'),
  745. $currentUserInfo['complete_name']
  746. );
  747. $contentEmail = sprintf(
  748. get_lang('UserXSignedTheAgreementTheY'),
  749. $currentUserInfo['complete_name'],
  750. api_get_local_time($time)
  751. );
  752. MessageManager::send_message_simple(
  753. $bossId,
  754. $subjectEmail,
  755. $contentEmail,
  756. $user_id
  757. );
  758. }
  759. }
  760. }
  761. }
  762. $values = api_get_user_info($user_id);
  763. }
  764. /* SESSION REGISTERING */
  765. /* @todo move this in a function */
  766. $_user['firstName'] = stripslashes($values['firstname']);
  767. $_user['lastName'] = stripslashes($values['lastname']);
  768. $_user['mail'] = $values['email'];
  769. $_user['language'] = $values['language'];
  770. $_user['user_id'] = $user_id;
  771. Session::write('_user', $_user);
  772. $is_allowedCreateCourse = isset($values['status']) && $values['status'] == 1;
  773. $usersCanCreateCourse = api_is_allowed_to_create_course();
  774. Session::write('is_allowedCreateCourse', $is_allowedCreateCourse);
  775. // Stats
  776. Event::eventLogin($user_id);
  777. // last user login date is now
  778. $user_last_login_datetime = 0; // used as a unix timestamp it will correspond to : 1 1 1970
  779. Session::write('user_last_login_datetime', $user_last_login_datetime);
  780. $recipient_name = api_get_person_name($values['firstname'], $values['lastname']);
  781. $text_after_registration =
  782. '<p>'.
  783. get_lang('Dear', null, $_user['language']).' '.
  784. stripslashes(Security::remove_XSS($recipient_name)).',<br /><br />'.
  785. get_lang('PersonalSettings').".</p>";
  786. $form_data = array(
  787. 'button' => Display::button(
  788. 'next',
  789. get_lang('Next', null, $_user['language']),
  790. array('class' => 'btn btn-primary btn-large')
  791. ),
  792. 'message' => '',
  793. 'action' => api_get_path(WEB_PATH).'user_portal.php',
  794. 'go_button' => ''
  795. );
  796. if (api_get_setting('allow_terms_conditions') === 'true' && $user_already_registered_show_terms) {
  797. if (api_get_setting('load_term_conditions_section') === 'login') {
  798. $form_data['action'] = api_get_path(WEB_PATH).'user_portal.php';
  799. } else {
  800. $courseInfo = api_get_course_info();
  801. if (!empty($courseInfo)) {
  802. $form_data['action'] = $courseInfo['course_public_url'].'?id_session='.api_get_session_id();
  803. $cidReset = true;
  804. Session::erase('_course');
  805. Session::erase('_cid');
  806. } else {
  807. $form_data['action'] = api_get_path(WEB_PATH).'user_portal.php';
  808. }
  809. }
  810. } else {
  811. if (!empty($values['email'])) {
  812. $text_after_registration .= '<p>'.get_lang('MailHasBeenSent', null, $_user['language']).'.</p>';
  813. }
  814. if ($is_allowedCreateCourse) {
  815. if ($usersCanCreateCourse) {
  816. $form_data['message'] = '<p>'.get_lang('NowGoCreateYourCourse', null, $_user['language'])."</p>";
  817. }
  818. $form_data['action'] = api_get_path(WEB_CODE_PATH).'create_course/add_course.php';
  819. if (api_get_setting('course_validation') === 'true') {
  820. $form_data['button'] = Display::button(
  821. 'next',
  822. get_lang('CreateCourseRequest', null, $_user['language']),
  823. array('class' => 'btn btn-primary btn-large')
  824. );
  825. } else {
  826. $form_data['button'] = Display::button(
  827. 'next',
  828. get_lang('CourseCreate', null, $_user['language']),
  829. array('class' => 'btn btn-primary btn-large')
  830. );
  831. $form_data['go_button'] = '&nbsp;&nbsp;<a href="'.api_get_path(WEB_PATH).'index.php'.'">'.
  832. Display::span(
  833. get_lang('Next', null, $_user['language']),
  834. array('class' => 'btn btn-primary btn-large')
  835. ).'</a>';
  836. }
  837. } else {
  838. if (api_get_setting('allow_students_to_browse_courses') == 'true') {
  839. $form_data['action'] = 'courses.php?action=subscribe';
  840. $form_data['message'] = '<p>'.get_lang('NowGoChooseYourCourses').".</p>";
  841. } else {
  842. $form_data['action'] = api_get_path(WEB_PATH).'user_portal.php';
  843. }
  844. $form_data['button'] = Display::button(
  845. 'next',
  846. get_lang('Next', null, $_user['language']),
  847. array('class' => 'btn btn-primary btn-large')
  848. );
  849. }
  850. }
  851. if ($sessionPremiumChecker && $sessionId) {
  852. header('Location:'.api_get_path(WEB_PLUGIN_PATH).'buycourses/src/process.php?i='.$sessionId.'&t=2');
  853. Session::erase('SessionIsPremium');
  854. Session::erase('sessionId');
  855. exit;
  856. }
  857. SessionManager::redirectToSession();
  858. $redirectBuyCourse = Session::read('buy_course_redirect');
  859. if (!empty($redirectBuyCourse)) {
  860. $form_data['action'] = api_get_path(WEB_PATH).$redirectBuyCourse;
  861. Session::erase('buy_course_redirect');
  862. }
  863. $form_data = CourseManager::redirectToCourse($form_data);
  864. $form_register = new FormValidator('form_register', 'post', $form_data['action']);
  865. if (!empty($form_data['message'])) {
  866. $form_register->addElement('html', $form_data['message'].'<br /><br />');
  867. }
  868. if ($usersCanCreateCourse) {
  869. $form_register->addElement('html', $form_data['button']);
  870. } else {
  871. $form_register->addElement('html', $form_data['go_button']);
  872. }
  873. $text_after_registration .= $form_register->returnForm();
  874. // Just in case
  875. Session::erase('course_redirect');
  876. Session::erase('exercise_redirect');
  877. Session::erase('session_redirect');
  878. Session::erase('only_one_course_session_redirect');
  879. if (CustomPages::enabled() && CustomPages::exists(CustomPages::REGISTRATION_FEEDBACK)) {
  880. CustomPages::display(
  881. CustomPages::REGISTRATION_FEEDBACK,
  882. array('info' => $text_after_registration)
  883. );
  884. } else {
  885. $tpl = new Template($tool_name);
  886. $tpl->assign('inscription_content', $content);
  887. $tpl->assign('text_after_registration', $text_after_registration);
  888. $tpl->assign('hide_header', $hideHeaders);
  889. $inscription = $tpl->get_template('auth/inscription.tpl');
  890. $tpl->display($inscription);
  891. }
  892. } else {
  893. // Custom pages
  894. if (CustomPages::enabled() && CustomPages::exists(CustomPages::REGISTRATION)) {
  895. CustomPages::display(
  896. CustomPages::REGISTRATION,
  897. array('form' => $form, 'content' => $content)
  898. );
  899. } else {
  900. if (!api_is_anonymous()) {
  901. // Saving user to course if it was set.
  902. if (!empty($course_code_redirect)) {
  903. $course_info = api_get_course_info($course_code_redirect);
  904. if (!empty($course_info)) {
  905. if (in_array(
  906. $course_info['visibility'],
  907. array(
  908. COURSE_VISIBILITY_OPEN_PLATFORM,
  909. COURSE_VISIBILITY_OPEN_WORLD
  910. )
  911. )
  912. ) {
  913. CourseManager::subscribe_user(
  914. $user_id,
  915. $course_info['code']
  916. );
  917. }
  918. }
  919. }
  920. CourseManager::redirectToCourse([]);
  921. }
  922. $tpl = new Template($tool_name);
  923. $tpl->assign('inscription_header', Display::page_header($tool_name));
  924. $tpl->assign('inscription_content', $content);
  925. $tpl->assign('form', $form->returnForm());
  926. $tpl->assign('hide_header', $hideHeaders);
  927. $inscription = $tpl->get_template('auth/inscription.tpl');
  928. $tpl->display($inscription);
  929. }
  930. }