2019-05-02 17:17:27 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-05-04 16:09:58 -05:00
|
|
|
module ImportScripts
|
|
|
|
class Uploader
|
|
|
|
# Creates an upload.
|
|
|
|
# Expects path to be the full path and filename of the source file.
|
|
|
|
# @return [Upload]
|
|
|
|
def create_upload(user_id, path, source_filename)
|
2018-06-17 15:54:50 -05:00
|
|
|
tmp = copy_to_tempfile(path)
|
2015-05-04 16:09:58 -05:00
|
|
|
|
2017-05-10 17:16:57 -05:00
|
|
|
UploadCreator.new(tmp, source_filename).create_for(user_id)
|
2015-05-04 16:09:58 -05:00
|
|
|
rescue => e
|
2018-08-12 15:02:17 -05:00
|
|
|
STDERR.puts "Failed to create upload: #{e}"
|
2015-05-04 16:09:58 -05:00
|
|
|
nil
|
|
|
|
ensure
|
|
|
|
tmp.close rescue nil
|
|
|
|
tmp.unlink rescue nil
|
|
|
|
end
|
|
|
|
|
2018-06-17 15:54:50 -05:00
|
|
|
def create_avatar(user, avatar_path)
|
|
|
|
tempfile = copy_to_tempfile(avatar_path)
|
|
|
|
filename = "avatar#{File.extname(avatar_path)}"
|
|
|
|
upload = UploadCreator.new(tempfile, filename, type: "avatar").create_for(user.id)
|
|
|
|
|
|
|
|
if upload.present? && upload.persisted?
|
|
|
|
user.create_user_avatar
|
|
|
|
user.user_avatar.update(custom_upload_id: upload.id)
|
|
|
|
user.update(uploaded_avatar_id: upload.id)
|
|
|
|
else
|
2018-08-12 15:02:17 -05:00
|
|
|
STDERR.puts "Failed to upload avatar for user #{user.username}: #{avatar_path}"
|
|
|
|
STDERR.puts upload.errors.inspect if upload
|
2018-06-17 15:54:50 -05:00
|
|
|
end
|
2018-08-12 15:02:17 -05:00
|
|
|
rescue
|
|
|
|
STDERR.puts "Failed to create avatar for user #{user.username}: #{avatar_path}"
|
2018-06-17 15:54:50 -05:00
|
|
|
ensure
|
|
|
|
tempfile.close! if tempfile
|
|
|
|
end
|
|
|
|
|
2015-05-04 16:09:58 -05:00
|
|
|
def html_for_upload(upload, display_filename)
|
2019-07-25 09:34:46 -05:00
|
|
|
UploadMarkdown.new(upload).to_markdown(display_name: display_filename)
|
2015-05-04 16:09:58 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def embedded_image_html(upload)
|
2019-07-25 09:34:46 -05:00
|
|
|
UploadMarkdown.new(upload).image_markdown
|
2015-05-04 16:09:58 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def attachment_html(upload, display_filename)
|
2019-07-25 09:34:46 -05:00
|
|
|
UploadMarkdown.new(upload).attachment_markdown(display_name: display_filename)
|
2015-05-04 16:09:58 -05:00
|
|
|
end
|
2018-06-17 15:54:50 -05:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def copy_to_tempfile(source_path)
|
2018-08-12 15:26:07 -05:00
|
|
|
extension = File.extname(source_path)
|
|
|
|
tmp = Tempfile.new(['discourse-upload', extension])
|
2018-06-17 15:54:50 -05:00
|
|
|
|
|
|
|
File.open(source_path) do |source_stream|
|
|
|
|
IO.copy_stream(source_stream, tmp)
|
|
|
|
end
|
|
|
|
|
|
|
|
tmp.rewind
|
|
|
|
tmp
|
|
|
|
end
|
2015-05-04 16:09:58 -05:00
|
|
|
end
|
|
|
|
end
|