/** * Crearse una nueva cuenta. */ public function action_register() { // Verificamos si el usuario está conectado. if (Usuario::is_login()) { // Lo enviamos a la portada. $_SESSION['flash_error'] = 'No puedes registrarte si ya estás logueado.'; Request::redirect('/'); } // Configuraciones del sitio. $model_config = new Model_Configuracion(); // Verifico si está abierto el registro. if (!(bool) $model_config->get('registro', TRUE)) { $_SESSION['flash_error'] = 'El registro se encuentra cerrado, no se pueden crear nuevas cuentas.'; Request::redirect('/usuario/login/'); } // Asignamos el título. $this->template->assign('title', 'Registrarse'); // Cargamos la vista del usuario. $view_usuario = View::factory('usuario/register'); // Pasamos toda la información a la vista. foreach (array('nick', 'email', 'password', 'c_password') as $field) { $view_usuario->assign($field, in_array($field, array('nick', 'email')) ? isset($_POST[$field]) ? $_POST[$field] : '' : ''); $view_usuario->assign('error_' . $field, FALSE); } // Verificamos si se han enviado los datos. if (Request::method() == 'POST') { // Verificamos los datos enviados. $error = FALSE; foreach (array('nick', 'email', 'password', 'c_password') as $field) { if (!isset($_POST[$field]) || empty($_POST[$field])) { $view_usuario->assign('error_' . $field, TRUE); $error = TRUE; } } if ($error) { $view_usuario->assign('error', 'Debe introducir todos los datos'); } else { // Pasamos toda la información a la vista. foreach (array('nick', 'email') as $field) { $view_usuario->assign($field, $_POST[$field]); } // Realizamos verificaciones. $error = FALSE; // Verificamos el nick. if (!preg_match('/^[a-zA-Z0-9]{4,16}$/D', $_POST['nick'])) { $view_usuario->assign('error_nombre', TRUE); $error = TRUE; } // Verificamos e-mail. if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/D', $_POST['email'])) { $view_usuario->assign('error_email', TRUE); $error = TRUE; } // Verificamos contraseña. if (!preg_match('/^[a-zA-Z0-9\\-_@\\*\\+\\/#$%]{6,20}$/D', $_POST['password'])) { $view_usuario->assign('error_password', TRUE); $error = TRUE; } else { // Verificamos que concuerden. if ($_POST['password'] != $_POST['c_password']) { $view_usuario->assign('error_c_password', TRUE); $error = TRUE; } } if ($error) { $view_usuario->assign('error', 'Los datos introducidos no son válidos'); } else { // Cargamos modelo del usuario. $model_usuario = new Model_Usuario(); // Formateamos las entradas. $nick = trim(preg_replace('/\\s+/', ' ', $_POST['nick'])); $email = trim($_POST['email']); $password = trim($_POST['password']); // Realizamos el registro. try { $id = $model_usuario->register($nick, $email, $password, (int) $model_config->get('rango_defecto', 1)); } catch (Exception $e) { $view_usuario->assign('error', $e->getMessage()); $this->template->assign('contenido', $view_usuario->parse()); return; } if ($id) { // Verifico tipo de activación del usuario. $t_act = (int) $model_config->get('activacion_usuario', 1); if ($t_act == 1) { // Genero el token de activacion. $model_activar = new Model_Usuario_Recuperacion(); $token = $model_activar->crear($id, $email, Model_Usuario_Recuperacion::TIPO_ACTIVACION); // Configuraciones del sitio. $model_config = new Model_Configuracion(); // Creo el mensaje de correo. $message = Email::get_message(); $message->setSubject('Activación cuenta de ' . $model_config->get('nombre', 'Marifa')); $message->setFrom('*****@*****.**', 'Ares'); $message->setTo($email, $nick); // Cargo la vista. $message_view = View::factory('emails/register'); $message_view->assign('codigo', $token); $message_view->assign('titulo', $model_config->get('nombre', 'Marifa')); $message->setBody($message_view->parse()); unset($message_view); // Envio el email. $mailer = Email::get_mailer(); $mailer->send($message); } elseif ($t_act == 2) { $model_usuario->actualizar_estado(Model_Usuario::ESTADO_ACTIVA); } // Registro completo. $view_usuario = View::factory('usuario/register_complete'); $view_usuario->assign('tipo_activacion', $t_act); } else { // Error al registrar. $view_usuario->assign('error', 'No se pudo crear la cuenta, por favor reintente.'); } } } } // Agregamos el la vista a la plantilla. $this->template->assign('contenido', $view_usuario->parse()); unset($view_usuario); }
/** * 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'); }