1 | <?php |
||
2 | /* For license terms, see /license.txt */ |
||
3 | |||
4 | require_once __DIR__.'/../inc/global.inc.php'; |
||
5 | |||
6 | $token = $_GET['token'] ?? ''; |
||
7 | |||
8 | if (!ctype_alnum($token)) { |
||
9 | $token = ''; |
||
10 | } |
||
11 | |||
12 | // Build the form |
||
13 | $form = new FormValidator('reset', 'POST', api_get_self().'?token='.$token); |
||
14 | $form->addElement('header', get_lang('Reset password')); |
||
15 | $form->addHidden('token', $token); |
||
16 | $form->addElement( |
||
17 | 'password', |
||
18 | 'pass1', |
||
19 | get_lang('Password'), |
||
20 | [ |
||
21 | 'show_hide' => true, |
||
22 | ] |
||
23 | ); |
||
24 | $form->addElement( |
||
25 | 'password', |
||
26 | 'pass2', |
||
27 | get_lang('Confirm password'), |
||
28 | ['id' => 'pass2', 'size' => 20, 'autocomplete' => 'off'] |
||
29 | ); |
||
30 | $form->addRule('pass1', get_lang('Required field'), 'required'); |
||
31 | $form->addRule('pass2', get_lang('Required field'), 'required'); |
||
32 | $form->addRule(['pass1', 'pass2'], get_lang('You have typed two different passwords'), 'compare'); |
||
33 | $form->addButtonSave(get_lang('Update')); |
||
34 | |||
35 | $ttl = api_get_setting('user_reset_password_token_limit'); |
||
36 | if (empty($ttl)) { |
||
37 | $ttl = 3600; |
||
38 | } |
||
39 | |||
40 | if ($form->validate()) { |
||
41 | $values = $form->exportValues(); |
||
42 | $password = $values['pass1']; |
||
43 | $token = $values['token']; |
||
44 | |||
45 | /** @var \Chamilo\CoreBundle\Entity\User $user */ |
||
46 | $user = UserManager::getRepository()->findUserByConfirmationToken($token); |
||
47 | if ($user) { |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
48 | if (!$user->isPasswordRequestNonExpired($ttl)) { |
||
49 | Display::addFlash(Display::return_message(get_lang('Link expired, please try again.')), 'warning'); |
||
50 | header('Location: '.api_get_path(WEB_CODE_PATH).'auth/lostPassword.php'); |
||
51 | exit; |
||
52 | } |
||
53 | |||
54 | $user->setPlainPassword($password); |
||
55 | $userManager = UserManager::getRepository(); |
||
56 | $userManager->updateUser($user, true); |
||
57 | |||
58 | $user->setConfirmationToken(null); |
||
59 | $user->setPasswordRequestedAt(null); |
||
60 | |||
61 | Database::getManager()->persist($user); |
||
62 | Database::getManager()->flush(); |
||
63 | |||
64 | if ('true' === api_get_setting('platform.force_renew_password_at_first_login')) { |
||
65 | $extraFieldValue = new ExtraFieldValue('user'); |
||
66 | $value = $extraFieldValue->get_values_by_handler_and_field_variable($user->getId(), 'ask_new_password'); |
||
67 | if (!empty($value) && isset($value['value']) && 1 === (int) $value['value']) { |
||
68 | $extraFieldValue->delete($value['id']); |
||
69 | } |
||
70 | } |
||
71 | |||
72 | Display::addFlash(Display::return_message(get_lang('Update successful'))); |
||
73 | header('Location: '.api_get_path(WEB_PATH)); |
||
74 | exit; |
||
75 | } else { |
||
76 | Display::addFlash( |
||
77 | Display::return_message(get_lang('Link expired, please try again.')) |
||
78 | ); |
||
79 | } |
||
80 | } |
||
81 | |||
82 | $tpl = new Template(null); |
||
83 | $tpl->assign('content', $form->toHtml()); |
||
84 | $tpl->display_one_col_template(); |
||
85 |