(в основном скопировано с Creating a component to show last-chance warning when replying to old topics)
У меня работает сообщество, которое исторически страдает от проблемы с «некро-бампингом» тем.
Я знаком с warn_reviving_old_topic_age (и мы действительно его настроили), но, похоже, многие пользователи не видят предупреждение. Кроме того, мы не хотим вводить глобальные таймеры для тем, так как действительно существуют случаи, когда возрождение старой темы полезно.
Нашим предыдущим решением была блокировка публикации через диалоговое окно «Вы уверены?», основанное на этом компоненте:
но этот компонент помечен как нерабочий (и наша версия, действительно, тоже не работает). Следуя совету из моего первоначального запроса в службу поддержки, я начал изучать детектор неформатированного кода, который оказался очень полезным, но мне не удаётся довести дело до конца.
В настоящее время у меня есть что-то вроде этого:
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 = `The last post in this thread was ${diffH} ago. Are you sure you want to bump this thread?`;
this.dialog.yesNoConfirm({
message: confirmationMessage,
didConfirm: () => {
super.save(...args)
}
});
} else {
super.save(...args);
}
}
});
});
},
};
но, похоже, это не работает. Добавление некоторых отладочных логов подтверждает, что this.model?.topic?.last_posted_at действительно равен undefined, и я понятия не имею, работает ли вообще диалог подтверждения.
Любые советы будут приветствоваться! Я думаю, что достаточно получить ISO-строку с текущей датой «бампа» темы (если она есть), чтобы я мог продвинуться вперёд.