mirror of
https://github.com/discourse/discourse.git
synced 2024-12-15 21:33:49 +08:00
114 lines
2.8 KiB
JavaScript
114 lines
2.8 KiB
JavaScript
import AdminUser from "admin/models/admin-user";
|
|
import I18n from "I18n";
|
|
import RestModel from "discourse/models/rest";
|
|
import { ajax } from "discourse/lib/ajax";
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
|
import { escapeExpression } from "discourse/lib/utilities";
|
|
|
|
function format(label, value, escape = true) {
|
|
return value
|
|
? `<b>${I18n.t(label)}</b>: ${escape ? escapeExpression(value) : value}`
|
|
: "";
|
|
}
|
|
|
|
const StaffActionLog = RestModel.extend({
|
|
showFullDetails: false,
|
|
|
|
@discourseComputed("action_name")
|
|
actionName(actionName) {
|
|
return I18n.t(`admin.logs.staff_actions.actions.${actionName}`);
|
|
},
|
|
|
|
@discourseComputed(
|
|
"email",
|
|
"ip_address",
|
|
"topic_id",
|
|
"post_id",
|
|
"category_id",
|
|
"new_value",
|
|
"previous_value",
|
|
"details",
|
|
"useCustomModalForDetails",
|
|
"useModalForDetails"
|
|
)
|
|
formattedDetails(
|
|
email,
|
|
ipAddress,
|
|
topicId,
|
|
postId,
|
|
categoryId,
|
|
newValue,
|
|
previousValue,
|
|
details,
|
|
useCustomModalForDetails,
|
|
useModalForDetails
|
|
) {
|
|
const postLink = postId
|
|
? `<a href data-link-post-id="${postId}">${postId}</a>`
|
|
: null;
|
|
|
|
const topicLink = topicId
|
|
? `<a href data-link-topic-id="${topicId}">${topicId}</a>`
|
|
: null;
|
|
|
|
let lines = [
|
|
format("email", email),
|
|
format("admin.logs.ip_address", ipAddress),
|
|
format("admin.logs.topic_id", topicLink, false),
|
|
format("admin.logs.post_id", postLink, false),
|
|
format("admin.logs.category_id", categoryId),
|
|
];
|
|
|
|
if (!useCustomModalForDetails) {
|
|
lines.push(format("admin.logs.staff_actions.new_value", newValue));
|
|
lines.push(
|
|
format("admin.logs.staff_actions.previous_value", previousValue)
|
|
);
|
|
}
|
|
|
|
if (!useModalForDetails && details) {
|
|
lines = [...lines, ...escapeExpression(details).split("\n")];
|
|
}
|
|
|
|
const formatted = lines.filter((l) => l.length > 0).join("<br/>");
|
|
return formatted.length > 0 ? formatted + "<br/>" : "";
|
|
},
|
|
|
|
@discourseComputed("details")
|
|
useModalForDetails(details) {
|
|
return details && details.length > 100;
|
|
},
|
|
|
|
@discourseComputed("action_name")
|
|
useCustomModalForDetails(actionName) {
|
|
return ["change_theme", "delete_theme"].includes(actionName);
|
|
},
|
|
});
|
|
|
|
StaffActionLog.reopenClass({
|
|
munge(json) {
|
|
if (json.acting_user) {
|
|
json.acting_user = AdminUser.create(json.acting_user);
|
|
}
|
|
if (json.target_user) {
|
|
json.target_user = AdminUser.create(json.target_user);
|
|
}
|
|
return json;
|
|
},
|
|
|
|
findAll(data) {
|
|
return ajax("/admin/logs/staff_action_logs.json", { data }).then(
|
|
(result) => {
|
|
return {
|
|
staff_action_logs: result.staff_action_logs.map((s) =>
|
|
StaffActionLog.create(s)
|
|
),
|
|
user_history_actions: result.user_history_actions,
|
|
};
|
|
}
|
|
);
|
|
},
|
|
});
|
|
|
|
export default StaffActionLog;
|