Skip to content
Open
44 changes: 38 additions & 6 deletions app/controllers/works_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -820,15 +820,47 @@ def index_page_title
end

def log_admin_activity
if logged_in_as_admin?
options = { action: params[:action] }
return unless logged_in_as_admin?

if params[:action] == 'update_tags'
summary = "Old tags: #{@work.tags.pluck(:name).join(', ')}"
if params[:action] == "update_tags"
Copy link
Contributor Author

@slavalamp slavalamp Jan 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed code style for the whole method (swapped a giant if condition for a return unless and removed an unused variable assignment) because it was small and i'm adding a lot to it anyway :")

this if condition also isn't needed right now since this is only executed for the "update_tags" action anyway, but i'm not sure this method isn't planned to be used for something else, so keeping it just in case

unless params[:work][:language_id].empty?
old_language_id = @work.language_id
new_language_id = params[:work][:language_id].to_i

if old_language_id != new_language_id
new_language_name = Language.find_by(id: new_language_id).name
edit_language_summary = "<p>Old language: #{@work.language.name}</p><p>New language: #{new_language_name}</p>"

AdminActivity.log_action(current_admin, @work, action: "edit language", summary: edit_language_summary)
end
end

AdminActivity.log_action(current_admin, @work, action: params[:action], summary: summary)
end
# Don't log if nothing changed.
rating_changed = params[:work][:rating_string] != @work.rating_string
fandoms_changed = params[:work][:fandom_string] != @work.fandom_string
relationships_changed = params[:work][:relationship_string] != @work.relationship_string
characters_changed = params[:work][:character_string] != @work.character_string
freeforms_changed = params[:work][:freeform_string] != @work.freeform_string
# The category_strings and archive_warning_strings params values
# both start with an empty element which has to be dropped here
categories_changed = if params[:work][:category_strings].nil?
params[:work][:category_string] != @work.category_string
else
params[:work][:category_strings].drop(1).sort != @work.category_strings.sort
end
warnings_changed = if params[:work][:archive_warning_strings].nil?
params[:work][:archive_warning_string] != @work.archive_warning_string
else
params[:work][:archive_warning_strings].drop(1).sort != @work.archive_warning_strings.sort
end
return unless rating_changed || fandoms_changed || relationships_changed ||
characters_changed || freeforms_changed ||
categories_changed || warnings_changed

summary = "Old tags: #{@work.tags.pluck(:name).join(', ')}"
end

AdminActivity.log_action(current_admin, @work, action: params[:action], summary: summary)
end

private
Expand Down
2 changes: 1 addition & 1 deletion app/helpers/admin_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def admin_activity_target_link(activity)
# handled differently from summaries that use item.inspect (and thus contain
# angle brackets).
def admin_activity_summary(activity)
if activity.action == "edit pseud" || activity.action == "edit profile"
if activity.action == "edit pseud" || activity.action == "edit profile" || activity.action == "edit language"
raw sanitize_field(activity, :summary)
else
activity.summary
Expand Down
40 changes: 39 additions & 1 deletion features/admins/admin_works.feature
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,11 @@ Feature: Admin Actions for Works, Comments, Series, Bookmarks
And I press "Update"
Then I should see "Deutsch"
And I should not see "English"
When I follow "Activities"
Then I should see "edit language"
When I visit the last activities item
Then I should see "Old language: English"
And I should see "New language: Deutsch"

Scenario: Admin can edit language on works when previewing first
Given basic languages
Expand All @@ -392,9 +397,42 @@ Feature: Admin Actions for Works, Comments, Series, Bookmarks
And I press "Preview"
Then I should see "Preview Tags and Language"
When I press "Update"
Then I should see "Deutsch"
Then I should see "Deutsch"
And I should not see "English"

Scenario: Admin can edit tags and language at the same time on works
Given basic languages
And the work "Wrong Tags and Language"
When I am logged in as a "policy_and_abuse" admin
And I view the work "Wrong Tags and Language"
And I follow "Edit Tags and Language"
When I select "Mature" from "Rating"
And I select "Deutsch" from "Choose a language"
And I press "Update"
And I follow "Activities"
Then I should see "update_tags"
And I should see "edit language"

Scenario: When admin does not edit tags or language, no Activities entries are added
Given the work "Nothing Wrong"
When I am logged in as a "policy_and_abuse" admin
And I view the work "Nothing Wrong"
And I follow "Edit Tags and Language"
And I press "Update"
And I follow "Activities"
Then I should not see "update_tags"
And I should not see "edit language"

Scenario: test thing to see how it works in tests
Given the work "Nothing Wrong"
When I am logged in as a "policy_and_abuse" admin
And I view the work "Nothing Wrong"
And I follow "Edit Tags and Language"
And I press "Update"
And I follow "Activities"
Then I should not see "update_tags"
And I should not see "edit language"

Scenario: can mark a work as spam
Given the work "Spammity Spam"
And I am logged in as a "policy_and_abuse" admin
Expand Down
Loading