From b4533a1720250ea8da86b0c8a2fcabf34223633b Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 16 Oct 2014 18:35:23 +0800 Subject: [PATCH] fix for upgrading 4.2 to 4.5 --- app/uploaders/asset_uploader.rb | 23 +++++++++++++++++++++++ app/uploaders/image_uploader.rb | 22 ++++++++++++++++++++++ lib/tasks/upgrade.rake | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/app/uploaders/asset_uploader.rb b/app/uploaders/asset_uploader.rb index 0ed1d48..8db6f57 100644 --- a/app/uploaders/asset_uploader.rb +++ b/app/uploaders/asset_uploader.rb @@ -21,6 +21,29 @@ class AssetUploader < CarrierWave::Uploader::Base "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + # override + def filename + @original_filename + end + + # override + def original_filename=(filename) + @original_filename = super(filename) + + if(@original_filename.bytesize > 200) + original_file_extension = File.extname(@original_filename) + + @original_filename.force_encoding("ascii-8bit") + @original_filename = @original_filename[0, (200 - original_file_extension.bytesize)] + @original_filename.encode!("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '') + @original_filename.encode!("UTF-8") + + @original_filename += original_file_extension + end + + @original_filename + end + # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url # "/images/fallback/" + [version_name, "default.png"].compact.join('_') diff --git a/app/uploaders/image_uploader.rb b/app/uploaders/image_uploader.rb index 61a699b..8ad579d 100644 --- a/app/uploaders/image_uploader.rb +++ b/app/uploaders/image_uploader.rb @@ -19,6 +19,28 @@ class ImageUploader < CarrierWave::Uploader::Base "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end + # override + def filename + @original_filename + end + + # override + def original_filename=(filename) + @original_filename = super(filename) + + if(@original_filename.bytesize > 200) + original_file_extension = File.extname(@original_filename) + + @original_filename.force_encoding("ascii-8bit") + @original_filename = @original_filename[0, (200 - original_file_extension.bytesize)] + @original_filename.encode!("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '') + @original_filename.encode!("UTF-8") + + @original_filename += original_file_extension + end + + @original_filename + end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url # # For Rails 3.1+ asset pipeline compatibility: diff --git a/lib/tasks/upgrade.rake b/lib/tasks/upgrade.rake index 8dd6516..3fc9029 100644 --- a/lib/tasks/upgrade.rake +++ b/lib/tasks/upgrade.rake @@ -50,6 +50,8 @@ namespace :upgrade do bulletin.other_mailaddress = announcement["other_mailaddress"] bulletin.public = announcement["public"] bulletin.subtitle_translations = announcement["subtitle"] + announcement["text"]["en"] = smart_downloader(announcement["text"]["en"], args.url.chomp("/")) + announcement["text"]["zh_tw"] = smart_downloader(announcement["text"]["zh_tw"], args.url.chomp("/")) bulletin.text_translations = announcement["text"] bulletin.title_translations = announcement["title"] bulletin.remote_image_url = announcement["image"] @@ -84,4 +86,33 @@ namespace :upgrade do puts "Import has some problem." end end -end \ No newline at end of file +end + +def smart_downloader(data,url) + @data = data + @user = User.where(:user_name => "rulingcom").first + excluded_extensions = ["php","/"] + regex = /https?:\/\/[\S]+/ + # @links = URI.extract(@data) rescue [] + @links = @data.scan(regex) rescue [] + @links = @links.map{|link| link.chomp("\"") if (link.include?url rescue false)}.reject{|link| link.nil?}.uniq + @links.each do |link| + link = link.gsub("\&\;","&") + temp = link.gsub(url,"") + extension = temp.split(".").last rescue nil + if (extension.nil? || excluded_extensions.include?(extension)) + @data = @data.sub(link,"#") + else + a = Asset.new + a.remote_data_url = link + a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename} + if (a.save! rescue false) + @user.assets << a + @user.save + link = link.gsub("&","\&\;") + @data = @data.sub(link, a.data.url) + end + end + end + @data + end \ No newline at end of file