¿Contenido privado en publicación pública?

¿Hay alguna forma de que el contenido dentro de una publicación solo esté disponible para los usuarios registrados?

El caso de uso que tengo en mente son las publicaciones de eventos virtuales. Tenemos muchos grupos de trabajo en nuestra comunidad que se reúnen virtualmente. Nos gustaría informar a los visitantes ocasionales que los grupos y las reuniones existen, y cuándo están ocurriendo, pero no queremos publicar los enlaces de Zoom públicamente.

1 me gusta

¡Hola Marty!

Los susurros hacen eso: Creating a whisper post

:information_source: Los susurros no se pueden “des-susurrar” después de publicarse, pero se pueden con este componente temático: Toggle Whisper 👁

2 Me gusta

Gracias. Eso se acerca. Lo ideal sería una forma de formatear el contenido dentro de una publicación para que el resto de la publicación se muestre para todos y aparezca un mensaje como “enlace solo disponible para usuarios registrados” si no has iniciado sesión, pero parece que los susurros funcionarán bien por ahora.

Soy un administrador novato, así que todavía estoy tratando de encontrar mi camino a través de toda la funcionalidad.

2 Me gusta

No sé mucho sobre las modificaciones de Discourse, pero eso parece un poco complicado y requeriría un plugin si no quieres que sea eludido por alguien que sepa cómo modificar el código del lado del cliente.

1 me gusta

He desarrollado un componente de tema que permite ocultar publicaciones en el frontend a los usuarios que no han iniciado sesión. Por supuesto, si son personas con una rica experiencia en desarrollo, pueden obtenerlo fácilmente directamente desde el backend.

Aún no he empaquetado este componente, así que por favor use el siguiente código directamente.

Etiqueta de encabezado:


const user = api.getCurrentUser();

const I18n = require("I18n");

const pid = "post_hider"

const tl4_css = `
.d-editor-preview [data-theme-hide] {
  background: var(--tertiary);
  color: var(--secondary);
  border-top: 2px solid var(--secondary);
  position: sticky;
  top: 0;
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.d-editor-preview [data-theme-hide]::before {
  content: "Esta publicación está oculta";
}
`

api.addPostClassesCallback((attrs) => {
if (attrs?.cooked?.includes(`
<div data-theme-hide="true">`)) {
  return ["lycoris-hiddened"];
} else {
  return [];
}
});

if (!user) {
    api.decorateCookedElement((el, helper) => {
        function hide_post() {
            setTimeout(() => {
                try {
                    document.querySelector(`[data-post-id="${helper?.widget?.attrs?.id}"]`)?.parentElement?.remove();
                } catch (err) {
                    console.log(el);
                    console.log(err);
                }
            }, 1000);
        }
        if (el?.querySelector(`[data-theme-hide="true"]`)) {
            el.innerHTML = `<p>Esta publicación está oculta</p>`;
            hide_post();
        }
    }, {
        id: pid,
        afterAdopt: true,
        onlyStream: true,
    });
} else if (user?.trust_level == 4) {
    const s = document.createElement("style");
    s.innerHTML = tl4_css;
    document.body.appendChild(s);
    api.decorateCookedElement((el, helper) => {
        if (el?.querySelector(`[data-theme-hide="true"]`)) {
            el.innerHTML = `<div class="d-wrap" data-wrap="tips" data-type="warn"><p>La publicación está configurada para ocultarse a los usuarios no registrados en la comunidad</p></div> ` + el.innerHTML;
        }
    }, {
        id: pid,
        afterAdopt: true,
        onlyStream: true,
    });
    if (!I18n.translations[I18n.currentLocale()].js.composer) {
        I18n.translations[I18n.currentLocale()].js.composer = {};
    }
    I18n.translations[I18n.currentLocale()].js.composer.hide_text = " ";
    I18n.translations[I18n.currentLocale()].js.composer.make_hide = "Ocultar esta publicación";
    api.modifyClass("controller:composer", {
        pluginId: pid,
        actions: {
            insertHide() {
             this.get("toolbarEvent").applySurround(
                `<div data-theme-hide="true">`,
                `</div>\n`,
                "hide_text"
              );
            },
        },
    });
    api.addToolbarPopupMenuOptionsCallback(() => {
        return {
            action: "insertHide",
            icon: "far-eye-slash",
            label: "composer.make_hide",
        };
    });
}


CSS

.anon .lycoris-hiddened {
    display: none;

    .post-info.edits {
        display: none;

    }
}

2 Me gusta