mirror of
https://github.com/discourse/discourse.git
synced 2024-12-05 10:15:47 +08:00
e7a4742490
Uppy adds the file name as the "name" parameter in the payload by default, which means that for things like the emoji uploader which have a name param used by the controller, that param will be passed as the file name. We already use the existing file name if the name param is null, so this commit just does further cleanup of the name param, removing the extension if it is a filename so we don't end up with emoji names like blah_png.
66 lines
1.8 KiB
Ruby
66 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Admin::EmojisController < Admin::AdminController
|
|
|
|
def index
|
|
render_serialized(Emoji.custom, EmojiSerializer, root: false)
|
|
end
|
|
|
|
# TODO (martin) Figure out a way that this kind of custom logic can
|
|
# be run in the ExternalUploadManager when a direct S3 upload is completed,
|
|
# related to preventDirectS3Uploads 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 = name.gsub(/[^a-z0-9]+/i, '_')
|
|
.gsub(/_{2,}/, '_')
|
|
.downcase
|
|
|
|
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)
|
|
|
|
if custom_emoji.save
|
|
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
|
|
CustomEmoji.find_by(name: name)&.destroy!
|
|
|
|
Emoji.clear_cache
|
|
|
|
Jobs.enqueue(:rebake_custom_emoji_posts, name: name)
|
|
|
|
render json: success_json
|
|
end
|
|
|
|
end
|