import discourseComputed from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; import AdminUser from "admin/models/admin-user"; import { escapeExpression } from "discourse/lib/utilities"; import RestModel from "discourse/models/rest"; function format(label, value, escape = true) { return value ? `${I18n.t(label)}: ${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 ? `${postId}` : null; let lines = [ format("email", email), format("admin.logs.ip_address", ipAddress), format("admin.logs.topic_id", topicId), 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("
"); return formatted.length > 0 ? formatted + "
" : ""; }, @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;