No se pueden crear cuentas nuevas debido a un antiguo plugin multi-select user field.

Por alguna razón, parece que el botón ‘Crear tu cuenta’ ya no funciona en el cuadro de diálogo de registro de mi foro; al hacer clic en él después de que todos los campos de usuario se completan (hasta donde puedo ver correctamente), no se produce ninguna respuesta (ni siquiera un mensaje de error).

El cuadro de diálogo no se cierra y no se envía ningún mensaje de verificación por correo electrónico.

No veo ningún problema obvio con el contenido de los campos de usuario durante el registro; todos están completos y ninguno muestra errores.

Probado en Chrome versión 117.0.5938.134 (Build oficial) y Edge versión 118.0.2088.33 (Build oficial).

Borrar la caché del navegador parece no tener ningún efecto.

La función manual de ‘probar correo electrónico’ envía un mensaje a la dirección del usuario afectado sin problemas.
La funcionalidad de lista de correo del foro para usuarios existentes funciona sin problemas.

También puedo iniciar y cerrar sesión en el sitio web del foro sin problemas.

No tengo conocimiento de ningún cambio reciente en la configuración del foro (aparte de las actualizaciones de software), pero no estoy seguro de si existe alguna configuración para ‘ignorar la entrada del usuario’.

Mi usuario previsto ha intentado registrarse varias veces y yo también lo he intentado desde mi extremo, y puedo verificar el problema.

Actualmente ejecuto la última versión de Discourse (actualizada a la versión beta 2-dev 3.2.0 en la esperanza de resolver el problema).

No estoy seguro de cuándo comenzó a suceder esto, ya que no hemos tenido nuevos registros en mucho tiempo (¡quizás ahora sé por qué!).

¿Estás viendo algún error en la consola del navegador? ¿Tienes tú (o el usuario) algún bloqueador de contenido o de anuncios instalado en los navegadores?

1 me gusta

Buen pensamiento.

Sí, en el navegador Edge veo errores y advertencias

No estoy seguro de lo que estoy viendo, ¿significa esto que el plugin Multi-select es incompatible con la última versión de Discourse?

Desafortunadamente, este plugin es bastante crítico durante el registro, se utiliza para poblar ciertos campos de usuario a partir de listas desplegables.

2 Me gusta

Intentaría deshabilitar el plugin temporalmente para aislar el problema.

3 Me gusta

Suponiendo que el plugin Multi-select sea la causa del problema, debería ser bastante sencillo migrar los campos antiguos ‘multiselect-dropdown’ a los nuevos campos ‘multiselect’ de Discourse. Alguien de la comunidad de Discourse debería poder ayudarte con eso.

2 Me gusta

[PLUGIN discourse-multiselect-user-field] \"model:user-field\" no se encontró al modificar la clase

Pero…

EDITAR Simon me ganó.

2 Me gusta

Hola, sí, el plugin parece haber sido reemplazado, por lo que es poco probable que se actualice, pero el problema radica en migrar los datos de usuario generados por el plugin a los campos de datos de usuario principales correspondientes, para que el plugin pueda eliminarse de forma segura.

La simple desinstalación del plugin también parece eliminar los datos asociados (o al menos ya no son visibles al ver los perfiles de usuario).

Suponiendo que no soy el único usuario del plugin, ¡sería genial si el plugin recibiera una actualización final, para incluir una función de ‘migrar’!

No veo nada en el plugin que cause que los campos de usuario creados a través de él se eliminen de la base de datos cuando el plugin se elimina de un sitio. Lo que esperaría encontrar es que, desde la consola de Rails, ejecutando:

UserField.where(field_type: 'multiselect-dropdown')

devolverá la lista de campos multiselect-dropdown que ha creado en su sitio.

Los valores establecidos para el id de cada uno de esos campos se pueden usar para encontrar las opciones que cada usuario en su sitio ha seleccionado para el campo. Por ejemplo, si los ids que se devuelven son [1, 2, 3], habrá entradas correspondientes de UserCustomField con los nombres "user_field_1", "user_field_2" y "user_field_3". Suponiendo que todo esto es correcto, esa será información suficiente para que alguien migre los campos antiguos a campos nuevos desde la consola de Rails de su sitio.

