/** * Inicio de sessión de un usuario. */ public function action_login() { // Verificamos si el usuario está conectado. if (Usuario::is_login()) { // Lo enviamos al perfil. Request::redirect('/', FALSE, TRUE); } // Asignamos el título. $this->template->assign('title', 'Inicio de Sessión'); // Cargamos la vista del usuario. $view_usuario = View::factory('usuario/login'); $view_usuario->assign('error', NULL); $view_usuario->assign('error_nick', FALSE); $view_usuario->assign('error_password', FALSE); $view_usuario->assign('nick', ''); // Verificamos si se han enviado los datos. if (Request::method() == 'POST') { // Verificamos los datos enviados. // Verificamos estén ambos datos. if (!isset($_POST['nick']) || empty($_POST['nick']) || !isset($_POST['password']) || empty($_POST['password'])) { $view_usuario->assign('error', 'Debe introducir el E-Mail o Usuario y la contraseña para poder acceder.'); $view_usuario->assign('error_nick', !(isset($_POST['nick']) && !empty($_POST['nick']))); $view_usuario->assign('error_password', !(isset($_POST['password']) && !empty($_POST['password']))); $view_usuario->assign('nick', isset($_POST['nick']) ? $_POST['nick'] : ''); } else { // Obtenemos los datos. $nick = $_POST['nick']; $password = $_POST['password']; // Realizamos el login. $model_usuario = new Model_Usuario(); $rst = $model_usuario->login($nick, $password); switch ($rst) { case -1: // Datos inválidos. $view_usuario->assign('error', 'Los datos introducidos son inválidos.'); $view_usuario->assign('error_nick', TRUE); $view_usuario->assign('error_password', TRUE); break; case Model_Usuario::ESTADO_ACTIVA: // Cuenta activa. $_SESSION['flash_success'] = 'Bienvenido.'; Request::redirect('/', FALSE, TRUE); break; case Model_Usuario::ESTADO_PENDIENTE: // Cuenta por activar. $view_usuario->assign('error', 'La cuenta no ha sido validada aún. Si no recibiste el correo de activación haz click <a href="/usuario/pedir_activacion/">aqui</a>'); break; case Model_Usuario::ESTADO_SUSPENDIDA: // Cuenta suspendida. // Obtenemos la suspensión. $suspension = $model_usuario->suspension(); // Obtengo información para formar mensaje. $motivo = Decoda::procesar($suspension->motivo); $moderador = $suspension->moderador()->as_array(); $seconds = $suspension->restante(); // Tiempo restante $restante = sprintf("%d:%02d:%02d", floor($seconds / 3600), floor($seconds % 3600 / 60), $seconds % 60); unset($seconds); $view_usuario->assign('error', sprintf(__('%s te ha suspendido por %s debido a:<br /> %s', FALSE), $moderador['nick'], $restante, $motivo)); break; case Model_Usuario::ESTADO_BANEADA: // Cuenta baneada. $baneo = $model_usuario->baneo(); $view_usuario->assign('error', sprintf(__('%s te ha baneado el %s debido a: <br /> %s', FALSE), $baneo->moderador()->nick, $baneo->fecha->format('d/m/Y H:i:s'), Decoda::procesar($baneo->razon))); } $view_usuario->assign('nick', $nick); } } else { $view_usuario->assign('nick', ''); } // Agregamos el la vista a la plantilla. $this->template->assign('contenido', $view_usuario->parse()); }
/** * Quitamos lel baneo de un usuario. * @param int $id ID del usuario a quitar la suspensión. */ public function action_desbanear_usuario($id) { $id = (int) $id; // Verificamos no sea actual. if ($id == Usuario::$usuario_id) { $_SESSION['flash_error'] = 'El usuario que deseas banear no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Cargamos el modelo del usuario. $model_usuario = new Model_Usuario($id); if (!$model_usuario->existe()) { $_SESSION['flash_error'] = 'El usuario que deseas banear no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Verificamos esté suspendido. $baneo = $model_usuario->baneo(); if ($baneo !== NULL) { // Quito el baneo. $baneo->borrar(); // Genero el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $id) { $model_suceso->crear($id, 'usuario_fin_baneo', TRUE, $id, Usuario::$id); $model_suceso->crear(Usuario::$usuario_id, 'usuario_fin_baneo', FALSE, $id, Usuario::$id); } else { $model_suceso->crear($id, 'usuario_fin_baneo', FALSE, $id, Usuario::$id); } } // Informo el resultado. $_SESSION['flash_success'] = 'El baneo fue anulado correctamente.'; Request::redirect('/admin/usuario'); }