예제 #1
0
파일: usuario.php 프로젝트: 4bs4/marifa
 /**
  * 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);
 }
예제 #2
0
파일: controller.php 프로젝트: 4bs4/marifa
 /**
  * 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());
 }