| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  | # encoding: utf-8  | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  | require 'fileutils' | 
					
						
							|  |  |  | require 'shell' | 
					
						
							|  |  |  | require 'open-uri' | 
					
						
							|  |  |  | require 'net/http/post/multipart' | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace :new_site do | 
					
						
							| 
									
										
										
										
											2013-10-29 03:40:10 +00:00
										 |  |  |   task :build, [:website_name, :username, :password, :email] => :environment do |t, args| | 
					
						
							| 
									
										
										
										
											2013-10-28 03:54:14 +00:00
										 |  |  |     website_name = "#{args.website_name}" | 
					
						
							|  |  |  |     username = "#{args.username}" | 
					
						
							|  |  |  |     password = "#{args.password}" | 
					
						
							| 
									
										
										
										
											2013-10-29 03:40:10 +00:00
										 |  |  |     email = "#{args.email}" | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  |     Site.destroy_all | 
					
						
							|  |  |  |     Purchase.destroy_all | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  |     Site.create( :school => "#{website_name}", :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ], :frontend_open => true)  | 
					
						
							|  |  |  |    upload_package | 
					
						
							| 
									
										
										
										
											2013-10-29 03:40:10 +00:00
										 |  |  |    User.create!(:email=>"#{email}",:admin=>true,:user_id=>"#{username}",:password=>"#{password}") | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  |    puts @user = User.last  | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  |     `mongo #{Mongoid.config.database.name} --eval "db.fs.chunks.ensureIndex({files_id: 1, n: 1})"` | 
					
						
							|  |  |  |     puts  "Congres you can now login within url" | 
					
						
							|  |  |  |     puts 'Please upload design package (/admin/designs/upload_package ) and run rake site:necessary_data' | 
					
						
							|  |  |  |     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) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |  def upload_package | 
					
						
							|  |  |  |     temp_file = Tempfile.new("temp_file") | 
					
						
							|  |  |  |     path = File.expand_path('~') | 
					
						
							| 
									
										
										
										
											2013-10-29 04:21:55 +00:00
										 |  |  |    puts original_file = File.open("#{path}/orbitdefault.zip") | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  |       #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   | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2013-10-28 04:17:12 +00:00
										 |  |  |   task :necessary_data, [:website_name] => :environment do |t, args| | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  |     site = Site.first | 
					
						
							| 
									
										
										
										
											2013-10-28 03:54:14 +00:00
										 |  |  |     puts website_name = "#{args.website_name}"  | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  |     puts site.title = "#{website_name}" | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  |     site.save | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁') | 
					
						
							|  |  |  |     design = Design.first | 
					
						
							|  |  |  |     site = Site.first | 
					
						
							|  |  |  |     site.design = design | 
					
						
							|  |  |  |     site.save | 
					
						
							|  |  |  |     theme = design.themes.first | 
					
						
							| 
									
										
										
										
											2013-11-05 11:38:47 +00:00
										 |  |  |     home = Page.new(  :design_id => design.id, :name => 'home', :is_published => true, :theme_id => nil, :menu_enabled_for => {"zh_tw"=>"true", "en"=>"true"} ) | 
					
						
							| 
									
										
										
										
											2013-10-25 13:55:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"} | 
					
						
							|  |  |  |     home.save  | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-29 03:11:09 +00:00
										 |  |  | end |