Le bouton « Nouveau sujet » fonctionne mal

Lorsque je clique sur le bouton « Nouveau sujet », le formulaire du nouveau sujet ne s’affiche pas immédiatement. Au lieu de cela, le formulaire s’affiche après que j’ai sélectionné l’un des fils de discussion du forum. Il semble toujours qu’il crée un nouveau sujet, mais en arrière-plan. Une fois que vous ouvrez un sujet existant, le nouveau sujet que vous essayiez de créer apparaît (complètement correct ; c’est-à-dire pour le forum dans lequel vous aviez l’intention de poster, même si le sujet que vous avez saisi se trouve dans un autre forum).

Cela ne se produit que sur un seul site (https://discussions.scouting.org/), je suppose donc que c’est quelque chose qu’ils ont mal configuré. J’ai soulevé ce problème là-bas, sans succès.

Est-ce que cela se produit en mode sans échec ?

1 « J'aime »

Ceci n’est pas reproductible en mode sans échec. Un thème personnalisé / CSS est à l’origine de ce problème.

4 « J'aime »

Les administrateurs ont ajouté une personnalisation CSS qui ressemble à ceci :

body:not([class*="category-council-"]):not(.staff).closed-topic .reply, 
body:not([class*="category-council-"]):not(.staff).closed-topic #topic-footer-buttons .create, 
body:not([class*="category-council-"]):not(.staff).closed-topic .timeline-container .create, 
body:not([class*="category-council-"]):not(.staff).closed-topic #reply-control {
  display: none !important;
}

Cela semble correct à première vue, mais ensuite je vois que body.closed-topic est appliqué à la liste des sujets… ce qui n’a vraiment pas de sens.

Cette classe n’est pas présente par défaut dans Discourse, il faut donc trouver une autre personnalisation qui l’ajoute…

<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
const controller = container.lookup("controller:topic");
const currentUser = api.getCurrentUser();

api.onPageChange(() => {

  if (!currentUser || currentUser.admin || currentUser.moderator || currentUser.trust_level != 4 ) {
    return;
  } else {
    let model = controller.get("model");
    
    document.querySelector("body").classList.add("closed-topic");
    
    if (model) {
      if (!model.closed) {
        document.querySelector("body").classList.remove("closed-topic");
      }
    }
  }

});
</script>

Donc ici, si vous êtes connecté, pas administrateur, pas modérateur, et que vous avez un niveau de confiance 4… alors la classe closed-topic est ajoutée au corps de la page.

Cette classe n’est supprimée que si model.closed est faux, ce qui signifie… si ce n’est pas un sujet fermé (ou même si ce n’est pas un sujet du tout), la classe closed-topic sera appliquée.

Cette ligne :

document.querySelector("body").classList.add("closed-topic");

devrait probablement être à l’intérieur de if (model) car sinon elle est appliquée même lorsqu’il n’y a pas de modèle présent (par exemple, lorsque vous n’êtes pas dans un sujet)…

Il semble que l’intention était d’empêcher les utilisateurs de niveau de confiance 4 de répondre aux sujets fermés, mais c’est appliqué de manière trop large.

5 « J'aime »

Merci beaucoup, c’est ce que je cherchais.

Héhé, je me demande si je suis la raison de ce changement. J’ai découvert ce bug et je l’ai exploité sans retenue. Je n’ai jamais compris la raison d’exiger que les gens créent un nouveau fil de discussion lorsque l’on a des informations supplémentaires à ajouter à un ancien.

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