/** * 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); }
/** * Configuramos parámetros del sistema. */ public function action_configuracion() { // Cargo la vista. $vista = View::factory('configuracion'); // Seteo el menu. $this->template->assign('steps', $this->steps(4)); // Cargamos las configuraciones. $model_configuracion = new Model_Configuracion(); // Datos por defecto. foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) { $vista->assign($v, ''); $vista->assign('error_' . $v, FALSE); } if (Request::method() == 'POST') { // Cargo los valores. foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) { ${$v} = isset($_POST[$v]) ? trim($_POST[$v]) : ''; } // Limpio los valores. $nombre = preg_replace('/\\s+/', ' ', $_POST['nombre']); $descripcion = preg_replace('/\\s+/', ' ', $_POST['descripcion']); // Seteo nuevos valores a las vistas. foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) { $vista->assign($v, ${$v}); } $error = FALSE; // Verifico el nombre. if (!preg_match('/^[a-z0-9áéíóúñ !\\-_\\.]{2,20}$/iD', $nombre)) { $error = TRUE; $vista->assign('error_nombre', 'El nombre debe tener entre 2 y 20 caracteres. Pueden ser letras, números, espacios, !, -, _, . y \\'); } // Verifico el contenido. if (!preg_match('/^[a-z0-9áéíóúñ !\\-_\\.]{5,30}$/iD', $descripcion)) { $error = TRUE; $vista->assign('error_descripcion', 'La descripción debe tener entre 5 y 30 caracteres. Pueden ser letras, números, espacios, !, -, _, . y \\'); } // Verifico usuario. if (!preg_match('/^[a-zA-Z0-9]{4,16}$/D', $usuario)) { $error = TRUE; $vista->assign('error_usuario', 'El usuario debe tener entren 4 y 16 caracteres alphanumericos.'); } // Verifico email. 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', $email)) { $error = TRUE; $vista->assign('error_usuario', 'El E-Mail ingresado no es válido.'); } // Verifico contraseña. if (!isset($password[6]) || isset($password[21])) { $error = TRUE; $vista->assign('error_password', 'La contraseña debe tener entre 6 y 20 caracteres.'); } // Verifico contraseña repetida válida. if ($password !== $cpassword) { $error = TRUE; $vista->assign('error_cpassword', 'Las contraseñas ingresadas no coinciden.'); } // Actualizo los valores. if (!$error) { // Actualizo las configuraciones. $model_configuracion->nombre = $nombre; $model_configuracion->descripcion = $descripcion; // Cargo modelo de usuarios. $model_usuario = new Model_Usuario(); // Verifico no exista la cuenta. if ($model_usuario->exists_nick($usuario)) { // Actualizo los datos. $model_usuario->load_by_nick($usuario); $model_usuario->actualizar_contrasena($password); $model_usuario->actualizar_campo('rango', 1); $model_usuario->actualizar_campo('estado', Model_Usuario::ESTADO_ACTIVA); $model_usuario->actualizar_campo('email', $email); } else { // Creo la cuenta. $model_usuario->register($usuario, $email, $password, 1); $model_usuario->load_by_nick($usuario); $model_usuario->actualizar_campo('estado', Model_Usuario::ESTADO_ACTIVA); } // Seteo el paso como terminado. if ($_SESSION['step'] < 4) { $_SESSION['step'] = 4; } // Redirecciono al siguiente. Request::redirect('/installer/finalizacion/'); } } // Seteo la vista. $this->template->assign('contenido', $vista->parse()); }