Um die benutzerdefinierten Daten in Discourse zu speichern, bin ich zu Admin > Anpassen > Benutzerfelder gegangen und habe ein benutzerdefiniertes Feld erstellt. Die benötigten Daten stellen ein Prozentwert für den Fortschritt dar, und ich habe „Text" als Feldtyp gewählt. Der Name des Felds wird nur auf der Benutzerkarte und im Profil angezeigt; leider kann er nicht verwendet werden, um programmatisch auf die Felddaten zuzugreifen.
Das Feld, das den Fortschritt speichert, war das dritte benutzerdefinierte Feld, das ich erstellt habe, weshalb die Zahl „3" eine sehr wichtige Rolle spielt.
Mit Hilfe der API habe ich ein curl-Skript geschrieben (unterstützt durch https://meta.discourse.org/t/api-cannot-update-user/63876/4), um das Feld mit Testdaten zu füllen. Da das zu befüllende Feld das dritte von mir erstellte war, lautet meine Datenzeile im curl-Skript:
--data '{ "user_fields": { "3":"87" } }'
Um die Daten anzuzeigen, musste ich zu Admin > Einstellungen > Benutzer gehen, zur Option „Öffentliche benutzerdefinierte Benutzerfelder" scrollen und das Feld freigeben (whitelist). Da das Feld das dritte erstellte war, musste ich „user_field_3" freigeben und nicht den tatsächlichen Namen, den ich dem Feld gegeben habe.
An diesem Punkt habe ich ein einfaches Plugin mit folgendem Code erstellt:
import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
name: 'progress-indicator',
initialize() {
withPluginApi("0.8.23", api => {
api.decorateWidget('post-avatar:after', helper => {
let progress = helper.attrs.userCustomFields['user_field_3'];
let retString = helper.h("div.progress-wrapper",
{style: 'border: 1px solid blue; width:100%;'},
helper.h('div.progress-bar',{style: 'width:'+progress+'%; background-color: green; height: 10px;'})
);
return retString;
});
});
}
};
Die endgültige Ausgabe