import { exportEntity } from 'discourse/lib/export-csv'; import { outputExportResult } from 'discourse/lib/export-result'; import StaffActionLog from 'admin/models/staff-action-log'; export default Ember.Controller.extend({ loading: false, filters: null, userHistoryActions: [], filtersExists: Ember.computed.gt('filterCount', 0), filterActionIdChanged: function(){ const filterActionId = this.get('filterActionId'); if (filterActionId) { this._changeFilters({ action_name: this.get('userHistoryActions').findBy("id", parseInt(filterActionId,10)).name_raw, action_id: filterActionId }); } }.observes('filterActionId'), actionFilter: function() { var name = this.get('filters.action_name'); if (name) { return I18n.t("admin.logs.staff_actions.actions." + name); } else { return null; } }.property('filters.action_name'), showInstructions: Ember.computed.gt('model.length', 0), refresh: function() { this.set('loading', true); var filters = this.get('filters'), params = {}, count = 0; // Don't send null values Object.keys(filters).forEach(function(k) { var val = filters.get(k); if (val) { params[k] = val; count += 1; } }); this.set('filterCount', count); StaffActionLog.findAll(params).then((result) => { this.set('model', result.staff_action_logs); if (this.get('userHistoryActions').length === 0) { let actionTypes = result.user_history_actions.map(pair => { return { id: pair.id, name: I18n.t("admin.logs.staff_actions.actions." + pair.name), name_raw: pair.name }; }); actionTypes = _.sortBy(actionTypes, row => row.name); this.set('userHistoryActions', actionTypes); } }).finally(()=>{ this.set('loading', false); }); }, resetFilters: function() { this.set('filters', Ember.Object.create()); this.refresh(); }.on('init'), _changeFilters: function(props) { this.get('filters').setProperties(props); this.refresh(); }, actions: { clearFilter: function(key) { var changed = {}; // Special case, clear all action related stuff if (key === 'actionFilter') { changed.action_name = null; changed.action_id = null; changed.custom_type = null; this.set("filterActionId", null); } else { changed[key] = null; } this._changeFilters(changed); }, clearAllFilters: function() { this.set("filterActionId", null); this.resetFilters(); }, filterByAction: function(logItem) { this._changeFilters({ action_name: logItem.get('action_name'), action_id: logItem.get('action'), custom_type: logItem.get('custom_type') }); }, filterByStaffUser: function(acting_user) { this._changeFilters({ acting_user: acting_user.username }); }, filterByTargetUser: function(target_user) { this._changeFilters({ target_user: target_user.username }); }, filterBySubject: function(subject) { this._changeFilters({ subject: subject }); }, exportStaffActionLogs: function() { exportEntity('staff_action').then(outputExportResult); } } });