diff --git a/app/controllers/user_feedbacks_controller.rb b/app/controllers/user_feedbacks_controller.rb index b2fe9e97c..5528ddea4 100644 --- a/app/controllers/user_feedbacks_controller.rb +++ b/app/controllers/user_feedbacks_controller.rb @@ -33,7 +33,7 @@ class UserFeedbacksController < ApplicationController def update @user_feedback = authorize UserFeedback.find(params[:id]) - @user_feedback.update(permitted_attributes(@user_feedback)) + @user_feedback.update(updater: CurrentUser.user, **permitted_attributes(@user_feedback)) respond_with(@user_feedback) end end diff --git a/app/models/user_feedback.rb b/app/models/user_feedback.rb index e45cd3d91..404c027e8 100644 --- a/app/models/user_feedback.rb +++ b/app/models/user_feedback.rb @@ -3,19 +3,14 @@ class UserFeedback < ApplicationRecord self.table_name = "user_feedback" - attr_accessor :disable_dmail_notification + attr_accessor :disable_dmail_notification, :updater belongs_to :user belongs_to :creator, class_name: "User" validates :body, presence: true validates :category, presence: true, inclusion: { in: %w[positive negative neutral] } after_create :create_dmail, unless: :disable_dmail_notification - after_update(:if => ->(rec) { CurrentUser.id != rec.creator_id}) do |rec| - ModAction.log(%{updated user feedback for "#{rec.user.name}":#{Routes.user_path(rec.user)}}, :user_feedback_update, subject: user, user: CurrentUser.user) - end - after_destroy(:if => ->(rec) { CurrentUser.id != rec.creator_id}) do |rec| - ModAction.log(%{deleted user feedback for "#{rec.user.name}":#{Routes.user_path(rec.user)}}, :user_feedback_delete, subject: user, user: CurrentUser.user) - end + after_update :create_mod_action deletable @@ -58,6 +53,16 @@ class UserFeedback < ApplicationRecord Dmail.create_automated(:to_id => user_id, :title => "Your user record has been updated", :body => body) end + def create_mod_action + raise "Updater not set" if updater.nil? + + if saved_change_to_is_deleted == [false, true] && creator != updater + ModAction.log(%{deleted user feedback for "#{user.name}":#{Routes.user_path(user)}}, :user_feedback_delete, subject: user, user: updater) + elsif creator != updater + ModAction.log(%{updated user feedback for "#{user.name}":#{Routes.user_path(user)}}, :user_feedback_update, subject: user, user: updater) + end + end + def self.available_includes [:creator, :user] end diff --git a/app/views/application/_update_notice.html.erb b/app/views/application/_update_notice.html.erb index ea49afad4..5f35c55ab 100644 --- a/app/views/application/_update_notice.html.erb +++ b/app/views/application/_update_notice.html.erb @@ -1,6 +1,6 @@ <%# record, interval %> -<% if record.respond_to?(:updater) && record.updater_id != record.creator_id %> +<% if record.respond_to?(:updater) && record.respond_to?(:updater_id) && record.updater_id != record.creator_id %>

Updated by <%= link_to_user record.updater %> <%= time_ago_in_words_tagged(record.updated_at) %>

<% elsif record.updated_at - record.created_at > (local_assigns[:interval] || 5.minutes) %>

Updated <%= time_ago_in_words_tagged(record.updated_at) %>

diff --git a/test/functional/user_feedbacks_controller_test.rb b/test/functional/user_feedbacks_controller_test.rb index 9885cfba1..2f57c0f50 100644 --- a/test/functional/user_feedbacks_controller_test.rb +++ b/test/functional/user_feedbacks_controller_test.rb @@ -30,7 +30,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest end should "allow moderators to see deleted feedbacks" do - as(@user) { @user_feedback.update!(is_deleted: true) } + @user_feedback = create(:user_feedback, is_deleted: true) get_auth user_feedback_path(@user_feedback), @mod assert_response :success end @@ -104,7 +104,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest end should "not allow updating deleted feedbacks" do - as(@user) { @user_feedback.update!(is_deleted: true) } + @user_feedback = create(:user_feedback, user: @user, creator: @critic, is_deleted: true) put_auth user_feedback_path(@user_feedback), @critic, params: { user_feedback: { body: "test" }} assert_response 403 @@ -125,6 +125,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest assert_redirected_to @user_feedback assert_equal("blah", @user_feedback.reload.body) assert_match(/updated user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description) + assert_equal("user_feedback_update", ModAction.last.category) assert_equal(@user, ModAction.last.subject) assert_equal(@mod, ModAction.last.creator) end @@ -134,7 +135,8 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest assert_redirected_to @user_feedback assert(@user_feedback.reload.is_deleted?) - assert_match(/updated user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description) + assert_match(/deleted user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description) + assert_equal("user_feedback_delete", ModAction.last.category) assert_equal(@user, ModAction.last.subject) assert_equal(@mod, ModAction.last.creator) end