Si el autor del plugin no va a ocuparse de esto, probablemente tendrá que contratar a alguien para el trabajo. Tenga en cuenta que no estoy tratando de conseguir trabajo aquí, preferiría no hacerlo :slight_smile:

Antes de que se realice la migración, debe crear nuevos campos ‘multiselect’ de Discourse que tengan opciones que coincidan con los valores de sus antiguos campos multiselect-dropdown. Para facilitar el proceso de migración, sería bueno usar el mismo nombre para los nuevos campos que utilizó para los campos antiguos. De esa manera, quien realice la migración sabrá que (por ejemplo) los campos multiselect-dropdown con el nombre “NZRAB number” deben migrarse al nuevo campo ‘multiselect’ que tiene el nombre “NZRAB number”.

Estoy de acuerdo en que sería mejor si el autor del plugin se encargara de esto, pero si eso no puede suceder, simplemente cree nuevos campos ‘multiselect’ y elimine el plugin.

4 Me gusta

Gracias Simon

Solo para comprobar, ¿la versión principal del menú desplegable Multiselect debería permitir que un usuario seleccione varios elementos de un mismo menú desplegable simultáneamente, de la misma manera que lo hacía el antiguo plugin?

Al intentar añadir un nuevo campo de usuario de tipo ‘Menú desplegable Multiselect’, solo hay una opción ‘Menú desplegable Multiselect’ para elegir (podría haber esperado dos, si la versión del plugin es distinta de la versión principal).

Ahora, si elijo ese tipo de campo de menú desplegable Multiselect e intento añadir datos a un perfil de usuario con él, solo acepta una selección de usuario, no selecciones múltiples a la vez, por lo que parece que la versión principal del tipo de campo de menú desplegable multiselect tiene una funcionalidad reducida y ha desplazado la versión del tipo de campo del plugin, ¿o hay alguna interacción con la versión del plugin que está paralizando la versión que estoy viendo?

Creo que sí, pero no he probado el plugin de multiselección, así que no puedo estar seguro. Así es como funcionan los campos desplegables multiselección de Discourse:

Los usuarios pueden seleccionar cualquiera de los elementos que agregues al configurar el campo personalizado:

Es posible que la interfaz de usuario sea diferente a la que hacía el plugin, pero espero que los resultados sean los mismos.

¿Puedes confirmar que con el plugin instalado, puedes ver los valores que los usuarios han introducido para los campos creados con el plugin si visitas su página de perfil?

Editar: @Paul_King, me doy cuenta de que quizás fui demasiado optimista sobre la migración de los datos. Sin acceder a la consola de Rails de tu sitio, la forma más fácil de tener una idea de lo que está pasando sería comprobar cómo se han guardado los campos antiguos ejecutando una consulta de Data Explorer. Si no tienes ese plugin instalado en tu sitio, podría valer la pena añadirlo.

Si el plugin Data Explorer está instalado en tu sitio, intenta ejecutar la siguiente consulta:

SELECT * FROM user_fields

Espero que esa consulta devuelva algunos resultados con su field_type establecido en “multiselect-dropdown”. Si lo hace, la migración de los datos debería ser bastante sencilla.

2 Me gusta

Gracias Simon

Tu ejemplo que muestra el funcionamiento del menú desplegable multiselección coincide con la forma en que solía funcionar el mío, lo que parece prometedor en cuanto a la restauración de la funcionalidad original.

Actualmente, parece que ni el plugin antiguo ni la funcionalidad principal de la nueva versión funcionan correctamente: el campo completo ya no aparece en la pantalla de edición del perfil del usuario, aunque los valores que el usuario ingresó originalmente usando el plugin antiguo sí aparecen para un usuario que hace clic en el avatar de otro usuario, pero con los datos originales mostrando corchetes y comillas a cada lado.

Sí, esa consulta devuelve ese tipo de campo. ¿Es posible que la confusión surja debido a que el nombre del plugin antiguo y el nombre del núcleo de Discourse para sus respectivas versiones de un tipo de campo de usuario multiselección son idénticos?

