Contenu privé dans une publication publique ?

Existe-t-il un moyen de rendre le contenu à l’intérieur d’une publication disponible uniquement pour les utilisateurs connectés ?

Le cas d’utilisation auquel je pense est la publication d’événements virtuels. Nous avons une tonne de groupes de travail dans notre communauté qui se réunissent virtuellement. Nous aimerions informer les visiteurs occasionnels de l’existence des groupes et des réunions - et quand ils ont lieu - mais nous ne voulons pas publier les liens Zoom publiquement.

1 « J'aime »

Salut Marty !

Les messages “whisper” font un peu ça : Creating a whisper post

:information_source: Les messages “whisper” ne peuvent pas être “dé-whisperés” après avoir été publiés, mais c’est possible avec ce composant de thème : Toggle Whisper 👁

2 « J'aime »

Merci. C’est presque ça. L’idéal serait un moyen de formater le contenu d’une publication afin que le reste de la publication soit visible par tous et qu’un message tel que « lien disponible uniquement pour les utilisateurs connectés » s’affiche si vous n’êtes pas connecté, mais il semble que les murmures fonctionneront bien pour l’instant.

Nouveau responsable ici, j’essaie donc encore de trouver mon chemin dans toutes les fonctionnalités.

2 « J'aime »

Je ne connais pas grand-chose aux modifications de Discourse, mais cela semble un peu délicat et nécessiterait un plugin si vous ne voulez pas que cela soit contourné par quelqu’un qui sait comment modifier le code côté client.

1 « J'aime »

J’ai développé un composant de thème qui permet de masquer les publications sur le front-end aux utilisateurs qui ne sont pas connectés. Bien sûr, s’il s’agit de personnes ayant une riche expérience en développement, elles peuvent facilement l’obtenir directement depuis le backend.

Je n’ai pas encore empaqueté ce composant, veuillez donc utiliser directement le code ci-dessous.

Balise Head :

<script type="text/discourse-plugin" version="1.6.0">

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>La publication est définie comme masquée pour les utilisateurs non connectés à la communauté</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",
        };
    });
}


</script>

CSS

.anon .lycoris-hiddened {
    display: none;

    .post-info.edits {
        display: none;

    }
}

2 « J'aime »