コード例 #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
ファイル: usuario.php プロジェクト: 4bs4/marifa
 /**
  * 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');
 }