Beispiel #1
0
 /**
  * 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));
 }