# encoding: utf-8 require 'fileutils' class Filefield include Mongoid::Document include Mongoid::Timestamps @ckeditor_path = Rails.root.to_s + '/app/assets/javascripts/ckeditor/' @model_path = Rails.root.to_s + '/app/models/' @helper_path = Rails.root.to_s + '/app/helpers/' @views_path = Rails.root.to_s + '/app/views/' @controller_path = Rails.root.to_s + '/app/controllers/' @app_path = File.expand_path(__dir__) def self.prevpath(dir_path) dir_path = dir_path.gsub('\\','/') dir_arr= dir_path.split('/') dir_str='' dir_arr.delete_at(-1) dir_arr.each_with_index do |path,index| dir_str = dir_str + path if index != dir_arr.count - 1 dir_str = dir_str +"/" end end return dir_str end @app_path = self.prevpath(@app_path) @app_path = self.prevpath(@app_path) field :title, :type=> String ,default:"patchfile" #field :file_show, :type=> Hash ,default:{"ckeditor"=>0,"site-preference(two-site-logo)"=>0,"member"=>0,"accessibility"=>0} field :file_show, :type=> Hash ,default:{"ckeditor"=>{:files=>{'config@js@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=> @ckeditor_path}, 'ckeditor@js'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=> @ckeditor_path} },:status=>0} , "site-preference(two-site-logo)"=>{:files=>{'site@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@model_path}, 'application_helper@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@helper_path}, 'preference@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/admin/', :dest=>@views_path+'admin/sites/'} },:status=>0} , "member"=>{:files=>{'member_profile@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@model_path}, 'admin/members_controller@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@controller_path}, 'members_controller@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@controller_path}, '_user_basic_passwd@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/admin/', :dest=>@views_path+'admin/members/'}, 'attribute_value@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@model_path} },:status=>0} , "accessibility"=>{:files=>{'back_end@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>@views_path+'layouts/'}, '_form@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>@views_path+'page_parts/'}, 'jquery-ui-1@13@2/'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>Rails.root.to_s + '/app/assets/stylesheets/lib/jquery-ui-1.13.2/'}, 'orbit_bar/'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>@views_path+'orbit_bar/'} },:status=>0} } field :recovery, :type=> String , default:"false" field :last_message , :type=> String , default:"" field :num , default: 0 after_update :updatefile def enabled_for?(lang) if lang.nil? return true else return self.choose_lang.include?(lang) end end def backup_file(file_name,file_path) FileUtils.cd(file_path) if file_name[-1] != "/" FileUtils.cp(file_name , file_name+'_back') else FileUtils.cd('..') @back_foler =file_path.dup #very important,don't just use '=',it will change original value when it change @back_foler[-1] = "_back/" FileUtils.cp_r(file_name+'.' , @back_foler) end end def recover_file(file_name,file_path) FileUtils.cd(file_path) if file_name[-1] != "/" FileUtils.cp(file_name+'_back', file_name) else FileUtils.cd('..') @back_foler = file_name.dup #very important,don't just use '=',it will change original value when it change @back_foler[-1] = "_back/." if !Dir.exist?(file_name) FileUtils.mkdir_p file_name end FileUtils.cp_r(@back_foler, file_name) end end def copy_file(file_name,source_file_path,dest_file_path) FileUtils.cd(source_file_path) if file_name[-1] != "/" @file_name = Pathname.new(file_name) FileUtils.cd(@file_name.dirname.to_s) FileUtils.cp(@file_name.basename.to_s , dest_file_path+@file_name.dirname.to_s) else if !Dir.exist?(dest_file_path) FileUtils.mkdir_p dest_file_path end FileUtils.cp_r(file_name , dest_file_path+'..') end end def updatefile if self.num == 0 self.last_message = "" if self.recovery == "true" self.file_show.each do |name,property| if property[:status].to_i == 1 puts 'recovering all files of '+ name self.last_message += ('recovering all files of '+ name+'
') else @i = 0 property[:files].each do |file_name,sub_property| if sub_property[:status].to_i == 1 @i = @i + 1 end end if(@i != 0) puts 'recovering part of files:'+ name self.last_message += ('recovering part of files:'+ name+'
') end end property[:files].each do |file_name,sub_property| file_name = file_name.gsub("@",".") if sub_property[:status].to_i == 1 puts 'recovering '+file_name self.last_message += ('recovering '+file_name+'
') begin recover_file(file_name,sub_property[:dest]) puts 'finish recovery' self.last_message += 'finish recovery
' rescue puts Dir.pwd puts 'error recovery' self.last_message += ('Dir: '+Dir.pwd+'
') self.last_message += 'error recovery
' end end end end else self.file_show.each do |name,property| if property[:status].to_i == 1 puts 'copying all files of '+ name self.last_message += ('copying all files of '+name+'
') else @i = 0 property[:files].each do |file_name,sub_property| if sub_property[:status].to_i == 1 @i = @i + 1 end end if(@i != 0) puts 'copying part of files:'+ name self.last_message += ('copying part of files: '+name+'
') end end property[:files].each do |file_name,sub_property| file_name = file_name.gsub("@",".") if sub_property[:status].to_i == 1 puts 'backuping '+file_name self.last_message += ('backuping '+file_name+'
') begin backup_file(file_name,sub_property[:dest]) puts 'finish backup
' self.last_message += 'finish backup
' rescue puts Dir.pwd puts 'error backup
' self.last_message += ('Dir: '+Dir.pwd+'
') self.last_message += 'error backup
' end puts 'copying '+file_name self.last_message += ('copying '+file_name+'
') begin copy_file(file_name,sub_property[:sc],sub_property[:dest]) puts 'finish copy' self.last_message += 'finish copy
' rescue puts Dir.pwd self.last_message += ('Dir: '+Dir.pwd+'
') puts 'error copy' self.last_message += 'error copy
' end end end end end self.num = 1 self.save end Dir.chdir(Rails.root.to_s) end end