Eso no es sorprendente. Significa que los datos necesarios para la migración están en la base de datos, pero es probable que estén en un formato que no facilitará la migración como esperaba.

Para confirmarlo, intente ejecutar la siguiente consulta de Data Explorer:

SELECT * FROM user_custom_fields
WHERE name = 'user_field_1'
ORDER BY user_id

La información útil de los resultados de esa consulta será lo que esté configurado en la columna value. Idealmente, los resultados se verían de manera similar a esto, con una entrada separada para cada opción que un usuario ha seleccionado:

Sospecho que lo que encontrará es que los valores de cada opción que un usuario ha seleccionado existirán en la misma fila. Por ejemplo, [this, that] o \"[this, that]\". Si es correcto, ¿puede publicar algunas de las entradas de valor?

Puede que lleve un poco de prueba y error averiguar cómo analizar los valores en el formato que Discourse espera encontrar.

2 Me gusta

Supongo que una exportación del archivo de usuario proporcionará todos los datos necesarios, y se puede limpiar para prepararlo para la importación utilizando algo como esto:

2 Me gusta

Parece que eso funcionaría. Sería necesario contratar a Jay, o a alguien similar, para hacer el trabajo.

También debería ser técnicamente posible realizar los cambios desde la consola de Rails. La dificultad de ese enfoque dependerá de cómo se establezcan los campos value para los antiguos UserCustomFields de “multiselect-dropdown”. Si se almacena una opción por fila, sería sencillo generar nuevas entradas de UserCustomField a partir de las antiguas. Si se almacenan varias opciones en cada fila, podría resultar un poco complicado.

2 Me gusta

É uma sorte eu estar aqui perto :wink:.

O formato dos dados era interessante: estava em duas formas diferentes que mudaram num dia. Começaram como:

this
that

E um dia mudaram repentinamente para

this,that

Fiz alguma “magia” feia com a folha de cálculo para transformar os dados em como os novos campos multiselect são (como acima). Infelizmente, o script não consegue (ainda) lidar com multiselect. Alguém quer fazer um PR?

Embora eu possa contornar/hackear para fazer o trabalho, acho que:

1ª passagem: todos os utilizadores com uma única entrada usando o script existente
2ª passagem: todos os utilizadores com múltiplas entradas usando um script hackeado que força novas linhas.

mais tarde…
O meu plano astuto funcionou.

Este é o script hackeado para a 2ª passagem:

# frozen_string_literal: true

require "csv"
desc "Import user fields"
task "multi_user_fields:import_csv", [:filename] => [:environment] do |_task, args|

  puts "Filename: #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true)

  data.each_entry do |row|
    puts "doing row."
    row.to_h.each do |x|
      user_id = row["user_id"]
      if x.first == "user_id"
        u = User.find(user_id)
        puts "Got user: #{u.username}"
      else
        name = x.first
        val = row[x.first]
        ucf = UserCustomField.find_by(user_id: row["user_id"], name: name)
        if val
          puts "Creating UCF: #{row["user_id"]} Name: #{name}, value: #{val}"
          UserCustomField.create(user_id: user_id, name: name, value: val)
        end
      end
    end
  end
end

@pfaffman - quão fácil seria atualizar o script real para lidar com campos multiselect para outros que mexem com UCFs no futuro?

4 Me gusta

Desde mi punto de vista, me complace enormemente informar que Nathan y su proceso (con todos sus trucos) dieron absolutamente en el clavo.

He confirmado que el cuadro de diálogo de registro ahora funciona, los usuarios que intentan registrarse pueden volver a seleccionar varias respuestas de las opciones desplegables, y pueden verlas y editarlas nuevamente como usuarios aprobados, y el antiguo plugin de selección múltiple se eliminó con éxito.

Gracias a @nathank, @omarfilip, @simon y @RGJ por tomarse el tiempo de considerar este problema y compartir sus conocimientos y perspectivas. ¡Una prueba más, si es que se necesitaba alguna, de lo fantástica que es esta comunidad!

5 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.