Kann nicht auf Markdown-Modus als Standard setzen

Hallo, ich stelle fest, dass Benutzer auf meinem Forum den Rich-Text-Editor erhalten, wenn sie ein neues Thema erstellen, selbst wenn ich „default_composition_mode“ auf Markdown-Modus gesetzt habe. Die Forenversion ist „Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0“.

Jedes Mal, wenn ich die Änderung anwende, werde ich gefragt: „Möchten Sie diese Änderung historisch anwenden? Dies ändert die Einstellungen für 15 vorhandene Benutzer.“ und ich klicke auf Ja. Selbst dann wird den Benutzern der Rich-Text-Editor angezeigt. Ist das ein bekannter Fehler?

Bearbeiten - Hinweis: Ich habe dieses Problem mit Benutzern, die die Umschaltoption noch nie verwendet haben, um ihren Editor-Modus zwischen Rich-Text und Markdown zu wechseln. Sie haben sich heute gerade erst angemeldet, nachdem ich den Standard-Kompositionsmodus bereits am Wochenende direkt nach dem Upgrade festgelegt hatte. Ich hatte die Umschaltoption auch über das Theme-CSS ausgeblendet.

2 „Gefällt mir“

Als Nachbereitung dazu haben wir ein Plugin, das “wrap_open” BBCode-Token verwendet, welche vom Rich-Text-Editor noch nicht unterstützt werden. Daher müssen wir sicherstellen, dass wir vorerst im Markdown-Modus bleiben.

Ich habe Claude Sonnet verwendet, um den folgenden Code zu generieren, um dies sicherzustellen. Ich freue mich über jedes Feedback, wie ich ihn verbessern kann (insbesondere wenn er Fehler enthält :sweat_smile:). Ich teile ihn auch, falls er anderen Forenadministratoren hilft. Der Code gehört zu den Theme-Einstellungen > JS (/admin/customize/themes/2/common/js/edit):

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // Erzwinge den Wechsel des Editors des Benutzers in den Markdown-Modus
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // Der Benutzer sollte angemeldet sein, wenn der Composer geöffnet wurde
    if (!currentUser) {
      console.error('Kein Benutzer gefunden');
      return;
    }

    // Diese Option wurde hier gefunden
    // https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
    const currentMode = currentUser.get('user_option.composition_mode');

    if (currentMode !== 0) {
      // Nur wechseln, wenn nicht bereits im Markdown-Modus
      // Beispielverwendung: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // Speichere die Benutzereinstellung auf dem Server
      currentUser.save(['composition_mode']).then(() => {
        console.log('Erfolgreich in den Markdown-Modus gewechselt');
      }).catch((error) => {
        console.error('Fehler beim Aktualisieren des Kompositionsmodus:', error);
      });

      // Schalte die aktuelle Composer-Benutzeroberfläche sofort um
      setTimeout(() => {
        const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
        if (toggleButton) {
          const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
          if (isRichTextActive) {
            toggleButton.click();
            console.log('Aktuellen Composer in den Markdown-Modus umgeschaltet');
          }
        }
      }, 100); // Kleine Verzögerung, um sicherzustellen, dass der Composer vollständig gerendert ist
    } else {
      console.log('Bereits im Markdown-Modus, keine Änderung erforderlich');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});

Dies ist im Allgemeinen eine schlechte Praxis, sich für so etwas auf Timing zu verlassen ist fehleranfällig.

Ich werde dies abtrennen, wir wollen Administratoren auf jeden Fall erlauben, Standardeinstellungen für den Markdown-Modus festzulegen.

Was ist ein minimales Reproduktionsbeispiel hierfür?

2 „Gefällt mir“

Ich werde versuchen, dies zu reproduzieren und morgen an einer Lösung zu arbeiten, bin mir aber nicht sicher, warum dies geschieht, da der Administrator standardmäßig alle Benutzeroptionswerte festlegt (wenn Sie die vorhandene Benutzeroption in der Eingabeaufforderung verwenden) und dies alles ist, was wir zur Steuerung des Schalters verwenden.

2 „Gefällt mir“

Vielen Dank für die schnellen Antworten! :slightly_smiling_face: Ich bin mir nicht sicher, wie ich ein minimales Reproduktionsbeispiel erstellen kann. Ich teile gerne weitere Informationen aus meinem Forum, wenn Sie mir die Schritte dafür mitteilen können.

2 „Gefällt mir“

Ich habe versucht, dies heute zu reproduzieren, ohne Erfolg. Ich habe jedoch eine Frage: Aktualisieren die Benutzer den Browser, nachdem Sie dies geändert haben? Denn wenn nicht, haben wir immer noch ihre alten Benutzereinstellungen im Browser in Ember, sodass die neue Einstellung noch nicht verwendet wird.

Damit dies wie erwartet funktioniert, habe ich Folgendes getan:

  • Überprüft, ob der Editor für Benutzer A auf den Rich-Modus umgeschaltet wurde
  • Als Administrator habe ich die Standardeinstellung auf Markdown-Modus geändert und für alle Benutzer angewendet
  • Als Benutzer A habe ich die Seite neu geladen und den Editor erneut geöffnet und gesehen, dass er im Markdown-Modus war

Wenn ich in Schritt 3 nicht neu geladen hätte, würde ich immer noch den Rich-Modus sehen.

1 „Gefällt mir“

Danke für die Nachverfolgung, Martin. Ich hatte den Modus bereits am Sonntag auf Markdown eingestellt. Ich habe mich dann am Montag mit einem Testkonto in einem separaten Browserprofil angemeldet, das stattdessen den Rich Editor erhalten hat.

