/** * Recuperacion de contraseña * - Si no llega nada, mostrar formulario para que pongan su username y el email correspondiente * - Si llega post es una peticion, comprobar que el username y el email que han puesto son válidos * si no lo son, dejarlos en el formulario y mensaje de error * si son válidos, enviar email con la url y mensaje de ok * * - Si llega un hash, verificar y darle acceso hasta su dashboard /profile/access para que la cambien * * @param string $token Codigo */ public function recover($token = null) { // si el token mola, logueo este usuario y lo llevo a su dashboard if (!empty($token)) { $token = base64_decode($token); $parts = explode('¬', $token); if (count($parts) > 1) { $query = Model\User::query('SELECT id FROM user WHERE email = ? AND token = ?', array($parts[1], $token)); if ($id = $query->fetchColumn()) { if (!empty($id)) { // el token coincide con el email y he obtenido una id Model\User::query('UPDATE user SET active = 1 WHERE id = ?', array($id)); $user = Model\User::get($id); $_SESSION['user'] = $user; $_SESSION['recovering'] = $user->id; throw new Redirection(SEC_URL . '/dashboard/profile/access/recover#password'); } } } $error = Text::get('recover-token-incorrect'); } // password recovery only by email if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['recover'])) { $email = $_POST['email']; if (!empty($email) && Model\User::recover($email)) { $message = Text::get('recover-email-sended'); unset($_POST['email']); } else { $error = Text::get('recover-request-fail'); } } return new View('view/user/recover.html.php', array('error' => $error, 'message' => $message)); }