FEATURE: Penalty history improvements (#13359)
* FEATURE: add penalty history when silencing a user Display penalty history (last 6 months) when silencing/suspending a user * FEATURE: allow default penalty values to be chosen Adds a site setting that designates default penalty values in hours. Silence/suspend modals will auto-fill in the default values, but otherwise will still allow moderators to pick and overwrite values as normal. First silence/suspend: first value Second silence/suspend: second value etc. Penalty counts are forgiven at the same rate as tl3 promotion requirements do. Co-authored-by: jjaffeux <j.jaffeux@gmail.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import Component from "@ember/component";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
|
||||
export default Component.extend({
|
||||
classNames: ["penalty-history"],
|
||||
|
||||
@discourseComputed("user.penalty_counts.suspended")
|
||||
suspendedCountClass(count) {
|
||||
if (count > 0) {
|
||||
return "danger";
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
@discourseComputed("user.penalty_counts.silenced")
|
||||
silencedCountClass(count) {
|
||||
if (count > 0) {
|
||||
return "danger";
|
||||
}
|
||||
return "";
|
||||
},
|
||||
});
|
||||
@@ -12,6 +12,10 @@ export default Controller.extend(PenaltyController, {
|
||||
this.setProperties({ silenceUntil: null, silencing: false });
|
||||
},
|
||||
|
||||
finishedSetup() {
|
||||
this.set("silenceUntil", this.user?.next_penalty);
|
||||
},
|
||||
|
||||
@discourseComputed("silenceUntil", "reason", "silencing")
|
||||
submitDisabled(silenceUntil, reason, silencing) {
|
||||
return silencing || isEmpty(silenceUntil) || !reason || reason.length < 1;
|
||||
|
||||
@@ -12,6 +12,10 @@ export default Controller.extend(PenaltyController, {
|
||||
this.setProperties({ suspendUntil: null, suspending: false });
|
||||
},
|
||||
|
||||
finishedSetup() {
|
||||
this.set("suspendUntil", this.user?.next_penalty);
|
||||
},
|
||||
|
||||
@discourseComputed("suspendUntil", "reason", "suspending")
|
||||
submitDisabled(suspendUntil, reason, suspending) {
|
||||
return suspending || isEmpty(suspendUntil) || !reason || reason.length < 1;
|
||||
|
||||
@@ -48,7 +48,6 @@ export default Service.extend({
|
||||
|
||||
_showControlModal(type, user, opts) {
|
||||
opts = opts || {};
|
||||
|
||||
let controller = showModal(`admin-${type}-user`, {
|
||||
admin: true,
|
||||
modalClass: `${type}-user-modal`,
|
||||
@@ -65,6 +64,8 @@ export default Service.extend({
|
||||
before: opts.before,
|
||||
successCallback: opts.successCallback,
|
||||
});
|
||||
|
||||
controller.finishedSetup();
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="suspended-count {{suspendedCountClass}}" title={{i18n "admin.user.last_six_months"}}>
|
||||
<label>{{i18n "admin.user.suspended_count"}}</label>
|
||||
<span>{{user.penalty_counts.suspended}}</span>
|
||||
</div>
|
||||
<div class="silenced-count {{silencedCountClass}}" title={{i18n "admin.user.last_six_months"}}>
|
||||
<label>{{i18n "admin.user.silenced_count"}}</label>
|
||||
<span>{{user.penalty_counts.silenced}}</span>
|
||||
</div>
|
||||
@@ -5,6 +5,8 @@
|
||||
<div class="alert alert-error">{{errorMessage}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{admin-penalty-history user=user}}
|
||||
|
||||
<div class="until-controls">
|
||||
<label>
|
||||
{{future-date-input
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
{{/if}}
|
||||
|
||||
{{#if user.canSuspend}}
|
||||
{{admin-penalty-history user=user}}
|
||||
|
||||
<div class="until-controls">
|
||||
<label>
|
||||
{{future-date-input
|
||||
|
||||
@@ -14,9 +14,10 @@ export default Component.extend({
|
||||
displayLabel: null,
|
||||
labelClasses: null,
|
||||
|
||||
timeInputDisabled: empty("date"),
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
if (this.input) {
|
||||
const datetime = moment(this.input);
|
||||
this.setProperties({
|
||||
@@ -27,8 +28,6 @@ export default Component.extend({
|
||||
}
|
||||
},
|
||||
|
||||
timeInputDisabled: empty("date"),
|
||||
|
||||
@observes("date", "time")
|
||||
_updateInput() {
|
||||
if (!this.date) {
|
||||
|
||||
Reference in New Issue
Block a user