(en grande partie copié de Creating a component to show last-chance warning when replying to old topics)
J’administre une communauté qui a historiquement un certain problème avec le déterrage de fils de discussion.
Je connais warn_reviving_old_topic_age (et nous l’avons configuré), mais il semble que de nombreux utilisateurs ne voient pas l’alerte. Nous ne voulons pas non plus instituer de minuteries globales de sujets car il existe réellement des cas d’utilisation où la relance d’un ancien fil de discussion est utile.
Notre solution précédente consistait à bloquer la publication dans une boîte de dialogue “êtes-vous sûr” basée sur ce composant :
mais ce composant est marqué comme cassé (et en effet notre version est également cassée). Conformément aux conseils de ma demande de support initiale, j’ai commencé à examiner le détecteur de code non formaté, qui a été très utile, mais j’ai du mal à franchir la ligne d’arrivée.
Actuellement, j’ai quelque chose qui ressemble à ceci :
import { withPluginApi } from "discourse/lib/plugin-api";
import { inject as service } from "@ember/service";
export default {
name: "discourse-necro-warnings",
initialize() {
withPluginApi("0.8.8", (api) => {
api.modifyClass("service:composer", (Superclass) =>
class extends Superclass {
save(...args) {
let lastPostedAt = moment(this.model?.topic?.last_posted_at);
let now = moment();
let diff = now - lastPostedAt;
console.log(diff);
let d = moment.duration(settings.death_timer);
if (diff >= d && !skipWarning) {
// TODO: i18n
let diffH = moment.duration(diff).humanize();
let confirmationMessage = `Le dernier message de ce fil remonte à ${diffH}. Êtes-vous sûr de vouloir déterrer ce fil ?`;
this.dialog.yesNoConfirm({
message: confirmationMessage,
didConfirm: () => {
super.save(...args);
},
});
} else {
super.save(...args);
}
}
}
);
});
},
};
mais cela ne semble pas fonctionner. L’ajout de quelques journaux de débogage confirme que this.model?.topic?.last_posted_at est bien indéfini, et je n’ai aucune idée si la boîte de dialogue de confirmation fonctionne également.
Tout conseil serait apprécié ! Je pense qu’il suffirait d’obtenir une chaîne ISO de la date de publication actuelle du sujet (le cas échéant) pour que je puisse progresser.