/** * 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()); }
/** * 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; }