Estamos buscando ver si existe alguna forma de eludir esta limitación. Un poco de contexto:
Nuestro grupo es 99,9 % accesible solo por aquellos con el rol de “Miembros”. Tenemos algunos grupos abiertos a todos para discusión pública o ayuda/soporte. Como grupo de miembros de pago, sería increíble poder reconocer la actividad dentro de estos grupos privados, ya que de nuestros más de 1,3 millones de publicaciones, la mayoría se encuentra dentro de esas agrupaciones.
¿Existe alguna solución alternativa o configuración que permita esto?
La razón de esto es que cualquier insignia que haga referencia a publicaciones ejecuta sus consultas contra la tabla badge_posts. Dicha tabla solo incluye publicaciones que están en categorías accesibles para todos los usuarios.
Sí, entiendo cómo eso podría ser un problema. Una posible solución alternativa sería reescribir las consultas de insignias de tu sitio para que utilicen la tabla posts en lugar de la tabla badge_posts. Esto podría causar un problema para los usuarios que no tienen acceso a las categorías protegidas de tu sitio si intentan ver las publicaciones asociadas con las insignias de sus usuarios, pero parece que esto no afectaría a muchos usuarios en tu sitio. Posiblemente existen otras formas de abordar esto.
Cambiar las consultas de insignias en tu sitio para que usen la tabla posts en lugar de la tabla badge_posts sería bastante directo. Sin embargo, una solución adecuada del problema podría requerir un cambio mayor. Por ejemplo, no querrías que se otorguen insignias por publicaciones en tu categoría de personal, ni en ninguna otra categoría donde exista el riesgo de filtrar el título de un tema.
Me pregunto si se podría agregar una nueva vista de Postgres a través de un plugin para sitios con una configuración similar a la tuya. Esa vista luego podría sustituirse en las consultas de insignias por la vista badge_posts.
Si esa ruta fuera una opción, ¿podría esa vista incluir publicaciones de grupos totalmente públicos? Como los que tenemos ahora, más cualquier grupo visible para un grupo específico. En nuestro caso, “Miembros”.
¡Esa sería la solución definitiva para los grupos de membresía!
Veamos qué opinan los ingenieros de Discourse sobre ese tipo de enfoque o si tienen otras sugerencias. Esta no es la primera vez que se reporta el problema. Sería bueno encontrar una solución general para el problema, pero una solución efectiva que funcione para muchos sitios podría ser más compleja que lo que estoy sugiriendo.
Mi recomendación aquí, @Mitchelsellers, es empezar poco a poco. Otorga las insignias sin reconocer publicaciones específicas.
[ha realizado veinte publicaciones muy valoradas como miembro] (título por definir) es un buen punto de partida.
Básicamente, crea una forma personalizada de reconocimiento mediante consultas personalizadas.
Agregar verificaciones de permisos en todos los lugares donde vinculamos las insignias con las publicaciones es complicado; te recomiendo evitar seguir este camino.
He estado revisando las consultas de insignias existentes para tener una idea de qué consultas apuntan a publicaciones en la tabla badge_posts, o utilizan algún otro método para excluir publicaciones de categorías protegidas de ser utilizadas.
Las siguientes consultas de insignias especifican publicaciones y no se otorgarán por actividad en categorías privadas:
Editor
Primera bandera
Primer like
Primer enlace
Primera cita
Primer compartir
Primer emoji
Primera mención
Primera onebox
Primera respuesta por correo electrónico
Lector
Editor de wiki
Gran compartir
Buen compartir
Mesa de ayuda
Buen compartir
Bienvenido
Enlace famoso
Gran respuesta
Gran tema
Buena respuesta
Buen tema
Enlace caliente
Buena respuesta
Buen tema
Enlace popular
Las siguientes insignias no consultan publicaciones específicas y sí se otorgarán por actividad en categorías privadas:
Licenciado
Autobiógrafo
Certificado
Nuevo usuario del mes
Leer las directrices
Admirado
Campeón
Loco de amor
Devoto
Empático
Aficionado
Aniversario
Campañero
Da de vuelta
Amor superior
Respetado
Apreciado
Entusiasta
Fuera de amor
Promotor
Gracias
Líder
Regular
Básico
Miembro
Personal
Foto de perfil
Algo similar a esto ya está cubierto por las insignias Apreciado (1 like en 20 publicaciones) y Respetado (2 likes en 100 publicaciones). Se podrían agregar algunas variaciones de estas consultas. Por ejemplo, 10 likes en 20 publicaciones. También sería una buena idea una insignia que se otorgara por temas súper liked; funcionaría como el equivalente a la insignia Grandes temas. Por ejemplo, podría otorgarse cuando un usuario ha creado 10 temas que han recibido 10 likes.
No estoy seguro si tendría sentido agregar una insignia que se otorgue por actividad en una sola publicación o tema que no tenga un enlace a la publicación. Por ejemplo, se podría crear una insignia alternativa de Primer like con el siguiente SQL:
SELECT pa1.user_id, pa1.created_at granted_at
FROM (
SELECT pa.user_id, min(pa.id) id
FROM post_actions pa
JOIN posts p on p.id = pa.post_id
WHERE post_action_type_id = 2
GROUP BY pa.user_id
) x
JOIN post_actions pa1 on pa1.id = x.id
Para que la consulta funcione, debe usar el disparador “Actualizar diariamente” en lugar de la consulta “Cuando un usuario actúa sobre una publicación”. En la página de Insignias, se mostrarán los usuarios que han recibido la insignia junto con la hora en que se otorgó. No habrá un enlace a la publicación por la que se otorgó la insignia:
¿Tiene sentido este tipo de enfoque para sitios que tienen principalmente categorías protegidas? Si es así, podría usarse para duplicar algunas de las consultas que actualmente apuntan a la tabla badge_posts.
Comenzamos nuestro foro con login requerido y recientemente añadimos algunas categorías públicas, mientras restringimos el acceso a las existentes a trust_level_0.
Por lo tanto, para los usuarios existentes, nada cambió en la forma en que acceden al foro, pero todas las insignias de la lista anterior fueron revocadas. No tenemos un foro grande, pero por las respuestas que recibimos de los usuarios, está claro que parece que el sistema de insignias está completamente roto. Con esta configuración, prácticamente tengo que desactivarlo.
Creo que debería comunicarse con mayor claridad en algún lugar de la configuración que las insignias existentes serán revocadas cuando se opte por restringir categorías. Para nosotros, esto llegó de la nada.
Más en general, no entiendo las prioridades. Tanto los permisos de categoría como el sistema de insignias se presentan como características centrales de Discourse. Pero apenas se pueden usar juntos tal como están. La ventaja de tener insignias solo en publicaciones generalmente accesibles parece ser que otros usuarios pueden ver por qué publicación se otorgó una insignia. Para mí, eso no parece una característica tan importante en comparación. ¿Por qué no eliminar estos enlaces visibles y solo mostrar las publicaciones relacionadas con cada usuario en sus propias insignias?
¡Ay! De acuerdo, esto prácticamente significa que toda la infraestructura de insignias es bastante inútil en una comunidad con muchos espacios privados…
Estoy de acuerdo.
¿Existe algún tipo de complemento o configuración nueva (en los últimos seis años) para hacer que las insignias sean viables en una comunidad mayormente privada?
Esto parece estar relacionado con lo que surgió en otro tema sobre facilitar la orientación de los miembros de la comunidad entre espacios abiertos (públicos) y cerrados (diversos grados de «privacidad»), incluidos los mensajes personales.
Lidiar con la naturaleza semipública de la web y las audiencias semi-superpuestas es un gran desafío en el mundo social en línea. No es intuitivo. La mayoría de las comunidades tendrán dificultades para asegurarse de que las personas comprendan cuán públicas/privadas son las diferentes partes de la misma. ¿Tendría sentido que Discourse asuma que esta mezcla de público y privado(s) será la predeterminada para la mayoría de las comunidades y vea cómo puede facilitar la navegación para los miembros de la comunidad?
Soy nuevo en esta conversación, aunque creo que un interruptor en Configuración de insignias sería lo más fácil. Déjalo desactivado por defecto, actívalo para consultar todos los foros (incluidos los privados) para las insignias de participación.
Si se deja abierto para un hook que un complemento/componente pueda usar, se podría agregar más tarde para dar un permiso por categoría para que las insignias se cuenten allí.
Creo que el problema con las insignias que actualmente solo se otorgan en categorías públicas es que hacen referencia a la publicación en el tema para el que fueron otorgadas, y no querrías que eso fuera público si el tema es privado.