You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							3.9 KiB
						
					
					
				| namespace :redmine_ckeditor do
 | |
|   namespace :assets do
 | |
|     desc "Compile and copy all assets"
 | |
|     task :precompile do
 | |
|       ENV['RAILS_ENV'] ||= "production"
 | |
|       ENV['RAILS_GROUP'] ||= "assets"
 | |
|       Rails.configuration.assets.enabled = true
 | |
|       Rails.configuration.assets.paths <<
 | |
|         File.expand_path("../../../app/assets/javascripts", __FILE__)
 | |
|       Rails.configuration.assets.precompile << "ckeditor-releases/ckeditor"
 | |
|       Rails.configuration.assets.precompile << "browser.js"
 | |
|       Rake::Task["assets:precompile:all"].invoke
 | |
|       Rake::Task["rich:assetize_ckeditor"].invoke
 | |
| 
 | |
|       ckeditor = RedmineCkeditor.root.join("assets/ckeditor")
 | |
|       mkdir_p ckeditor
 | |
|       cp_r RedmineCkeditor.root.join("app/assets/javascripts/ckeditor-releases/."), ckeditor
 | |
| 
 | |
|       ckeditor_contrib = RedmineCkeditor.root.join("assets/ckeditor-contrib")
 | |
|       mkdir_p ckeditor_contrib
 | |
|       cp_r Rails.root.join("public/assets/ckeditor-contrib/."), ckeditor_contrib
 | |
| 
 | |
|       javascripts = RedmineCkeditor.root.join("assets/javascripts")
 | |
|       stylesheets = RedmineCkeditor.root.join("assets/stylesheets")
 | |
|       images = RedmineCkeditor.root.join("assets/images")
 | |
|       mkdir_p [javascripts, stylesheets, images]
 | |
|       cp Rails.root.join("public/assets/application.js"), javascripts
 | |
|       cp Rails.root.join("public/assets/browser.js"), javascripts
 | |
|       cp Dir.glob(Rails.root.join("public/assets/rich/*.css")), stylesheets
 | |
|       cp Dir.glob(Rails.root.join("public/assets/rich/*.png")), images
 | |
| 
 | |
|       rm_rf Rails.root.join(".sass-cache")
 | |
|       Rake::Task["assets:clean:all"].invoke
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   class Migration
 | |
|     def initialize(projects, format)
 | |
|       @formatter = Redmine::WikiFormatting.formatter_for(format)
 | |
|       @messages = [
 | |
|         "*** WARNING ***",
 | |
|         "All formattable texts are migrated to HTML and cannot be rollback.",
 | |
|         "It is strongly recommended to backup your database.",
 | |
|         "***************"
 | |
|       ]
 | |
| 
 | |
|       if projects.empty?
 | |
|         @projects = Project.all
 | |
|         @messages << "projects: ALL"
 | |
|       else
 | |
|         @projects = Project.where(:identifier => projects)
 | |
|         @messages << "projects: #{@projects.pluck(:identifier).join(",")}"
 | |
|       end
 | |
|       @messages << "migration: #{format} to HTML"
 | |
|     end
 | |
| 
 | |
|     def start
 | |
|       @messages.each {|message| puts message}
 | |
|       print "Do you want to continue? (type 'y' to continue): "
 | |
|       unless STDIN.gets.chomp == 'y'
 | |
|         puts "Cancelled"
 | |
|         return
 | |
|       end
 | |
| 
 | |
|       @projects.each do |project|
 | |
|         puts "project #{project.name}"
 | |
|         project.description = format(project.description)
 | |
|         project.save!
 | |
|         migrate(:issues, project.issues, :description)
 | |
|         migrate(:journals, Journal.where(:journalized_type => "Issue",
 | |
|           :journalized_id => project.issues), :notes)
 | |
|         migrate(:documents, project.documents, :description)
 | |
|         migrate(:messages, Message.where(:board_id => project.boards), :content)
 | |
|         migrate(:news, project.news, :description)
 | |
|         migrate(:comments, Comment.where(:commented_type => "News",
 | |
|           :commented_id => project.news), :comments)
 | |
|         migrate(:wiki, WikiContent.where(:page_id => project.wiki.pages), :text) if project.wiki
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     def migrate(type, records, column)
 | |
|       n = records.count
 | |
|       return if n == 0
 | |
|       records.each_with_index do |record, i|
 | |
|         print "\rMigrating #{type} ... (#{i}/#{n})"
 | |
|         record.send("#{column.to_s}=", format(record.send(column)))
 | |
|         record.save!
 | |
|       end
 | |
|       puts "\rMigrating #{type} ... done             "
 | |
|     end
 | |
| 
 | |
|     def format(text)
 | |
|       text && @formatter.new(text).to_html
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   desc "Migrate text to html"
 | |
|   task :migrate => :environment do
 | |
|     projects = ENV['PROJECT'].to_s.split(",")
 | |
|     format = ENV['FORMAT'] || Setting.text_formatting
 | |
|     Migration.new(projects, format).start
 | |
|   end
 | |
| end
 |