From 2d48caffdfffd72b51c1b1591ee50cfed3aba199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 20 Nov 2017 23:50:23 +0100 Subject: [PATCH] FIX: be more lenient when deleting a custom emoji --- app/controllers/admin/emojis_controller.rb | 9 ++------- app/jobs/scheduled/clean_up_uploads.rb | 5 +++-- app/models/emoji.rb | 8 +++----- spec/requests/admin/emojis_controller_spec.rb | 2 +- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/app/controllers/admin/emojis_controller.rb b/app/controllers/admin/emojis_controller.rb index 47b78e83b4d..92c614e59ad 100644 --- a/app/controllers/admin/emojis_controller.rb +++ b/app/controllers/admin/emojis_controller.rb @@ -45,13 +45,8 @@ class Admin::EmojisController < Admin::AdminController def destroy name = params.require(:id) - custom_emoji = CustomEmoji.find_by(name: name) - raise Discourse::InvalidParameters unless custom_emoji - - CustomEmoji.transaction do - custom_emoji.upload.destroy! - custom_emoji.destroy! - end + # NOTE: the upload will automatically be removed by the 'clean_up_uploads' job + CustomEmoji.find_by(name: name)&.destroy! Emoji.clear_cache diff --git a/app/jobs/scheduled/clean_up_uploads.rb b/app/jobs/scheduled/clean_up_uploads.rb index aa6728ec16c..9163256678e 100644 --- a/app/jobs/scheduled/clean_up_uploads.rb +++ b/app/jobs/scheduled/clean_up_uploads.rb @@ -35,7 +35,7 @@ module Jobs .where("uploads.created_at < ?", grace_period.hour.ago) .joins("LEFT JOIN post_uploads pu ON pu.upload_id = uploads.id") .joins("LEFT JOIN users u ON u.uploaded_avatar_id = uploads.id") - .joins("LEFT JOIN user_avatars ua ON (ua.gravatar_upload_id = uploads.id OR ua.custom_upload_id = uploads.id)") + .joins("LEFT JOIN user_avatars ua ON ua.gravatar_upload_id = uploads.id OR ua.custom_upload_id = uploads.id") .joins("LEFT JOIN user_profiles up ON up.profile_background = uploads.url OR up.card_background = uploads.url") .joins("LEFT JOIN categories c ON c.uploaded_logo_id = uploads.id OR c.uploaded_background_id = uploads.id") .joins("LEFT JOIN custom_emojis ce ON ce.upload_id = uploads.id") @@ -45,7 +45,8 @@ module Jobs .where("ua.gravatar_upload_id IS NULL AND ua.custom_upload_id IS NULL") .where("up.profile_background IS NULL AND up.card_background IS NULL") .where("c.uploaded_logo_id IS NULL AND c.uploaded_background_id IS NULL") - .where("ce.upload_id IS NULL AND tf.upload_id IS NULL") + .where("ce.upload_id IS NULL") + .where("tf.upload_id IS NULL") result = result.where("uploads.url NOT IN (?)", ignore_urls) if ignore_urls.present? diff --git a/app/models/emoji.rb b/app/models/emoji.rb index ed4a981dabb..dd01b21ed84 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -59,11 +59,9 @@ class Emoji end def self.clear_cache - Discourse.cache.delete(cache_key("custom_emojis")) - Discourse.cache.delete(cache_key("standard_emojis")) - Discourse.cache.delete(cache_key("aliases_emojis")) - Discourse.cache.delete(cache_key("all_emojis")) - Discourse.cache.delete(cache_key("tonable_emojis")) + %w{custom standard aliases all tonable}.each do |key| + Discourse.cache.delete(cache_key("#{key}_emojis")) + end end def self.db_file diff --git a/spec/requests/admin/emojis_controller_spec.rb b/spec/requests/admin/emojis_controller_spec.rb index d2d02505840..d8af9ea8ae2 100644 --- a/spec/requests/admin/emojis_controller_spec.rb +++ b/spec/requests/admin/emojis_controller_spec.rb @@ -67,7 +67,7 @@ RSpec.describe Admin::EmojisController do expect do delete "/admin/customize/emojis/#{custom_emoji.name}.json", params: { name: 'test' } - end.to change { Upload.count }.by(-1).and change { CustomEmoji.count }.by(-1) + end.to change { CustomEmoji.count }.by(-1) end end end