Conteúdo privado em post público?

Existe alguma forma de tornar o conteúdo dentro de uma postagem disponível apenas para usuários logados?

O caso de uso que estou pensando é em postagens de eventos virtuais. Temos muitos grupos de trabalho em nossa comunidade que se reúnem virtualmente. Gostaríamos de informar aos visitantes casuais que os grupos e reuniões existem — e quando estão acontecendo — mas não queremos postar os links do Zoom publicamente.

1 curtida

Olá Marty!

Os sussurros fazem isso: Creating a whisper post

:information_source: Os posts sussurrados não podem ser “des-sussurrados” após serem postados, mas podem ser com este componente de tema: Toggle Whisper 👁

2 curtidas

Obrigado. Isso chega perto. O ideal seria uma forma de formatar o conteúdo dentro de uma postagem para que o resto da postagem apareça para todos e uma mensagem como “link disponível apenas para usuários logados” apareça se você não estiver logado, mas parece que os sussurros funcionarão bem por enquanto.

Sou um administrador novato, então ainda estou tentando encontrar meu caminho por toda a funcionalidade.

2 curtidas

Não sei muito sobre modificações do Discourse, mas isso parece um pouco complicado e exigiria um plugin se você não quiser que seja contornado por alguém que saiba como ajustar o código do lado do cliente.

1 curtida

Criei um componente de tema que permite ocultar postagens no front-end de usuários que não estão logados. Claro, se houver pessoas com rica experiência em desenvolvimento, elas podem facilmente obtê-lo diretamente do back-end.

Ainda não empacotei este componente, então use o código abaixo diretamente.

Tag de Cabeçalho:


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: "This post is hidden";
}
`

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>This post is hidden</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>A postagem foi definida para ser oculta para usuários não registrados na comunidade</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 = "Hide this post";
    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 curtidas