Пример #1
0
 /**
  * Administración de los nicks del usuario.
  */
 public function action_nick()
 {
     // Asignamos el título.
     $this->template->assign('title', 'Cuenta - Nick');
     // Cargamos la vista.
     $view = View::factory('cuenta/nick');
     // Cargamos el usuario actual.
     $model_usuario = Usuario::usuario();
     $view->assign('email', $model_usuario->email);
     // Valores por defecto.
     $view->assign('nick_actual', $model_usuario->nick);
     $view->assign('nick', '');
     $view->assign('error_nick', NULL);
     $view->assign('error_password', NULL);
     // Listado de nick's reservados.
     $nicks_reservados = $model_usuario->nicks();
     //TODO: Mantener nick's para evitar borrar y poder cambiar.
     //TODO: Mantener nicks por un tiempo limitado.
     // Calculo cuanto hace que cambio su nick.
     if (count($nicks_reservados) !== 0) {
         $fecha_cambio = Usuario::usuario()->ultimo_cambio_nick()->format('U');
     } else {
         // Obtengo fecha de refgistro.
         $fecha_cambio = Usuario::usuario()->registro->format('U');
     }
     // 5184000 === 2 meses.
     $view->assign('tiempo_cambio', $fecha_cambio + 5184000 - date('U'));
     if (Request::method() == 'POST') {
         if (!isset($_POST['nick']) || empty($_POST['nick']) || (!isset($_POST['password']) || empty($_POST['password']))) {
             // Verificamos los datos
             if (!isset($_POST['nick']) || empty($_POST['nick'])) {
                 $view->assign('error_nick', 'Debe ingresar un nuevo nick.');
             } else {
                 $view->assign('nick', $_POST['nick']);
             }
             if (!isset($_POST['password']) || empty($_POST['password'])) {
                 $view->assign('error_password', 'Debe ingresar su contraseña para validar el cambio.');
             }
         } else {
             $nick = $_POST['nick'];
             $password = $_POST['password'];
             $view->assign('nick', $nick);
             // Verifico longitud Nick.
             if (!preg_match('/^[a-zA-Z0-9]{4,20}$/D', $nick)) {
                 $view->assign('error_nick', 'El nick debe tener entre 4 y 20 caracteres alphanuméricos.');
             } else {
                 // Verifico la contraseña.
                 $enc = new Phpass(8, FALSE);
                 if (!$enc->check_password($password, $model_usuario->password)) {
                     $view->assign('error_password', 'La contraseña es incorrecta.');
                 } else {
                     // Verifico que no exista el nick.
                     if ($model_usuario->exists_nick($nick)) {
                         $view->assign('error_nick', 'El nick no está disponible.');
                     } else {
                         // Verifico la cantidad de nick's.
                         if (count($nicks_reservados) >= 3) {
                             $view->assign('error_nick', 'Has superado el máximo de nick\'s utilizados.');
                         } else {
                             // Verifico tiempo de cambio.
                             if ($fecha_cambio + 5184000 - date('U') <= 0) {
                                 // Actualizamos.
                                 $model_usuario->cambiar_nick($nick);
                                 // Recargo los nick's reservados.
                                 $nicks_reservados = $model_usuario->nicks();
                                 // Envio el suceso.
                                 $model_suceso = new Model_Suceso();
                                 //TODO: Implementar campos alphanumericos.
                                 $model_suceso->crear(Usuario::$usuario_id, 'usuario_cambio_nick', Usuario::$usuario_id);
                                 // Informamos resultado.
                                 $view->assign('success', 'El nick se ha actualizado correctamente.');
                                 $view->assign('nick', '');
                                 $view->assign('nick_actual', $nick);
                             } else {
                                 $view->assign('error_nick', 'Solo puedes cambiar tu nick cada 2 meses.');
                             }
                         }
                     }
                 }
             }
         }
     }
     // Cargo listado de nicks.
     $view->assign('nicks', $nicks_reservados);
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     $this->template->assign('top_bar', $this->submenu('nick'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }
Пример #2
0
 /**
  * Creamos una nueva cuenta de usuario.
  * @param string $nick Nick del usuario
  * @param string $email E-Mail del usuario.
  * @param string $password Contraseña del usuario.
  * @param int $rango Rango por defecto.
  * @return int|bool FALSE si no se pudo crear. En caso de ser correcto el ID
  * del usuario insertado o NULL si no es soportado por el motor.
  * @throws Exception
  */
 public function register($nick, $email, $password, $rango)
 {
     // Verificamos el email.
     if ($this->exists_email($email)) {
         throw new Exception('Ya existe un usuario con ese e-mail.');
     }
     // Verificamos el nick.
     if ($this->exists_nick($nick)) {
         throw new Exception('Ya existe un usuario con ese nick.');
     }
     // Codificamos la contraseña.
     $enc = new Phpass(8, FALSE);
     $enc_password = $enc->hash_password($password);
     unset($enc);
     // Creamos arreglo con los datos.
     $info = array($nick, $enc_password, $email, $rango, 10, 10, date('Y/m/d H:i:s'), 0);
     // Creamos la cuenta.
     list($id, $cant) = $this->db->insert('INSERT INTO usuario (nick, password, email, rango, puntos, puntos_disponibles, registro, estado) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', $info);
     return $cant > 0 ? $id : FALSE;
 }