# frozen_string_literal: true class Admin::EmojisController < Admin::AdminController def index render_serialized(Emoji.custom, EmojiSerializer, root: false) end # NOTE: This kind of custom logic also needs to be implemented to # be run in the ExternalUploadManager when a direct S3 upload is completed, # related to preventDirectS3Uploads in the UppyUploadMixin. # # Until then, preventDirectS3Uploads is set to true in the UppyUploadMixin. def create file = params[:file] || params[:files].first name = params[:name] || File.basename(file.original_filename, ".*") group = params[:group] ? params[:group].downcase : nil hijack do # fix the name name = File.basename(name, ".*") name = Emoji.sanitize_emoji_name(name) upload = UploadCreator.new(file.tempfile, file.original_filename, type: "custom_emoji").create_for( current_user.id, ) good = true data = if upload.persisted? custom_emoji = CustomEmoji.new(name: name, upload: upload, group: group, user: current_user) if custom_emoji.save StaffActionLogger.new(current_user).log_custom_emoji_create(name, group: group) Emoji.clear_cache { name: custom_emoji.name, url: custom_emoji.upload.url, group: group } else good = false failed_json.merge(errors: custom_emoji.errors.full_messages) end else good = false failed_json.merge(errors: upload.errors.full_messages) end render json: data.as_json, status: good ? 200 : 422 end end def destroy name = params.require(:id) # NOTE: the upload will automatically be removed by the 'clean_up_uploads' job emoji = CustomEmoji.find_by(name: name) if emoji.present? StaffActionLogger.new(current_user).log_custom_emoji_destroy(name) emoji.destroy! end Emoji.clear_cache Jobs.enqueue(:rebake_custom_emoji_posts, name: name) render json: success_json end end