Wenn das hilft: Jedes Mal, wenn ich “default_composition_mode” auf “Markdown” setze, erhalte ich die Warnung: “Möchten Sie diese Änderung historisch anwenden? Dies ändert die Einstellungen für 61 bestehende Benutzer.” Ich verstehe, dass ich dies beim ersten Mal erhalten sollte, aber es scheint ein Fehler zu sein, dass es mich jedes Mal für eine bestimmte Anzahl von Benutzern auffordert.

Für weitere Tests habe ich mich gerade auch in ein weiteres Testkonto eingeloggt, das sich seit 10 Monaten nicht angemeldet hatte. Es wurde standardmäßig ebenfalls auf Rich Text-Modus eingestellt.

1 „Gefällt mir“

Das ist in der Tat sehr seltsam… wie viele Benutzer gibt es insgesamt auf Ihrer Website? Ich frage mich, ob es bei dem Schritt hängen bleibt, bei dem alle Benutzer von der Änderung der Website-Einstellung aktualisiert werden sollen, da mir aufgefallen ist, dass in der Benutzeroberfläche nichts darauf hinweist, dass die Arbeit noch stattfindet.

Das hängt davon ab, wie viele Benutzer es in der Zwischenzeit mit dem Schalter geändert haben. Es scheint, dass es bei mir im lokalen Test ordnungsgemäß funktioniert.

1 „Gefällt mir“

Laut unserer /about-Seite haben wir 20.000 Mitglieder.

Ich werde klären, dass die Schritte wie folgt sind:

  1. Besuchen Sie /admin/site_settings/category/all_results?filter=default_composition_mode
  2. Setzen Sie default_composition_mode auf Markdown-Modus. Auch wenn es bereits im Markdown-Modus ist, können Sie das Dropdown-Menü öffnen und die Markdown-Option auswählen.
  3. Erhalten Sie die Warnung für XX Anzahl von Benutzern. Akzeptieren Sie sie.
  4. Warten Sie zehn Minuten und laden Sie die Seite dann neu.
  5. Setzen Sie default_composition_mode auf Markdown-Modus (wie in Schritt 2).
  6. Erhalten Sie erneut die Warnung für die gleiche Anzahl von Benutzern.

Wie Sie erwähnt haben, weiß ich auch nicht, wie lange es dauert (über 10 Minuten?), um die historischen Benutzereinstellungen zu aktualisieren. Außerdem glaube ich nicht, dass all diese Benutzer ihre Einstellungen in dieser kurzen Zeit wieder geändert hätten. Mir könnte hier etwas entgehen.

1 „Gefällt mir“

Okay ja, das klingt definitiv nicht so, als würden viele Leute in dieser Zeit umschalten :thinking: Können Sie eine Bildschirmaufnahme machen, um zu zeigen, was passiert?

Ich würde Ihnen auch raten, sich den Netzwerk-Tab in den Chrome-Entwicklertools anzusehen. Dort sollten nach dem Speichern 2 Anfragen wie diese angezeigt werden (die erste ist diejenige, die die Aufforderung von XX Benutzern anzeigt, die zweite ist diejenige, die die Einstellung tatsächlich speichert und die Nachverfüllung durchführt):

image

Die zweite muss einen 200-Status haben. Wenn dies nicht der Fall ist und Sie weg navigieren, wird sie für vorhandene Benutzer nicht nachgefüllt.

Vielen Dank für die zusätzlichen Informationen. Die beiden Anfragen sind im Bild unten zu sehen. Beide waren ziemlich schnell.

Eine Videoaufnahme finden Sie unter diesem Drive-Link. Ich habe die Einstellung vorgenommen, den Warnhinweis akzeptiert, ein wenig gewartet, die Seite neu geladen und dann die Einstellung erneut vorgenommen. Dann erschien erneut der Warnhinweis.

1 „Gefällt mir“

Okay, die Handlung wird dichter… dieser Teil, wo Sie Markdown wählen, obwohl Sie bereits Markdown ausgewählt haben, und es bietet an zu speichern:

Das sollte nicht passieren… hier gibt es einen Fehler, bei dem der Wert für das Listenelement (0) als anders betrachtet wird als der Einstellungswert (’0’). Ich glaube also, dass das Speichern hier nichts bewirkt. Ich kann diesen Fehler beheben, aber können Sie Folgendes tun:

  • Ändern Sie die Einstellung auf „Rich Text“.
  • Speichern Sie, aber wählen Sie „Nein, nur zukünftige Änderungen übernehmen“.
  • Ändern Sie zurück zu „Markdown“.
  • Speichern Sie und wählen Sie „Ja“, um es rückwirkend anzuwenden.

Und sehen Sie, ob das die Probleme behebt, die Sie haben.

1 „Gefällt mir“

Danke für die Information. Ich habe mich mit einem alten Testkonto angemeldet, und es scheint korrekt funktioniert zu haben: Es hat den Markdown-Modus beim ersten Ausführen erhalten :slightly_smiling_face:

Gibt es eine Möglichkeit, zu überprüfen, ob alle Benutzer im Markdown-Modus sind, zum Beispiel durch die Verwendung des Daten-Explorers?

2 „Gefällt mir“

Schön zu hören, dass das Problem behoben ist!

Ja, auf jeden Fall, Sie könnten eine Abfrage wie diese durchführen:

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

Die Werte finden Sie hier:

2 „Gefällt mir“

Danke, alle unsere Benutzer sind jetzt im Markdown-Modus :partying_face:

3 „Gefällt mir“

@martin Ich habe dieses Thema vom Support zum Fehler verschoben und werde es schließen, vorausgesetzt, Sie haben den Fehler behoben. Wenn nicht, können Sie es wieder öffnen?

1 „Gefällt mir“

Es wurde von FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub behoben

5 „Gefällt mir“