# encoding: utf-8 require 'fileutils' require 'shell' require 'open-uri' require 'net/http/post/multipart' namespace :new_site do task :build, [:website_name, :username, :password, :email] => :environment do |t, args| website_name = "#{args.website_name}" username = "#{args.username}" password = "#{args.password}" email = "#{args.email}" Site.destroy_all Purchase.destroy_all Site.create( :school => "#{website_name}", :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ], :frontend_open => true, :enable_language_detection => "true") upload_package User.create!(:email=>"#{email}",:admin=>true,:user_id=>"#{username}",:password=>"#{password}", :confirmation_token => nil, :confirmed_at => Time.now, :approved => true) I18nVariable.create!( :document_class => 'language', :key => 'en', :en => 'English', :zh_tw => '英文' ) I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :zh_tw => '中文' ) Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false) design = Design.first site = Site.first site.title = "#{website_name}" site.design = design site.save theme = design.themes.first home = Page.new( :design_id => design.id, :name => 'home', :is_published => true, :theme_id => nil, :menu_enabled_for => {"zh_tw"=>"true", "en"=>"true"} ) home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"} home.save end def upload_package temp_file = Tempfile.new("temp_file") puts original_file = File.open("#{Rails.root}/orbitdefault.zip") #if original_file.content_type == 'application/zip' temp_file.write(original_file.read.force_encoding('UTF-8')) temp_file.rewind filename = File.basename(original_file,".zip") unzip_design(temp_file, filename) #else # flash[:error] = "Upload file should be in zip format" #end temp_file.close end def unzip_design(file, zip_name) Zip::ZipFile.open(file) { |zip_file| design = Design.new.from_json(zip_file.read("#{zip_name}/info.json")) Dir.mktmpdir('f_path') { |dir| themes_entries = [] javascripts_entries = [] images_entries = [] zip_file.entries.each do |entry| case (path = entry.to_s) when /\A(#{zip_name})\/(default\.css)\z/ #for default css design.build_css_default(:file => get_temp_file(zip_file, dir, entry)) when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css design.build_css_reset(:file => get_temp_file(zip_file, dir, entry)) when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html design.build_layout(:file => get_temp_file(zip_file, dir, entry)) when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css themes_entries << entry when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js javascripts_entries << entry when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img images_entries << entry end end ['themes', 'javascripts', 'images'].each do |type| eval("#{type}_entries").each do |entry| eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry)) end end } design.save } end def get_temp_file(zip_file, dir, entry) filename = File.basename(entry.to_s) temp_file = File.new(dir + '/' + filename, 'w+') temp_file.write (zip_file.read entry ).force_encoding('UTF-8') temp_file end end