/** * 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()); }
/** * Terminamos la suspensión de un usuario. * @param int $usuario ID del usuario a quitar la suspensión. */ public function action_terminar_suspension($usuario) { if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_SUSPENDER)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Valido el ID. $usuario = (int) $usuario; // Verifico que exista el usuario. $model_usuario = new Model_Usuario($usuario); if (!$model_usuario->existe()) { $_SESSION['flash_error'] = 'El usuario del que desea terminar la suspención no se encuentra disponible.'; Request::redirect('/moderar/gestion/usuarios'); } // Verifico el estado. if ($model_usuario->estado !== Model_Usuario::ESTADO_SUSPENDIDA) { $_SESSION['flash_error'] = 'El usuario del que desea terminar la suspención no se encuentra disponible.'; Request::redirect('/moderar/gestion/usuarios'); } // Borramos la suspensión. $model_usuario->suspension()->anular(); // Creamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_usuario->id) { $model_suceso->crear($model_usuario->id, 'usuario_fin_suspension', TRUE, $model_usuario->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'usuario_fin_suspension', FALSE, $model_usuario->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_usuario->id, 'usuario_fin_suspension', FALSE, $model_usuario->id, Usuario::$usuario_id); } // Informamos el resultado. $_SESSION['flash_success'] = 'Suspensión anulada correctamente.'; Request::redirect('/moderar/gestion/usuarios'); }
/** * Suspendemos a un usuario. * @param int $id ID del usuario a suspender. */ public function action_suspender_usuario($id) { // Verifico permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_VER_DENUNCIAS)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Verificamos no sea actual. if ($id == Usuario::$usuario_id) { $_SESSION['flash_error'] = 'No puedes enviarte una advertencia a vos mismo.'; Request::redirect('/moderar/denuncias/usuarios/'); } // Aseguramos un ID entero. $id = (int) $id; // Cargamos el modelo del usuario. $model_usuario = new Model_Usuario($id); if (!$model_usuario->existe()) { $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.'; Request::redirect('/moderar/denuncias/usuarios/'); } // Verifico no esté suspendido. $s = $model_usuario->suspension(); if ($s !== NULL) { if ($s->restante() <= 0) { $s->anular(); } else { $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.'; Request::redirect('/moderar/denuncias/usuarios/'); } } unset($s); // Cargamos la vista. $vista = View::factory('/moderar/denuncias/suspender_usuario'); // Información del usuario a suspender. $vista->assign('usuario', $model_usuario->as_array()); // Valores por defecto y errores. $vista->assign('motivo', ''); $vista->assign('error_motivo', FALSE); $vista->assign('fin', ''); $vista->assign('error_fin', FALSE); if (Request::method() == 'POST') { // Seteamos sin error. $error = FALSE; // Obtenemos los campos. $motivo = isset($_POST['motivo']) ? $_POST['motivo'] : NULL; $fin = isset($_POST['fin']) ? $_POST['fin'] : NULL; // Valores para cambios. $vista->assign('motivo', $motivo); $vista->assign('fin', $fin); // Quitamos BBCode para dimenciones. $motivo_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $motivo); if (!isset($motivo_clean[10]) || isset($motivo_clean[200])) { $error = TRUE; $vista->assign('error_motivo', 'El motivo debe tener entre 10 y 200 caractéres'); } unset($motivo_clean); // Verificamos la fecha. if (empty($fin)) { $error = TRUE; $vista->assign('error_fin', 'La fecha de finalización no es correcta.'); } else { $fin = strtotime($fin); if ($fin <= time()) { $error = TRUE; $vista->assign('error_fin', 'La fecha de finalización no es correcta.'); } } if (!$error) { // Evitamos XSS. $motivo = htmlentities($motivo, ENT_NOQUOTES, 'UTF-8'); // Creamos la suspensión. $model_suspension = new Model_Usuario_Suspension(); $s_id = $model_suspension->nueva($id, Usuario::$usuario_id, $motivo, $fin); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $id) { $model_suceso->crear($id, 'usuario_suspender', TRUE, $s_id); $model_suceso->crear(Usuario::$usuario_id, 'usuario_suspender', FALSE, $s_id); } else { $model_suceso->crear($id, 'usuario_suspender', FALSE, $s_id); } // Seteamos mensaje flash y volvemos. $_SESSION['flash_success'] = 'Usuario suspendido correctamente.'; Request::redirect('/moderar/denuncias/usuarios/'); } } // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('moderar')); // Cargamos plantilla administracion. $admin_template = View::factory('moderar/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('denuncias_usuarios')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Quitamos la suspensión de un usuario. * @param int $id ID del usuario a quitar la suspensión. */ public function action_quitar_suspension_usuario($id) { $id = (int) $id; // Verificamos no sea actual. if ($id == Usuario::$usuario_id) { $_SESSION['flash_error'] = 'El usuario al que quieres quitar la suspensión 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 al que quieres quitar la suspensión no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Verificamos esté suspendido. $suspension = $model_usuario->suspension(); if ($suspension === NULL) { // Verifico el estado. if ($model_usuario->estado === Model_Usuario::ESTADO_SUSPENDIDA) { // Actualizamos el estado. $model_usuario->actualizar_estado(Model_Usuario::ESTADO_ACTIVA); } } else { // Anulamos la suspensión. $suspension->anular(); // Actualizamos el estado. $model_usuario->actualizar_estado(Model_Usuario::ESTADO_ACTIVA); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $id) { $model_suceso->crear($id, 'usuario_fin_suspension', TRUE, $suspension->id, $suspension->restante() > 0 ? Usuario::$usuario_id : NULL); $model_suceso->crear(Usuario::$usuario_id, 'usuario_fin_suspension', FALSE, $suspension->id, $suspension->restante() > 0 ? Usuario::$usuario_id : NULL); } else { $model_suceso->crear($id, 'usuario_fin_suspension', FALSE, $suspension->id, $suspension->restante() > 0 ? Usuario::$usuario_id : NULL); } } // Informo el resultado. $_SESSION['flash_success'] = 'Suspensión anulada correctamente.'; Request::redirect('/admin/usuario'); }