Merge with branch november_presentation
| 
						 | 
					@ -4,3 +4,14 @@ db/*.sqlite3
 | 
				
			||||||
log/*.log
 | 
					log/*.log
 | 
				
			||||||
tmp/**/*
 | 
					tmp/**/*
 | 
				
			||||||
public/uploads/**/*
 | 
					public/uploads/**/*
 | 
				
			||||||
 | 
					uploads/**/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*.swp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public/javascripts
 | 
				
			||||||
 | 
					public/stylesheets
 | 
				
			||||||
 | 
					config/application.rb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.rvmrc
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								Gemfile
								
								
								
								
							
							
						
						| 
						 | 
					@ -1,21 +1,33 @@
 | 
				
			||||||
source 'http://rubygems.org'
 | 
					source 'http://rubygems.org'
 | 
				
			||||||
 | 
					gem 'rails'
 | 
				
			||||||
gem 'rails', '3.0.6'
 | 
					 | 
				
			||||||
gem 'yajl-ruby', :require => 'yajl'
 | 
					gem 'yajl-ruby', :require => 'yajl'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gem 'bson_ext'
 | 
					gem 'bson_ext'
 | 
				
			||||||
gem 'carrierwave'
 | 
					gem 'carrierwave', '0.5.4'
 | 
				
			||||||
gem 'ckeditor'
 | 
					gem 'ckeditor'
 | 
				
			||||||
gem 'devise'
 | 
					gem 'devise'
 | 
				
			||||||
gem 'mini_magick'
 | 
					gem 'mini_magick'
 | 
				
			||||||
 | 
					gem 'rubyzip'
 | 
				
			||||||
 | 
					gem 'sinatra'
 | 
				
			||||||
 | 
					gem 'execjs'
 | 
				
			||||||
 | 
					gem 'mongoid'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gem 'mongoid', '2.0.0'
 | 
					gem 'rake'
 | 
				
			||||||
 | 
					gem 'jquery-rails'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gem 'rake', '0.8.7'
 | 
					gem 'sprockets'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gems used only for assets and not required
 | 
				
			||||||
 | 
					# in production environments by default.
 | 
				
			||||||
 | 
					group :assets do
 | 
				
			||||||
 | 
					  gem 'sass-rails'
 | 
				
			||||||
 | 
					  gem 'coffee-rails'
 | 
				
			||||||
 | 
					  gem 'uglifier'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
 | 
					# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
 | 
				
			||||||
# gem 'ruby-debug'
 | 
					# gem 'ruby-debug'
 | 
				
			||||||
# gem 'ruby-debug19'
 | 
					 gem 'ruby-debug19'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group :test, :development do
 | 
					group :test, :development do
 | 
				
			||||||
  gem "rspec", "~> 2.0"
 | 
					  gem "rspec", "~> 2.0"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										254
									
								
								Gemfile.lock
								
								
								
								
							
							
						
						| 
						 | 
					@ -1,136 +1,204 @@
 | 
				
			||||||
GEM
 | 
					GEM
 | 
				
			||||||
  remote: http://rubygems.org/
 | 
					  remote: http://rubygems.org/
 | 
				
			||||||
  specs:
 | 
					  specs:
 | 
				
			||||||
    abstract (1.0.0)
 | 
					    actionmailer (3.1.1)
 | 
				
			||||||
    actionmailer (3.0.6)
 | 
					      actionpack (= 3.1.1)
 | 
				
			||||||
      actionpack (= 3.0.6)
 | 
					      mail (~> 2.3.0)
 | 
				
			||||||
      mail (~> 2.2.15)
 | 
					    actionpack (3.1.1)
 | 
				
			||||||
    actionpack (3.0.6)
 | 
					      activemodel (= 3.1.1)
 | 
				
			||||||
      activemodel (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      builder (~> 3.0.0)
 | 
				
			||||||
      builder (~> 2.1.2)
 | 
					      erubis (~> 2.7.0)
 | 
				
			||||||
      erubis (~> 2.6.6)
 | 
					      i18n (~> 0.6)
 | 
				
			||||||
      i18n (~> 0.5.0)
 | 
					      rack (~> 1.3.2)
 | 
				
			||||||
      rack (~> 1.2.1)
 | 
					      rack-cache (~> 1.1)
 | 
				
			||||||
      rack-mount (~> 0.6.14)
 | 
					      rack-mount (~> 0.8.2)
 | 
				
			||||||
      rack-test (~> 0.5.7)
 | 
					      rack-test (~> 0.6.1)
 | 
				
			||||||
      tzinfo (~> 0.3.23)
 | 
					      sprockets (~> 2.0.2)
 | 
				
			||||||
    activemodel (3.0.6)
 | 
					    activemodel (3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
      builder (~> 2.1.2)
 | 
					      builder (~> 3.0.0)
 | 
				
			||||||
      i18n (~> 0.5.0)
 | 
					      i18n (~> 0.6)
 | 
				
			||||||
    activerecord (3.0.6)
 | 
					    activerecord (3.1.1)
 | 
				
			||||||
      activemodel (= 3.0.6)
 | 
					      activemodel (= 3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
      arel (~> 2.0.2)
 | 
					      arel (~> 2.2.1)
 | 
				
			||||||
      tzinfo (~> 0.3.23)
 | 
					      tzinfo (~> 0.3.29)
 | 
				
			||||||
    activeresource (3.0.6)
 | 
					    activeresource (3.1.1)
 | 
				
			||||||
      activemodel (= 3.0.6)
 | 
					      activemodel (= 3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
    activesupport (3.0.6)
 | 
					    activesupport (3.1.1)
 | 
				
			||||||
    arel (2.0.10)
 | 
					      multi_json (~> 1.0)
 | 
				
			||||||
    bcrypt-ruby (2.1.4-x86-mingw32)
 | 
					    archive-tar-minitar (0.5.2)
 | 
				
			||||||
    bson (1.3.1)
 | 
					    arel (2.2.1)
 | 
				
			||||||
    bson_ext (1.3.1)
 | 
					    bcrypt-ruby (3.0.1)
 | 
				
			||||||
    builder (2.1.2)
 | 
					    bson (1.4.1)
 | 
				
			||||||
 | 
					    bson_ext (1.4.1)
 | 
				
			||||||
 | 
					    builder (3.0.0)
 | 
				
			||||||
    carrierwave (0.5.4)
 | 
					    carrierwave (0.5.4)
 | 
				
			||||||
      activesupport (~> 3.0)
 | 
					      activesupport (~> 3.0)
 | 
				
			||||||
    chronic (0.3.0)
 | 
					    chronic (0.6.4)
 | 
				
			||||||
    ckeditor (3.5.4)
 | 
					    ckeditor (3.6.3)
 | 
				
			||||||
      mime-types (>= 1.16)
 | 
					      mime-types (~> 1.16)
 | 
				
			||||||
    delorean (1.0.0)
 | 
					      orm_adapter (~> 0.0.5)
 | 
				
			||||||
 | 
					    coffee-rails (3.1.1)
 | 
				
			||||||
 | 
					      coffee-script (>= 2.2.0)
 | 
				
			||||||
 | 
					      railties (~> 3.1.0)
 | 
				
			||||||
 | 
					    coffee-script (2.2.0)
 | 
				
			||||||
 | 
					      coffee-script-source
 | 
				
			||||||
 | 
					      execjs
 | 
				
			||||||
 | 
					    coffee-script-source (1.1.2)
 | 
				
			||||||
 | 
					    columnize (0.3.4)
 | 
				
			||||||
 | 
					    delorean (1.1.0)
 | 
				
			||||||
      chronic
 | 
					      chronic
 | 
				
			||||||
    devise (1.3.4)
 | 
					    devise (1.4.8)
 | 
				
			||||||
      bcrypt-ruby (~> 2.1.2)
 | 
					      bcrypt-ruby (~> 3.0)
 | 
				
			||||||
      orm_adapter (~> 0.0.3)
 | 
					      orm_adapter (~> 0.0.3)
 | 
				
			||||||
      warden (~> 1.0.3)
 | 
					      warden (~> 1.0.3)
 | 
				
			||||||
    diff-lcs (1.1.2)
 | 
					    diff-lcs (1.1.3)
 | 
				
			||||||
    erubis (2.6.6)
 | 
					    erubis (2.7.0)
 | 
				
			||||||
      abstract (>= 1.0.0)
 | 
					    execjs (1.2.9)
 | 
				
			||||||
    factory_girl (1.3.3)
 | 
					      multi_json (~> 1.0)
 | 
				
			||||||
    factory_girl_rails (1.0.1)
 | 
					    factory_girl (2.2.0)
 | 
				
			||||||
      factory_girl (~> 1.3)
 | 
					      activesupport
 | 
				
			||||||
 | 
					    factory_girl_rails (1.3.0)
 | 
				
			||||||
 | 
					      factory_girl (~> 2.2.0)
 | 
				
			||||||
      railties (>= 3.0.0)
 | 
					      railties (>= 3.0.0)
 | 
				
			||||||
    i18n (0.5.0)
 | 
					    hike (1.2.1)
 | 
				
			||||||
    mail (2.2.19)
 | 
					    i18n (0.6.0)
 | 
				
			||||||
      activesupport (>= 2.3.6)
 | 
					    jquery-rails (1.0.16)
 | 
				
			||||||
 | 
					      railties (~> 3.0)
 | 
				
			||||||
 | 
					      thor (~> 0.14)
 | 
				
			||||||
 | 
					    json (1.6.1)
 | 
				
			||||||
 | 
					    linecache19 (0.5.12)
 | 
				
			||||||
 | 
					      ruby_core_source (>= 0.1.4)
 | 
				
			||||||
 | 
					    mail (2.3.0)
 | 
				
			||||||
      i18n (>= 0.4.0)
 | 
					      i18n (>= 0.4.0)
 | 
				
			||||||
      mime-types (~> 1.16)
 | 
					      mime-types (~> 1.16)
 | 
				
			||||||
      treetop (~> 1.4.8)
 | 
					      treetop (~> 1.4.8)
 | 
				
			||||||
    mime-types (1.16)
 | 
					    mime-types (1.16)
 | 
				
			||||||
    mini_magick (3.2.1)
 | 
					    mini_magick (3.3)
 | 
				
			||||||
      subexec (~> 0.0.4)
 | 
					      subexec (~> 0.1.0)
 | 
				
			||||||
    mongo (1.3.1)
 | 
					    mongo (1.4.1)
 | 
				
			||||||
      bson (>= 1.3.1)
 | 
					      bson (= 1.4.1)
 | 
				
			||||||
    mongoid (2.0.0)
 | 
					    mongoid (2.3.2)
 | 
				
			||||||
      activemodel (~> 3.0)
 | 
					      activemodel (~> 3.1)
 | 
				
			||||||
      mongo (~> 1.2)
 | 
					      mongo (~> 1.4)
 | 
				
			||||||
      tzinfo (~> 0.3.22)
 | 
					      tzinfo (~> 0.3.22)
 | 
				
			||||||
      will_paginate (~> 3.0.pre)
 | 
					    multi_json (1.0.3)
 | 
				
			||||||
    orm_adapter (0.0.5)
 | 
					    orm_adapter (0.0.5)
 | 
				
			||||||
    polyglot (0.3.1)
 | 
					    polyglot (0.3.2)
 | 
				
			||||||
    rack (1.2.3)
 | 
					    rack (1.3.4)
 | 
				
			||||||
    rack-mount (0.6.14)
 | 
					    rack-cache (1.1)
 | 
				
			||||||
 | 
					      rack (>= 0.4)
 | 
				
			||||||
 | 
					    rack-mount (0.8.3)
 | 
				
			||||||
      rack (>= 1.0.0)
 | 
					      rack (>= 1.0.0)
 | 
				
			||||||
    rack-test (0.5.7)
 | 
					    rack-protection (1.1.4)
 | 
				
			||||||
 | 
					      rack
 | 
				
			||||||
 | 
					    rack-ssl (1.3.2)
 | 
				
			||||||
 | 
					      rack
 | 
				
			||||||
 | 
					    rack-test (0.6.1)
 | 
				
			||||||
      rack (>= 1.0)
 | 
					      rack (>= 1.0)
 | 
				
			||||||
    rails (3.0.6)
 | 
					    rails (3.1.1)
 | 
				
			||||||
      actionmailer (= 3.0.6)
 | 
					      actionmailer (= 3.1.1)
 | 
				
			||||||
      actionpack (= 3.0.6)
 | 
					      actionpack (= 3.1.1)
 | 
				
			||||||
      activerecord (= 3.0.6)
 | 
					      activerecord (= 3.1.1)
 | 
				
			||||||
      activeresource (= 3.0.6)
 | 
					      activeresource (= 3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
      bundler (~> 1.0)
 | 
					      bundler (~> 1.0)
 | 
				
			||||||
      railties (= 3.0.6)
 | 
					      railties (= 3.1.1)
 | 
				
			||||||
    railties (3.0.6)
 | 
					    railties (3.1.1)
 | 
				
			||||||
      actionpack (= 3.0.6)
 | 
					      actionpack (= 3.1.1)
 | 
				
			||||||
      activesupport (= 3.0.6)
 | 
					      activesupport (= 3.1.1)
 | 
				
			||||||
 | 
					      rack-ssl (~> 1.3.2)
 | 
				
			||||||
      rake (>= 0.8.7)
 | 
					      rake (>= 0.8.7)
 | 
				
			||||||
      thor (~> 0.14.4)
 | 
					      rdoc (~> 3.4)
 | 
				
			||||||
    rake (0.8.7)
 | 
					      thor (~> 0.14.6)
 | 
				
			||||||
    rcov (0.9.9)
 | 
					    rake (0.9.2)
 | 
				
			||||||
    rspec (2.6.0)
 | 
					    rcov (0.9.11)
 | 
				
			||||||
      rspec-core (~> 2.6.0)
 | 
					    rdoc (3.11)
 | 
				
			||||||
      rspec-expectations (~> 2.6.0)
 | 
					      json (~> 1.4)
 | 
				
			||||||
      rspec-mocks (~> 2.6.0)
 | 
					    rspec (2.7.0)
 | 
				
			||||||
    rspec-core (2.6.3)
 | 
					      rspec-core (~> 2.7.0)
 | 
				
			||||||
    rspec-expectations (2.6.0)
 | 
					      rspec-expectations (~> 2.7.0)
 | 
				
			||||||
 | 
					      rspec-mocks (~> 2.7.0)
 | 
				
			||||||
 | 
					    rspec-core (2.7.0)
 | 
				
			||||||
 | 
					    rspec-expectations (2.7.0)
 | 
				
			||||||
      diff-lcs (~> 1.1.2)
 | 
					      diff-lcs (~> 1.1.2)
 | 
				
			||||||
    rspec-mocks (2.6.0)
 | 
					    rspec-mocks (2.7.0)
 | 
				
			||||||
    rspec-rails (2.6.1)
 | 
					    rspec-rails (2.7.0)
 | 
				
			||||||
      actionpack (~> 3.0)
 | 
					      actionpack (~> 3.0)
 | 
				
			||||||
      activesupport (~> 3.0)
 | 
					      activesupport (~> 3.0)
 | 
				
			||||||
      railties (~> 3.0)
 | 
					      railties (~> 3.0)
 | 
				
			||||||
      rspec (~> 2.6.0)
 | 
					      rspec (~> 2.7.0)
 | 
				
			||||||
    shoulda-matchers (1.0.0.beta2)
 | 
					    ruby-debug-base19 (0.11.25)
 | 
				
			||||||
    subexec (0.0.4)
 | 
					      columnize (>= 0.3.1)
 | 
				
			||||||
 | 
					      linecache19 (>= 0.5.11)
 | 
				
			||||||
 | 
					      ruby_core_source (>= 0.1.4)
 | 
				
			||||||
 | 
					    ruby-debug19 (0.11.6)
 | 
				
			||||||
 | 
					      columnize (>= 0.3.1)
 | 
				
			||||||
 | 
					      linecache19 (>= 0.5.11)
 | 
				
			||||||
 | 
					      ruby-debug-base19 (>= 0.11.19)
 | 
				
			||||||
 | 
					    ruby_core_source (0.1.5)
 | 
				
			||||||
 | 
					      archive-tar-minitar (>= 0.5.2)
 | 
				
			||||||
 | 
					    rubyzip (0.9.4)
 | 
				
			||||||
 | 
					    sass (3.1.10)
 | 
				
			||||||
 | 
					    sass-rails (3.1.4)
 | 
				
			||||||
 | 
					      actionpack (~> 3.1.0)
 | 
				
			||||||
 | 
					      railties (~> 3.1.0)
 | 
				
			||||||
 | 
					      sass (>= 3.1.4)
 | 
				
			||||||
 | 
					      sprockets (~> 2.0.0)
 | 
				
			||||||
 | 
					      tilt (~> 1.3.2)
 | 
				
			||||||
 | 
					    shoulda-matchers (1.0.0.beta3)
 | 
				
			||||||
 | 
					    sinatra (1.3.1)
 | 
				
			||||||
 | 
					      rack (~> 1.3, >= 1.3.4)
 | 
				
			||||||
 | 
					      rack-protection (~> 1.1, >= 1.1.2)
 | 
				
			||||||
 | 
					      tilt (~> 1.3, >= 1.3.3)
 | 
				
			||||||
 | 
					    sprockets (2.0.3)
 | 
				
			||||||
 | 
					      hike (~> 1.2)
 | 
				
			||||||
 | 
					      rack (~> 1.0)
 | 
				
			||||||
 | 
					      tilt (~> 1.1, != 1.3.0)
 | 
				
			||||||
 | 
					    subexec (0.1.0)
 | 
				
			||||||
    thor (0.14.6)
 | 
					    thor (0.14.6)
 | 
				
			||||||
    treetop (1.4.9)
 | 
					    tilt (1.3.3)
 | 
				
			||||||
 | 
					    treetop (1.4.10)
 | 
				
			||||||
 | 
					      polyglot
 | 
				
			||||||
      polyglot (>= 0.3.1)
 | 
					      polyglot (>= 0.3.1)
 | 
				
			||||||
    tzinfo (0.3.27)
 | 
					    tzinfo (0.3.30)
 | 
				
			||||||
    warden (1.0.4)
 | 
					    uglifier (1.0.3)
 | 
				
			||||||
 | 
					      execjs (>= 0.3.0)
 | 
				
			||||||
 | 
					      multi_json (>= 1.0.2)
 | 
				
			||||||
 | 
					    warden (1.0.6)
 | 
				
			||||||
      rack (>= 1.0)
 | 
					      rack (>= 1.0)
 | 
				
			||||||
    watchr (0.7)
 | 
					    watchr (0.7)
 | 
				
			||||||
    will_paginate (3.0.pre2)
 | 
					    yajl-ruby (1.0.0)
 | 
				
			||||||
    yajl-ruby (0.8.2)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORMS
 | 
					PLATFORMS
 | 
				
			||||||
  x86-mingw32
 | 
					  ruby
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES
 | 
					DEPENDENCIES
 | 
				
			||||||
  bson_ext
 | 
					  bson_ext
 | 
				
			||||||
  carrierwave
 | 
					  carrierwave (= 0.5.4)
 | 
				
			||||||
  ckeditor
 | 
					  ckeditor
 | 
				
			||||||
 | 
					  coffee-rails
 | 
				
			||||||
  delorean
 | 
					  delorean
 | 
				
			||||||
  devise
 | 
					  devise
 | 
				
			||||||
 | 
					  execjs
 | 
				
			||||||
  factory_girl_rails
 | 
					  factory_girl_rails
 | 
				
			||||||
 | 
					  jquery-rails
 | 
				
			||||||
  mini_magick
 | 
					  mini_magick
 | 
				
			||||||
  mongoid (= 2.0.0)
 | 
					  mongoid
 | 
				
			||||||
  rails (= 3.0.6)
 | 
					  rails
 | 
				
			||||||
  rake (= 0.8.7)
 | 
					  rake
 | 
				
			||||||
  rcov
 | 
					  rcov
 | 
				
			||||||
  rspec (~> 2.0)
 | 
					  rspec (~> 2.0)
 | 
				
			||||||
  rspec-rails (~> 2.0)
 | 
					  rspec-rails (~> 2.0)
 | 
				
			||||||
 | 
					  ruby-debug19
 | 
				
			||||||
 | 
					  rubyzip
 | 
				
			||||||
 | 
					  sass-rails
 | 
				
			||||||
  shoulda-matchers
 | 
					  shoulda-matchers
 | 
				
			||||||
 | 
					  sinatra
 | 
				
			||||||
 | 
					  sprockets
 | 
				
			||||||
 | 
					  uglifier
 | 
				
			||||||
  watchr
 | 
					  watchr
 | 
				
			||||||
  yajl-ruby
 | 
					  yajl-ruby
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 923 B  | 
| 
		 After Width: | Height: | Size: 43 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 157 B  | 
| 
		 After Width: | Height: | Size: 211 B  | 
| 
		 After Width: | Height: | Size: 393 B  | 
| 
		 After Width: | Height: | Size: 499 B  | 
| 
		 After Width: | Height: | Size: 4.5 KiB  | 
| 
		 After Width: | Height: | Size: 504 B  | 
| 
		 After Width: | Height: | Size: 724 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 798 B  | 
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
| 
		 After Width: | Height: | Size: 958 B  | 
| 
		 Before Width: | Height: | Size: 857 B After Width: | Height: | Size: 857 B  | 
| 
		 After Width: | Height: | Size: 964 B  | 
| 
		 After Width: | Height: | Size: 116 B  | 
| 
		 After Width: | Height: | Size: 6.5 KiB  | 
| 
		 After Width: | Height: | Size: 447 B  | 
| 
		 After Width: | Height: | Size: 386 B  | 
| 
		 After Width: | Height: | Size: 929 B  | 
| 
		 After Width: | Height: | Size: 1010 B  | 
| 
		 After Width: | Height: | Size: 1010 B  | 
| 
		 After Width: | Height: | Size: 2.4 KiB  | 
| 
		 After Width: | Height: | Size: 5.6 KiB  | 
| 
		 Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB  | 
| 
		 After Width: | Height: | Size: 8.2 KiB  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
| 
		 After Width: | Height: | Size: 4.9 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 181 B  | 
| 
		 Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 184 B  | 
| 
		 After Width: | Height: | Size: 963 B  | 
| 
		 After Width: | Height: | Size: 841 KiB  | 
| 
						 | 
					@ -1,3 +1,13 @@
 | 
				
			||||||
 | 
					// This is a manifest file that'll be compiled into including all the files listed below.
 | 
				
			||||||
 | 
					// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
 | 
				
			||||||
 | 
					// be included in the compiled file accessible from http://example.com/assets/application.js
 | 
				
			||||||
 | 
					// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
 | 
				
			||||||
 | 
					// the compiled file.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//= require jquery
 | 
				
			||||||
 | 
					//= require jquery_ujs
 | 
				
			||||||
 | 
					//= require_tree .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Place your application-specific JavaScript functions and classes here
 | 
					// Place your application-specific JavaScript functions and classes here
 | 
				
			||||||
// This file is automatically included by javascript_include_tag :defaults
 | 
					// This file is automatically included by javascript_include_tag :defaults
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					// Place all the behaviors and hooks related to the matching controller here.
 | 
				
			||||||
 | 
					// All this logic will automatically be available in application.js.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,71 @@
 | 
				
			||||||
 | 
					function r_editor(tgetUrl,tpostUrl,tfilename,toption){
 | 
				
			||||||
 | 
					  if(!toption){ toption =new Array();}
 | 
				
			||||||
 | 
					  if(!toption['width']){toption['width']=400;}
 | 
				
			||||||
 | 
					  if(!toption['height']){toption['height']=300;}
 | 
				
			||||||
 | 
					  var editor = this;
 | 
				
			||||||
 | 
					  editor.filename = tfilename;
 | 
				
			||||||
 | 
					  editor.getUrl = tgetUrl;
 | 
				
			||||||
 | 
					  editor.postUrl = tpostUrl;
 | 
				
			||||||
 | 
					  editor.nodeToBeChanged=""
 | 
				
			||||||
 | 
					  editor.width = toption['width'];
 | 
				
			||||||
 | 
					  editor.height = toption['height'];
 | 
				
			||||||
 | 
					  var html='';
 | 
				
			||||||
 | 
					  editor.init = function(){
 | 
				
			||||||
 | 
					    code = "<span id='file_editor' style='border:solid; width:"+editor.width+"px;height:"+editor.height+"px; float:right;' ><textarea style='height:87%;width:97%;resize:none;border:none;' ></textarea><input type='button' class='send'  value='Send' ><input type='button' class='discard' value='Discard' ></span>";
 | 
				
			||||||
 | 
					    html = $(code);
 | 
				
			||||||
 | 
					    html.children("textarea").load(editor.getUrl);
 | 
				
			||||||
 | 
					    html.children("input.discard").click(function(){
 | 
				
			||||||
 | 
					      editor.destroy();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    html.children("input.send").click(function(){
 | 
				
			||||||
 | 
					      editor.send();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  editor.reload = function(){
 | 
				
			||||||
 | 
					    $.get(editor.getUrl,function(data){
 | 
				
			||||||
 | 
					      html.children("textarea").text(data);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  editor.send = function(){
 | 
				
			||||||
 | 
					    $.post(editor.postUrl,{filename:editor.filename,context:html.children("textarea").val(),authenticity_token:$('meta[name=csrf-token]').attr('content')},null,"script");
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  editor.destroy = function(){
 | 
				
			||||||
 | 
					    html.remove();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(".r_edit").live("click",function(){
 | 
				
			||||||
 | 
					  new_editor = new r_editor($(this).attr("path"),"edit_file",$(this).attr("filename"));
 | 
				
			||||||
 | 
					  $(this).after(new_editor.init());
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(".r_snapshot").live({
 | 
				
			||||||
 | 
					  mouseenter:
 | 
				
			||||||
 | 
					    function(){
 | 
				
			||||||
 | 
					      $(this).append($("<span></span>").html('<p class="z-preview"><img src="'+$(this).attr("path")+'"width="220" height="19" /></p>'));
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  mouseleave:
 | 
				
			||||||
 | 
					    function(){
 | 
				
			||||||
 | 
					      $(this).find("span:last").remove();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$('input.multi_files').live("change", function(){
 | 
				
			||||||
 | 
					  $(this).parent().prev("ul").append("<li>" + $(this).val() + "</li>");
 | 
				
			||||||
 | 
					  new_node = $(this).parent().clone();
 | 
				
			||||||
 | 
					  $(this).parent().css("display","none");
 | 
				
			||||||
 | 
					  new_node.children('input.multi_files').val("");
 | 
				
			||||||
 | 
					  $(this).parent().before(new_node);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$('a.remove_mark').live("click",function(){
 | 
				
			||||||
 | 
					  $(this).prev("input").val("true");
 | 
				
			||||||
 | 
					  $(this).parent().css("text-decoration","line-through")
 | 
				
			||||||
 | 
					  $(this).parent().removeClass("r_snapshot");
 | 
				
			||||||
 | 
					  $(this).next().remove();
 | 
				
			||||||
 | 
					  $(this).remove();
 | 
				
			||||||
 | 
					  return false;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					$("#page_design_id").live('change', function() {
 | 
				
			||||||
 | 
						$.getScript($(this).attr('rel') + '/' + $(this).val() + '/reload_themes');
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					$(function (){
 | 
				
			||||||
 | 
					  $(".engine_loading").load($(this).attr("widget_path"));
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,354 @@
 | 
				
			||||||
 | 
					html, body{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					html{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "body.jpg" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
						background-size: cover;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body{
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    font-family: helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_banner_link{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "orbitbar1.png" %>) repeat-x scroll 0 0;
 | 
				
			||||||
 | 
					    height: 52px;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hmenu{
 | 
				
			||||||
 | 
					    height: 40px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    top: 1px;
 | 
				
			||||||
 | 
					    width: 250px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#orbit{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "bar_orbit.png" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
						cursor:pointer;
 | 
				
			||||||
 | 
					    height: 43px;
 | 
				
			||||||
 | 
					    left: 10px;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    width: 41px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#orbit:hover{
 | 
				
			||||||
 | 
						background-position:0 -43px;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 3px #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orbit:hover #orblist{
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orblist{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
					    border-radius: 0 3px 3px 3px;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 3px #000000;
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 43px;
 | 
				
			||||||
 | 
					    width: 130px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orblist li{
 | 
				
			||||||
 | 
						border-bottom:1px solid #aaa;
 | 
				
			||||||
 | 
						list-style:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.orblink{
 | 
				
			||||||
 | 
					    color: #333333;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font: 12px/100% arial,sans-serif;
 | 
				
			||||||
 | 
					    padding: 5px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.orblink:hover{
 | 
				
			||||||
 | 
						background:#eee;
 | 
				
			||||||
 | 
						color:#333;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#log_out a{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "service_btn.png" %>) no-repeat scroll right 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none !important;
 | 
				
			||||||
 | 
					    display: block !important;
 | 
				
			||||||
 | 
					    height: 40px !important;
 | 
				
			||||||
 | 
					    line-height: normal !important;
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 0px;
 | 
				
			||||||
 | 
					    text-indent: -10000px;
 | 
				
			||||||
 | 
					    top: 0px;
 | 
				
			||||||
 | 
					    width: 43px !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#log_out a:hover{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "service_btn.png" %>) no-repeat scroll right bottom transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.lang{
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-size: 15px;
 | 
				
			||||||
 | 
					    line-height: 40px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 55px;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lang a{
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						text-decoration:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lang a:hover{
 | 
				
			||||||
 | 
						text-decoration:underline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_container{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_container h1{
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font: 32px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 0 0 20px;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    text-shadow: 0 0 5px #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #F1F1F1;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #818181;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_header :after {
 | 
				
			||||||
 | 
						content: "."; 
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
						height: 0; 
 | 
				
			||||||
 | 
						clear: both; 
 | 
				
			||||||
 | 
						visibility: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_header #nav{
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						padding:0;
 | 
				
			||||||
 | 
						width:100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #nav li{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    list-style: none outside none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #nav li a{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #fff;
 | 
				
			||||||
 | 
					    border-radius: 13px 13px 13px 13px;
 | 
				
			||||||
 | 
					    border: 1px solid #D6D6D6;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
						font-size:15px;
 | 
				
			||||||
 | 
					    margin: 0 20px 0 0;
 | 
				
			||||||
 | 
					    padding: 5px 10px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #nav li a:hover{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #818181;
 | 
				
			||||||
 | 
					    border-radius: 13px 13px 13px 13px;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_content{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.main{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    padding: 0 1%;
 | 
				
			||||||
 | 
					    width: 81%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main2{
 | 
				
			||||||
 | 
					    padding: 62px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main table{
 | 
				
			||||||
 | 
					    border-collapse: collapse;
 | 
				
			||||||
 | 
						width:100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main table th{
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #222222;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font: 20px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    letter-spacing: 0.05em;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    text-shadow: 0 0 3px #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main table td{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 rgba(0, 0, 0, 0.5);
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #222222;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.main table td a{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    padding: 5px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.main table td a:hover{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #eee;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    color: #333;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 rgba(0, 0, 0, 0.75);
 | 
				
			||||||
 | 
					    box-shadow: 3px 0 3px #000000;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    padding: 0 1%;
 | 
				
			||||||
 | 
					    width: 14%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary2{
 | 
				
			||||||
 | 
					    padding: 62px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary ul{
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary ul li{
 | 
				
			||||||
 | 
						list-style:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary ul li a{
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #333;
 | 
				
			||||||
 | 
					    color: #AAAAAA;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    padding: 14px 0;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.seclink1{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "icon1.png" %>) no-repeat scroll 20px 8px transparent;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #333;
 | 
				
			||||||
 | 
					    color: #AAAAAA;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    padding: 14px 0 14px 60px !important;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.seclink2{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "icon2.png" %>) no-repeat scroll 20px 14px transparent;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #333;
 | 
				
			||||||
 | 
					    color: #AAAAAA;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    padding: 14px 0 14px 60px !important;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.secondary ul li a:hover{
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_footer{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
						display:none;
 | 
				
			||||||
 | 
					    clear: both;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_footer p{
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					label{
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    text-shadow: 0 0 5px #000000;
 | 
				
			||||||
 | 
					    width: 130px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					p{
 | 
				
			||||||
 | 
						margin:0 0 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_main p label{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					    width: 100px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_main .translation_missing{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					    width: 100px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.text{
 | 
				
			||||||
 | 
					    border: 1px solid #818181;
 | 
				
			||||||
 | 
					    border-radius: 3px 3px 3px 3px;
 | 
				
			||||||
 | 
					    font: 12px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					    width: 205px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#site_info{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    box-shadow: 0 0 5px #000000;
 | 
				
			||||||
 | 
					/*    height: 289px;*/
 | 
				
			||||||
 | 
					    margin: 0 0 20px;
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    width: 600px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#siteinfo_title{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #333333;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font: 24px/50px arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 50px;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0 0 0 20px;
 | 
				
			||||||
 | 
					    text-shadow: 0 1px 0 #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#siteinfo_tb{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#siteinfo_tb td{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #333333;
 | 
				
			||||||
 | 
					    color: #333333;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.buy_btn{
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
						margin: 0 10px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main table td .buy_btn a{
 | 
				
			||||||
 | 
					    background: url("/assets/buy_btn.png") no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font-size: 22px;
 | 
				
			||||||
 | 
					    height: 37px;
 | 
				
			||||||
 | 
					    line-height: 37px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    text-shadow: 0 1px 0 #FFFFFF;
 | 
				
			||||||
 | 
					    width: 170px;
 | 
				
			||||||
 | 
							padding: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buy_btn a:hover{
 | 
				
			||||||
 | 
						background-position:0 bottom;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bought_btn{
 | 
				
			||||||
 | 
					    background: url("/assets/bought_btn.png") no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
					    font-size: 22px;
 | 
				
			||||||
 | 
					    height: 37px;
 | 
				
			||||||
 | 
					    line-height: 37px;
 | 
				
			||||||
 | 
						margin: 0 10px 0 0;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-shadow: 0 1px 0 #C06408;
 | 
				
			||||||
 | 
					    width: 170px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *This is a manifest file that'll automatically include all the stylesheets available in this directory
 | 
				
			||||||
 | 
					 *and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
 | 
				
			||||||
 | 
					 *the top of the compiled file, but it's generally better to create a new file per style scope.
 | 
				
			||||||
 | 
					 *= require_self
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,230 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html, body{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					html{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "body.jpg" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
						background-size: cover;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					body{
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    font-family: helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_banner_link{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "orbitbar1.png" %>) repeat-x scroll 0 0;
 | 
				
			||||||
 | 
					    height: 52px;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hmenu{
 | 
				
			||||||
 | 
					    height: 40px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    top: 1px;
 | 
				
			||||||
 | 
					    width: 250px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#orbit{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "bar_orbit.png" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
						cursor:pointer;
 | 
				
			||||||
 | 
					    height: 43px;
 | 
				
			||||||
 | 
					    left: 10px;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    width: 41px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#orbit:hover{
 | 
				
			||||||
 | 
						background-position:0 -43px;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 3px #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orbit:hover #orblist{
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orblist{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FFFFFF;
 | 
				
			||||||
 | 
					    border-radius: 0 3px 3px 3px;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 3px #000000;
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 43px;
 | 
				
			||||||
 | 
					    width: 130px;
 | 
				
			||||||
 | 
						z-index:10;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orblist li{
 | 
				
			||||||
 | 
						border-bottom:1px solid #aaa;
 | 
				
			||||||
 | 
						list-style:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.orblink{
 | 
				
			||||||
 | 
					    color: #333333;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font: 12px/100% arial,sans-serif;
 | 
				
			||||||
 | 
					    padding: 5px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.orblink:hover{
 | 
				
			||||||
 | 
						background:#eee;
 | 
				
			||||||
 | 
						color:#333;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#log_out a{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "service_btn.png" %>) no-repeat scroll right 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none !important;
 | 
				
			||||||
 | 
					    display: block !important;
 | 
				
			||||||
 | 
					    height: 40px !important;
 | 
				
			||||||
 | 
					    line-height: normal !important;
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 0px;
 | 
				
			||||||
 | 
					    text-indent: -10000px;
 | 
				
			||||||
 | 
					    top: 0px;
 | 
				
			||||||
 | 
					    width: 43px !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#log_out a:hover{
 | 
				
			||||||
 | 
					    background: url(<%= asset_path "service_btn.png" %>) no-repeat scroll right bottom transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.lang{
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-size: 15px;
 | 
				
			||||||
 | 
					    line-height: 40px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 55px;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lang a{
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						text-decoration:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.lang a:hover{
 | 
				
			||||||
 | 
						text-decoration:underline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_container{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_container h1{
 | 
				
			||||||
 | 
					    font: 28px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 0 0 20px;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #F1F1F1;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #818181;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_header:after {
 | 
				
			||||||
 | 
						content: "."; 
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
						height: 0; 
 | 
				
			||||||
 | 
						clear: both; 
 | 
				
			||||||
 | 
						visibility: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_header #panel_nav{
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						padding:0;
 | 
				
			||||||
 | 
						width:100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #panel_nav li{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    list-style: none outside none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #panel_nav li a{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #fff;
 | 
				
			||||||
 | 
					    border-radius: 13px 13px 13px 13px;
 | 
				
			||||||
 | 
					    border: 1px solid #D6D6D6;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
						font-size:15px;
 | 
				
			||||||
 | 
					    margin: 0 20px 0 0;
 | 
				
			||||||
 | 
					    padding: 5px 10px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_header #panel_nav li a:hover{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #818181;
 | 
				
			||||||
 | 
					    border-radius: 13px 13px 13px 13px;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_content{
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_sidebar2{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 rgba(0, 0, 0, 0.75);
 | 
				
			||||||
 | 
					    box-shadow: 3px 0 3px #000000;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    width: 16%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar{
 | 
				
			||||||
 | 
					    padding: 62px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar ul{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #13547C;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0 0 0 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar ul li{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #13547C;
 | 
				
			||||||
 | 
					    border-top: 1px solid #145B87;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-size: 11px;
 | 
				
			||||||
 | 
					    line-height: 29px;
 | 
				
			||||||
 | 
					    list-style: none outside none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar li ul{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar li ul ul{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar a{
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-size: 11px;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_sidebar a:hover{}
 | 
				
			||||||
 | 
					#panel_main2{
 | 
				
			||||||
 | 
						background:#fff;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    padding: 0 1%;
 | 
				
			||||||
 | 
					    width: 82%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_main{
 | 
				
			||||||
 | 
					    padding: 62px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#panel_main p label{
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#panel_main .translation_missing{
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					    width: 100px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.text{
 | 
				
			||||||
 | 
					    border: 1px solid #818181;
 | 
				
			||||||
 | 
					    border-radius: 3px 3px 3px 3px;
 | 
				
			||||||
 | 
					    font: 12px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					    width: 205px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Place all the styles related to the matching controller here.
 | 
				
			||||||
 | 
					  They will automatically be included in application.css.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					.z-preview * {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.z-preview {
 | 
				
			||||||
 | 
					    background: white;
 | 
				
			||||||
 | 
					    border: solid;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    width: 200px;
 | 
				
			||||||
 | 
					    float: right;
 | 
				
			||||||
 | 
					    height: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,507 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *This is a manifest file that'll automatically include all the stylesheets available in this directory
 | 
				
			||||||
 | 
					 *and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
 | 
				
			||||||
 | 
					 *the top of the compiled file, but it's generally better to create a new file per style scope.
 | 
				
			||||||
 | 
					 *= require_self
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					a, a:hover {
 | 
				
			||||||
 | 
						text-decoration: none;
 | 
				
			||||||
 | 
						outline:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					html,body {
 | 
				
			||||||
 | 
						height:100%;
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						font-family: Helvetica, '微軟正黑體';
 | 
				
			||||||
 | 
						overflow-x:hidden
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ul {
 | 
				
			||||||
 | 
						list-style:none;
 | 
				
			||||||
 | 
						list-style-image:none;
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						padding:0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input input{
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
						padding:5px;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					input:focus, select:focus, textarea:focus {
 | 
				
			||||||
 | 
						outline:none;
 | 
				
			||||||
 | 
						-moz-outline-radius: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.clear:after {
 | 
				
			||||||
 | 
						content:".";
 | 
				
			||||||
 | 
						clear:both;
 | 
				
			||||||
 | 
						height:0;
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						visibility:hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#content{
 | 
				
			||||||
 | 
						height:100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#sidebar {
 | 
				
			||||||
 | 
						position:fixed;
 | 
				
			||||||
 | 
						top:0;
 | 
				
			||||||
 | 
						left:0;
 | 
				
			||||||
 | 
						height: 100%;
 | 
				
			||||||
 | 
						width:220px;
 | 
				
			||||||
 | 
						/*background-color:rgba(245,245,245,1);*/
 | 
				
			||||||
 | 
						background:url(<%= asset_path '75.png' %>) repeat left top;
 | 
				
			||||||
 | 
						-moz-box-shadow: 3px 0px 4px #472a12; /* Firefox */
 | 
				
			||||||
 | 
						-webkit-box-shadow: 3px 0px 4px #472a12;/* Safari 和 Chrome */
 | 
				
			||||||
 | 
						box-shadow: 3px 0px 4px #472a12; /* Opera 10.5 + */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#search {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'search_block_bg.jpg' %>) repeat-x left top;
 | 
				
			||||||
 | 
						margin-top:43px;
 | 
				
			||||||
 | 
						padding:15px 12px;
 | 
				
			||||||
 | 
						height:20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#search input {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'search_bg.png' %>) no-repeat left top;
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
						width:154px;
 | 
				
			||||||
 | 
						height:20px;
 | 
				
			||||||
 | 
						padding: 0 20px;
 | 
				
			||||||
 | 
						font-family:Helvetica;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					h1 {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'h1_bg.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						line-height:21px;
 | 
				
			||||||
 | 
						height:21px;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
						padding-left:10px;
 | 
				
			||||||
 | 
						font-weight:normal;
 | 
				
			||||||
 | 
						text-shadow:0px -1px 0px #000;
 | 
				
			||||||
 | 
						color:#FFF;
 | 
				
			||||||
 | 
						border-top:1px solid #424344;
 | 
				
			||||||
 | 
						border-bottom:1px solid #1b1b1b;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#user_list .member_setup ul li.set_1 {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						border-top:1px solid #406cc3;
 | 
				
			||||||
 | 
						border-bottom:1px solid #242628;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#roles_list .member_setup ul li.set_2 {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						border-top:1px solid #406cc3;
 | 
				
			||||||
 | 
						border-bottom:1px solid #242628;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#infos_list .member_setup ul li.set_3 {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						border-top:1px solid #406cc3;
 | 
				
			||||||
 | 
						border-bottom:1px solid #242628;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#user_list .member_setup ul li.set_1 a span {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						color:#eeeeee;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#roles_list .member_setup ul li.set_2 a span {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						color:#eeeeee;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul {
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'line.png' %>) repeat-x left bottom;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul li {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'sidebar_li.jpg' %>) repeat-x left top;
 | 
				
			||||||
 | 
					/*	line-height:31px;*/
 | 
				
			||||||
 | 
						border-top:1px solid #424344;
 | 
				
			||||||
 | 
						border-bottom:1px solid #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul li:hover {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						border-top:1px solid #406cc3;
 | 
				
			||||||
 | 
						border-bottom:1px solid #242628;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul li a {
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
					    padding: 7px 0 6px 12px;
 | 
				
			||||||
 | 
						color:#c4c4c4;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul li a span {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'add_mamber.png' %>) left top no-repeat;
 | 
				
			||||||
 | 
						text-shadow: 0px 1px 0px #000;
 | 
				
			||||||
 | 
						line-height: 18px;
 | 
				
			||||||
 | 
						padding: 2px 0 1px 35px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.member_setup ul li a:hover span {
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						color:#eeeeee;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main{
 | 
				
			||||||
 | 
						position: relative;
 | 
				
			||||||
 | 
						margin-left: 260px;
 | 
				
			||||||
 | 
						padding-right: 40px;
 | 
				
			||||||
 | 
						height:100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list {
 | 
				
			||||||
 | 
						padding-top:70px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list ul {
 | 
				
			||||||
 | 
						clear:both;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li {
 | 
				
			||||||
 | 
						background:url(<%= asset_path '75.png' %>) repeat left top;
 | 
				
			||||||
 | 
						margin-bottom:20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li span {
 | 
				
			||||||
 | 
						display:inline-block;
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
						padding-left:20px;
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						font-size:14px;
 | 
				
			||||||
 | 
						line-height:40px;
 | 
				
			||||||
 | 
						width:18%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.list_head {
 | 
				
			||||||
 | 
						background:none;
 | 
				
			||||||
 | 
						margin-bottom:10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.list_head span {
 | 
				
			||||||
 | 
						font-size:16px;
 | 
				
			||||||
 | 
						line-height:inherit;
 | 
				
			||||||
 | 
						text-shadow: 0px 1px 1px #3e2914;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.list_item {
 | 
				
			||||||
 | 
						position:relative;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-box-shadow: 0px 0px 6px #291508; /* Firefox */
 | 
				
			||||||
 | 
						-webkit-box-shadow: 0px 0px 6px #291508;/* Safari 和 Chrome */
 | 
				
			||||||
 | 
						box-shadow: 0px 0px 6px #291508; /* Opera 10.5 + */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.list_item:hover {
 | 
				
			||||||
 | 
						border:1px solid #3699dd;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.disable {
 | 
				
			||||||
 | 
						opacity:0.6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li.list_item:hover span {
 | 
				
			||||||
 | 
						line-height:38px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li .roles {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li .name {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li .email {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li .admin{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.main_list li .action{
 | 
				
			||||||
 | 
						float: right;
 | 
				
			||||||
 | 
						width:10%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a{
 | 
				
			||||||
 | 
						background-image:url(<%= asset_path 'icon.png' %>);
 | 
				
			||||||
 | 
						text-indent:-9999px;
 | 
				
			||||||
 | 
						display:inline-block;
 | 
				
			||||||
 | 
						width:19px;
 | 
				
			||||||
 | 
						height:19px;
 | 
				
			||||||
 | 
						margin-top:8px;
 | 
				
			||||||
 | 
						margin-right:10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.show{
 | 
				
			||||||
 | 
						background-position:left top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.edit{
 | 
				
			||||||
 | 
						background-position:-19px top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.delete{
 | 
				
			||||||
 | 
						background-position:-38px top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main a.switch{
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'switch.png' %>) no-repeat left 3px;
 | 
				
			||||||
 | 
						width:40px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .disable a.switch{
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'switch.png' %>) no-repeat left bottom;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.show:hover{
 | 
				
			||||||
 | 
						background-position:left -19px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.edit:hover{
 | 
				
			||||||
 | 
						background-position:-19px -19px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .action a.delete:hover{
 | 
				
			||||||
 | 
						background-position:-38px -19px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main .list_item .roles {
 | 
				
			||||||
 | 
						background-image:url(<%= asset_path 'roles_type.jpg' %>);
 | 
				
			||||||
 | 
						background-repeat:repeat-x;
 | 
				
			||||||
 | 
						border-radius: 5px 0 0 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px 0 0 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px 0 0 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#roles_list .roles_block .action a{
 | 
				
			||||||
 | 
						margin-top:0;
 | 
				
			||||||
 | 
						margin-right:0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.student {
 | 
				
			||||||
 | 
						background-position:0 -5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.teacher {
 | 
				
			||||||
 | 
						background-position:0 -54px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#add_new a {
 | 
				
			||||||
 | 
						background-position:-54px -17px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#add_new a:hover {
 | 
				
			||||||
 | 
						background-position: -54px 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buttom {
 | 
				
			||||||
 | 
						float:right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#confirm a{
 | 
				
			||||||
 | 
						background-position:4px -70px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#confirm a:hover{
 | 
				
			||||||
 | 
						background-position: 4px -51px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#create a{
 | 
				
			||||||
 | 
						background-image: none;
 | 
				
			||||||
 | 
						padding: 0 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#update a{
 | 
				
			||||||
 | 
						background-position:4px -112px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#update a:hover{
 | 
				
			||||||
 | 
						background-position:4px -89px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#back a{
 | 
				
			||||||
 | 
						background-position:4px -156px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#back a:hover{
 | 
				
			||||||
 | 
						background-position:4px -133px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buttom a {
 | 
				
			||||||
 | 
						margin:0 0 20px 10px;
 | 
				
			||||||
 | 
						background-image:url(<%= asset_path 'icon.png' %>);
 | 
				
			||||||
 | 
						background-repeat:no-repeat;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
						color:#FFF;
 | 
				
			||||||
 | 
						display:inline-block;
 | 
				
			||||||
 | 
						padding:0 10px 0 25px;
 | 
				
			||||||
 | 
						background-color: rgba(0, 0, 0, 0.75);
 | 
				
			||||||
 | 
						line-height:24px;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-box-shadow: 3px 0px 4px #180902; /* Firefox */
 | 
				
			||||||
 | 
						-webkit-box-shadow: 3px 0px 4px #180902;/* Safari 和 Chrome */
 | 
				
			||||||
 | 
						box-shadow: 3px 0px 4px #180902; /* Opera 10.5 + */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buttom a:hover {
 | 
				
			||||||
 | 
						color:#000;
 | 
				
			||||||
 | 
						font-weight:bold;
 | 
				
			||||||
 | 
						background-color: rgba(255, 255, 255, 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile{
 | 
				
			||||||
 | 
						padding-top:100px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile h2 {
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-weight: normal;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    text-shadow: 0 3px 2px #000000;
 | 
				
			||||||
 | 
						position:absolute;
 | 
				
			||||||
 | 
						top:-30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile .user_mail {
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'upload_but.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						padding:3px 10px 1px;
 | 
				
			||||||
 | 
						margin-top:10px;
 | 
				
			||||||
 | 
						width:110px;
 | 
				
			||||||
 | 
					    height: 21px;
 | 
				
			||||||
 | 
						font-size: 12px;
 | 
				
			||||||
 | 
						color:#666666;
 | 
				
			||||||
 | 
						text-shadow: 0 1px 0 #FFFFFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile label {
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						text-shadow: 0 1px 0 #FFFFFF;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'upload_but.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
					    height: 25px;
 | 
				
			||||||
 | 
						width:110px;
 | 
				
			||||||
 | 
						padding: 0 0 0 18px;
 | 
				
			||||||
 | 
						border:1px solid #d8d8d8;
 | 
				
			||||||
 | 
						margin-top:10px;
 | 
				
			||||||
 | 
						color:#666666;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile label:hover{
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						color:#000;
 | 
				
			||||||
 | 
						border:1px solid #a6a6a6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile label input {
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
						margin: 6px 15px 0 0;
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#porfile label span {
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
						line-height:27px;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.roles_block {
 | 
				
			||||||
 | 
						min-width:710px;
 | 
				
			||||||
 | 
						margin-bottom:50px;
 | 
				
			||||||
 | 
						position:relative;
 | 
				
			||||||
 | 
						padding-bottom: 20px;
 | 
				
			||||||
 | 
						background:url(<%= asset_path '75.png' %>) repeat left top;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-box-shadow: 0px 0px 4px #180902; /* Firefox */
 | 
				
			||||||
 | 
						-webkit-box-shadow: 0px 0px 4px #180902;/* Safari 和 Chrome */
 | 
				
			||||||
 | 
						box-shadow: 0px 0px 4px #180902; /* Opera 10.5 + */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#user_list .roles_block {
 | 
				
			||||||
 | 
						margin-left:180px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#person {
 | 
				
			||||||
 | 
						text-align:center;
 | 
				
			||||||
 | 
						left: 265px;
 | 
				
			||||||
 | 
						position: fixed;
 | 
				
			||||||
 | 
						top: 75px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#person img {
 | 
				
			||||||
 | 
						background-color:#FFF;
 | 
				
			||||||
 | 
						padding:5px;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-box-shadow: 0px 0px 4px #180902; /* Firefox */
 | 
				
			||||||
 | 
						-webkit-box-shadow: 0px 0px 4px #180902;/* Safari 和 Chrome */
 | 
				
			||||||
 | 
						box-shadow: 0px 0px 4px #180902; /* Opera 10.5 + */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#person .mail {
 | 
				
			||||||
 | 
						color: #FFFFFF;
 | 
				
			||||||
 | 
						font-size: 12px;
 | 
				
			||||||
 | 
						text-shadow:0px 1px 0px #333;
 | 
				
			||||||
 | 
						font-weight:bold;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'line.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
						padding-top:10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#upload, #edit{
 | 
				
			||||||
 | 
						margin: 0 auto;
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						text-shadow: 0 1px 0 #FFFFFF;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'upload_but.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
					    height: 25px;
 | 
				
			||||||
 | 
						line-height:27px;
 | 
				
			||||||
 | 
						color:#666666;
 | 
				
			||||||
 | 
						width:128px;
 | 
				
			||||||
 | 
						text-align:center;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
						border:1px solid #d8d8d8;
 | 
				
			||||||
 | 
						margin-top:10px;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#upload:hover{
 | 
				
			||||||
 | 
						background-position:left bottom;
 | 
				
			||||||
 | 
						color:#000;
 | 
				
			||||||
 | 
						border:1px solid #a6a6a6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#main hr{
 | 
				
			||||||
 | 
						height:8px;
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						border-radius: 5px 5px 0px 0px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px 5px 0px 0px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px 5px 0px 0px;
 | 
				
			||||||
 | 
						border-bottom:1px solid #000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#basic_block hr{
 | 
				
			||||||
 | 
						background-color:#666666;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#teacher_block hr{
 | 
				
			||||||
 | 
						background-color:#0071a9;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#student_block hr{
 | 
				
			||||||
 | 
						background-color:#af0045;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input {
 | 
				
			||||||
 | 
						padding:10px 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input table {
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						width:100%;
 | 
				
			||||||
 | 
						font-size:14px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input table td {
 | 
				
			||||||
 | 
						padding:5px 10px 5px 0;
 | 
				
			||||||
 | 
						width: 10%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input .list_head {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'line.png' %>) left bottom repeat-x;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input .list_head td {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input .list_item {
 | 
				
			||||||
 | 
						color:#AEAEAE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input .add {
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						padding-left:22px;
 | 
				
			||||||
 | 
						font-size:12px;
 | 
				
			||||||
 | 
						line-height:21px;
 | 
				
			||||||
 | 
						height:19px;
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'icon.png' %>) no-repeat -59px 0;
 | 
				
			||||||
 | 
						margin-top: 10px;
 | 
				
			||||||
 | 
						color: #DDDDDD;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input .add:hover {
 | 
				
			||||||
 | 
						color:#FFF;
 | 
				
			||||||
 | 
						background-position:-59px -19px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input li {
 | 
				
			||||||
 | 
						height:30px;
 | 
				
			||||||
 | 
						margin-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input li span {
 | 
				
			||||||
 | 
						display:inline-block;
 | 
				
			||||||
 | 
						float:left;
 | 
				
			||||||
 | 
						color:#fff;
 | 
				
			||||||
 | 
						font-size:14px;
 | 
				
			||||||
 | 
						line-height:30px;
 | 
				
			||||||
 | 
						margin-right:10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#user_list .info_input li span {
 | 
				
			||||||
 | 
						width: 25%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#roles_list .info_input li span {
 | 
				
			||||||
 | 
						width:15%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.info_input li span:last-child {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#person select {
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'upload_but.png' %>) repeat-x left top;
 | 
				
			||||||
 | 
						border:1px solid #d8d8d8;
 | 
				
			||||||
 | 
						margin-top: 10px;
 | 
				
			||||||
 | 
						width: 130px;
 | 
				
			||||||
 | 
						padding:3px 6px 3px 14px;
 | 
				
			||||||
 | 
						border-radius: 5px;
 | 
				
			||||||
 | 
						-moz-border-radius: 5px;
 | 
				
			||||||
 | 
						-webkit-border-radius: 5px;
 | 
				
			||||||
 | 
						border:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,305 @@
 | 
				
			||||||
 | 
					body{
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'wood_floor.jpg' %>) fixed center 0;
 | 
				
			||||||
 | 
						/*background:url(images/jobs.jpg) fixed center bottom;*/
 | 
				
			||||||
 | 
						-moz-background-size:cover;
 | 
				
			||||||
 | 
						background-size:cover;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu{
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'orbitbar1.png' %>) repeat-x 0 0;
 | 
				
			||||||
 | 
					    height: 50px;
 | 
				
			||||||
 | 
					    position:fixed;
 | 
				
			||||||
 | 
						top:0;
 | 
				
			||||||
 | 
						left:0;
 | 
				
			||||||
 | 
						width:100%;
 | 
				
			||||||
 | 
						z-index: 5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orbit_icon {
 | 
				
			||||||
 | 
						margin-left: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orbit_icon a {
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'bar_orbit.png' %>) no-repeat scroll left top transparent;
 | 
				
			||||||
 | 
						height: 43px;
 | 
				
			||||||
 | 
						width: 41px;
 | 
				
			||||||
 | 
						display:block;
 | 
				
			||||||
 | 
						text-indent:-9999px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#orbit_icon a:hover {
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'bar_orbit.png' %>) no-repeat scroll left 50% transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #left{
 | 
				
			||||||
 | 
					    left: 51px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #left a{
 | 
				
			||||||
 | 
					    border-left: 1px solid #000000;
 | 
				
			||||||
 | 
					    border-right: 1px solid #7F8488;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font-size: 17px;
 | 
				
			||||||
 | 
					    height: 40px;
 | 
				
			||||||
 | 
					    line-height: 40px;
 | 
				
			||||||
 | 
					    padding: 0 10px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #left a:hover{
 | 
				
			||||||
 | 
						background:#000;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #right{
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: 10px;
 | 
				
			||||||
 | 
					    top: 1px;
 | 
				
			||||||
 | 
					    width: 393px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #right a{
 | 
				
			||||||
 | 
					    border-left: 1px solid #7F8488;
 | 
				
			||||||
 | 
					    border-right: 1px solid #7F8488;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font-size: 17px;
 | 
				
			||||||
 | 
					    height: 40px;
 | 
				
			||||||
 | 
					    line-height: 40px;
 | 
				
			||||||
 | 
					    padding: 0 10px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    width: 65px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu #right a:hover{
 | 
				
			||||||
 | 
						background:#000;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#hmenu form{
 | 
				
			||||||
 | 
					    left: 27px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#login_id{
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'bar_id.png' %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none;
 | 
				
			||||||
 | 
					    color: #818181;
 | 
				
			||||||
 | 
					    font-family: arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 26px;
 | 
				
			||||||
 | 
					    left: 70px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 119px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#login_id input {
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none;
 | 
				
			||||||
 | 
					    font-family: arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 15px;
 | 
				
			||||||
 | 
					    left: 21px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 4px;
 | 
				
			||||||
 | 
					    width: 92px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#login_pw {
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'bar_pw.png' %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none;
 | 
				
			||||||
 | 
					    color: #818181;
 | 
				
			||||||
 | 
					    font-family: arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 26px;
 | 
				
			||||||
 | 
					    left: 193px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 119px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#login_pw input {
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none;
 | 
				
			||||||
 | 
					    font-family: arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 15px;
 | 
				
			||||||
 | 
					    left: 21px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 4px;
 | 
				
			||||||
 | 
					    width: 92px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#login_btn input {
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'bar_btn.png' %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    font-family: arial,sans-serif;
 | 
				
			||||||
 | 
					    height: 26px;
 | 
				
			||||||
 | 
					    left: 316px;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0 0 2px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    width: 50px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#log_out a{
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'service_btn.png' %>) no-repeat scroll right 0 transparent;
 | 
				
			||||||
 | 
					    border: medium none !important;
 | 
				
			||||||
 | 
					    display: block !important;
 | 
				
			||||||
 | 
					    height: 40px !important;
 | 
				
			||||||
 | 
					    line-height: normal !important;
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					/*    right: -9px;*/
 | 
				
			||||||
 | 
					    text-indent: -10000px;
 | 
				
			||||||
 | 
					    top: 0px;
 | 
				
			||||||
 | 
					    width: 43px !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#log_out a:hover{
 | 
				
			||||||
 | 
					    background:url(<%= asset_path 'service_btn.png' %>) no-repeat scroll right bottom transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#hmenu #right select{
 | 
				
			||||||
 | 
					    font-family: helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    left: 97px;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 10px;
 | 
				
			||||||
 | 
					    width: 120px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.content{
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#user_info{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #FEFEFE;
 | 
				
			||||||
 | 
					    border: 1px solid #818181;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    margin: 0 0 20px;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    width: 250px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#user_info table{
 | 
				
			||||||
 | 
					    border-collapse: collapse;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#user_info table td{
 | 
				
			||||||
 | 
					    padding: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#sites_info{
 | 
				
			||||||
 | 
						background: -webkit-gradient(linear, left top, left bottom, from(white), to(#F8F8F8));
 | 
				
			||||||
 | 
						border: 1px solid #818181;
 | 
				
			||||||
 | 
						border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
						float: left;
 | 
				
			||||||
 | 
						margin: 0 20px 20px 0;
 | 
				
			||||||
 | 
						width: 30%;
 | 
				
			||||||
 | 
						min-width: 320px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#sites_info h3{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #EEEEEE;
 | 
				
			||||||
 | 
					    border: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    font: 24px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 2% 2% 0;
 | 
				
			||||||
 | 
					    padding: 1%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#sites_info table{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #fff;
 | 
				
			||||||
 | 
					    border: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    margin: 2%;
 | 
				
			||||||
 | 
					    width: 96%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#sites_info table td{
 | 
				
			||||||
 | 
					    padding: 10px 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#sites_info table th{
 | 
				
			||||||
 | 
					    border-right: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    color: #808080;
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					    font-weight: normal;
 | 
				
			||||||
 | 
					    padding: 10px 5px;
 | 
				
			||||||
 | 
					    text-align: right;
 | 
				
			||||||
 | 
					    width: 20%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#purchases{
 | 
				
			||||||
 | 
						background: -webkit-gradient(linear, left top, left bottom, from(white), to(#F8F8F8)); 
 | 
				
			||||||
 | 
						border: 1px solid #818181;
 | 
				
			||||||
 | 
						border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
						float: left;
 | 
				
			||||||
 | 
						width: 30%;
 | 
				
			||||||
 | 
						min-width: 320px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#purchases h3{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #EEEEEE;
 | 
				
			||||||
 | 
					    border: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    font: 24px/100% helvetica,arial,sans-serif;
 | 
				
			||||||
 | 
					    margin: 2% 2% 0;
 | 
				
			||||||
 | 
					    padding: 1%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#purchases table{
 | 
				
			||||||
 | 
					    background: none repeat scroll 0 0 #fff;
 | 
				
			||||||
 | 
					    border: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    border-radius: 5px 5px 5px 5px;
 | 
				
			||||||
 | 
					    margin: 2%;
 | 
				
			||||||
 | 
					    width: 96%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#purchases table th{
 | 
				
			||||||
 | 
					    border-right: 1px solid #DDDDDD;
 | 
				
			||||||
 | 
					    color: #808080;
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					    font-weight: normal;
 | 
				
			||||||
 | 
					    padding: 10px 5px;
 | 
				
			||||||
 | 
					    text-align: right;
 | 
				
			||||||
 | 
					    width: 20%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#purchases table td{
 | 
				
			||||||
 | 
					    padding: 10px 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.design_page{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.style_list{
 | 
				
			||||||
 | 
						background:url(<%= asset_path 'preview.png' %>) no-repeat 0 0;
 | 
				
			||||||
 | 
						height:246px;
 | 
				
			||||||
 | 
					    margin: 20px 0;
 | 
				
			||||||
 | 
					    padding: 0 0 0 236px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.style_list ul{
 | 
				
			||||||
 | 
						margin:0;
 | 
				
			||||||
 | 
						padding:0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.style_list li{
 | 
				
			||||||
 | 
					    color: #EDA330;
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					    list-style: none outside none;
 | 
				
			||||||
 | 
					    margin: 0 0 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.list_title{
 | 
				
			||||||
 | 
					    color: #818181;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font: 24px/100% ·L³n¥¿¶ÂÅé,sans-serif;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buy_btn a{
 | 
				
			||||||
 | 
					    background:url(<%= asset_path "buy_btn.png" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    color: #000000;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    font-size: 22px;
 | 
				
			||||||
 | 
					    height: 37px;
 | 
				
			||||||
 | 
					    line-height: 37px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    text-shadow: 0 1px 0 #FFFFFF;
 | 
				
			||||||
 | 
					    width: 170px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.buy_btn a:hover{
 | 
				
			||||||
 | 
						background-position:0 bottom;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bought_btn{
 | 
				
			||||||
 | 
					    background:url(<%= asset_path "bought_btn.png" %>) no-repeat scroll 0 0 transparent;
 | 
				
			||||||
 | 
					    color: #FFFFFF;
 | 
				
			||||||
 | 
					    font-size: 22px;
 | 
				
			||||||
 | 
					    height: 37px;
 | 
				
			||||||
 | 
					    line-height: 37px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    text-shadow: 0 1px 0 #C06408;
 | 
				
			||||||
 | 
					    width: 170px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,147 @@
 | 
				
			||||||
 | 
					class Admin::DesignsController < ApplicationController
 | 
				
			||||||
 | 
					  require "net/http"
 | 
				
			||||||
 | 
					  require "uri"
 | 
				
			||||||
 | 
					  require 'zip/zip'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  layout "admin"
 | 
				
			||||||
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
 | 
					  before_filter :is_admin?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def upload_package
 | 
				
			||||||
 | 
					    if !params[:design].nil?
 | 
				
			||||||
 | 
					    temp_file = Tempfile.new("temp_file")
 | 
				
			||||||
 | 
					    original_file = params[:design][:package_file]
 | 
				
			||||||
 | 
					      #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.original_filename,".zip")
 | 
				
			||||||
 | 
					        unzip_design(temp_file, filename)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					      #  flash[:error] = "Upload file should be in zip format"
 | 
				
			||||||
 | 
					      #end
 | 
				
			||||||
 | 
					      temp_file.close
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def index
 | 
				
			||||||
 | 
					    @designs = Design.all.entries
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def new
 | 
				
			||||||
 | 
					    @design = Design.new
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def update
 | 
				
			||||||
 | 
					    @design = Design.find(params[:id])
 | 
				
			||||||
 | 
					    if @design.update_attributes(params[:design])
 | 
				
			||||||
 | 
					      flash[:notice] = "Successfully updated design and tasks."
 | 
				
			||||||
 | 
					      redirect_to admin_designs_url(@design)
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      render :action => 'edit'
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def edit_file
 | 
				
			||||||
 | 
					    @design = Design.find(params[:id])
 | 
				
			||||||
 | 
					    filename = params[:filename]
 | 
				
			||||||
 | 
					    files = @design.themes + @design.javascripts + @design.images
 | 
				
			||||||
 | 
					    file_to_removed = files.find{ |obj|
 | 
				
			||||||
 | 
					      obj.file_filename == filename
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    type = file_to_removed._type
 | 
				
			||||||
 | 
					    new_file = ""
 | 
				
			||||||
 | 
					    Dir.mktmpdir('design_temp'){ |dir|
 | 
				
			||||||
 | 
					      temp_file = File.new(dir+'/'+filename,'w+')
 | 
				
			||||||
 | 
					      temp_file.write params[:context]
 | 
				
			||||||
 | 
					      replace_target = eval("@design.#{type.downcase.pluralize}")
 | 
				
			||||||
 | 
					      new_file = replace_target.build(:file => temp_file,:to_save=>true)
 | 
				
			||||||
 | 
					      file_to_removed.destroy
 | 
				
			||||||
 | 
					      new_file.save
 | 
				
			||||||
 | 
					      temp_file.close
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    respond_to do |format|
 | 
				
			||||||
 | 
					      format.js  {}
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def edit
 | 
				
			||||||
 | 
					    @design = Design.find(params[:id])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def destroy
 | 
				
			||||||
 | 
					    @design = Design.find(params[:id])
 | 
				
			||||||
 | 
					    @design.destroy
 | 
				
			||||||
 | 
					    redirect_to admin_designs_url
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def create
 | 
				
			||||||
 | 
					    @design = Design.new(params[:design])
 | 
				
			||||||
 | 
					    if @design.save
 | 
				
			||||||
 | 
					        flash[:notice] = "Successfully created design and tasks."
 | 
				
			||||||
 | 
					        redirect_to admin_designs_url
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        render :action => 'new'
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  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|
 | 
				
			||||||
 | 
					        design.build_layout
 | 
				
			||||||
 | 
					        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
 | 
				
			||||||
 | 
					              filename = File.basename(entry.to_s)
 | 
				
			||||||
 | 
					              temp_file = File.new(dir + '/' + filename, 'w+') 
 | 
				
			||||||
 | 
					              temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
 | 
				
			||||||
 | 
					              default_css = design.build_default_css
 | 
				
			||||||
 | 
					              default_css.file = temp_file
 | 
				
			||||||
 | 
					              default_css.file_filename = filename
 | 
				
			||||||
 | 
					              default_css.to_save = true
 | 
				
			||||||
 | 
					            when /\A(#{zip_name})\/(reset\.css)\z/    #for reset css
 | 
				
			||||||
 | 
					              filename = File.basename(entry.to_s)
 | 
				
			||||||
 | 
					              temp_file = File.new(dir + '/' + filename, 'w+') 
 | 
				
			||||||
 | 
					              temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
 | 
				
			||||||
 | 
					              reset_css = design.build_reset_css
 | 
				
			||||||
 | 
					              reset_css.file = temp_file
 | 
				
			||||||
 | 
					              reset_css.file_filename = filename
 | 
				
			||||||
 | 
					              reset_css.to_save = true
 | 
				
			||||||
 | 
					            when /\A(#{zip_name})\/(layout\.html)\z/    #for layout html
 | 
				
			||||||
 | 
					              filename = File.basename(entry.to_s)
 | 
				
			||||||
 | 
					              temp_file = File.new(dir + '/' + filename, 'w+') 
 | 
				
			||||||
 | 
					              temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
 | 
				
			||||||
 | 
					              design.layout.file = temp_file
 | 
				
			||||||
 | 
					              design.layout.to_save=true
 | 
				
			||||||
 | 
					            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|
 | 
				
			||||||
 | 
					            filename = File.basename entry.to_s
 | 
				
			||||||
 | 
					            temp_file = File.new(dir + '/' + filename, 'w+')
 | 
				
			||||||
 | 
					            temp_file.write (zip_file.read entry).force_encoding('UTF-8')
 | 
				
			||||||
 | 
					            build_and_store = eval("design.#{type}").build
 | 
				
			||||||
 | 
					            build_and_store.file = temp_file
 | 
				
			||||||
 | 
					            build_and_store.file_filename = filename
 | 
				
			||||||
 | 
					            build_and_store.to_save = true
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      design.save
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ class Admin::ItemsController < ApplicationController
 | 
				
			||||||
    if params[:item_id]
 | 
					    if params[:item_id]
 | 
				
			||||||
      @item = Item.find(params[:item_id])
 | 
					      @item = Item.find(params[:item_id])
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      @item = Item.first(:conditions => {:parent_id => nil})
 | 
					      @item = get_homepage
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,54 +0,0 @@
 | 
				
			||||||
class Admin::LayoutsController < ApplicationController
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  layout "admin"
 | 
					 | 
				
			||||||
  before_filter :authenticate_user!
 | 
					 | 
				
			||||||
  before_filter :is_admin?
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  def index
 | 
					 | 
				
			||||||
    @layouts = Layout.all.entries
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def show
 | 
					 | 
				
			||||||
    #TODO
 | 
					 | 
				
			||||||
#    @layout = Layout.find(params[:id])
 | 
					 | 
				
			||||||
#    redirect_to "/#{@layout.name}"
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def new
 | 
					 | 
				
			||||||
    @layout = Layout.new
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def edit
 | 
					 | 
				
			||||||
    @layout = Layout.find(params[:id])
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def create
 | 
					 | 
				
			||||||
    @layout = Layout.new(params[:layout])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if @layout.save
 | 
					 | 
				
			||||||
      flash[:notice] = t('admin.create_success_layout')
 | 
					 | 
				
			||||||
      redirect_to admin_layouts_url
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      render :action => 'new'
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def update
 | 
					 | 
				
			||||||
    @layout = Layout.find(params[:id])
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if @layout.update_attributes(params[:layout])
 | 
					 | 
				
			||||||
      flash[:notice] = t('admin.update_success_layout')
 | 
					 | 
				
			||||||
      redirect_to admin_layouts_url
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      render :action => "edit"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def destroy
 | 
					 | 
				
			||||||
    @layout = Layout.find(params[:id])
 | 
					 | 
				
			||||||
    @layout.destroy
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    redirect_to admin_layouts_url
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@ class Admin::PagePartsController < ApplicationController
 | 
				
			||||||
        @partial = 'edit_text'
 | 
					        @partial = 'edit_text'
 | 
				
			||||||
        @part_locale = params[:part_locale] || I18n.locale.to_s
 | 
					        @part_locale = params[:part_locale] || I18n.locale.to_s
 | 
				
			||||||
      when 'module'
 | 
					      when 'module'
 | 
				
			||||||
 | 
					        @plugins=[{:module=>"Blog",:widgets=>[{:name=>"Blog",:path=>"panel/blog/widget_latest_post"},{:name=>"Blog",:path=>"panel/blog/widget_index"}]}]
 | 
				
			||||||
      when 'snippet'
 | 
					      when 'snippet'
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,14 +21,15 @@ class Admin::PagesController < ApplicationController
 | 
				
			||||||
    @item = Page.new
 | 
					    @item = Page.new
 | 
				
			||||||
    @item.is_published = true
 | 
					    @item.is_published = true
 | 
				
			||||||
    @item.parent_id = @parent_item.id rescue nil
 | 
					    @item.parent_id = @parent_item.id rescue nil
 | 
				
			||||||
 | 
					    @designs = Design.all.entries
 | 
				
			||||||
 | 
					    @default_design = Design.first
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def edit
 | 
					  def edit
 | 
				
			||||||
    @item = Page.find(params[:id])
 | 
					    @item = Page.find(params[:id])
 | 
				
			||||||
    # @item.content = parse_content(@item.content, {:locale => 'show'})
 | 
					 | 
				
			||||||
    @item.content = parse_page_code(@item)
 | 
					 | 
				
			||||||
    @i18n_variable = @item.i18n_variable
 | 
					    @i18n_variable = @item.i18n_variable
 | 
				
			||||||
    @code = params[:code]
 | 
					    @designs = Design.all.entries
 | 
				
			||||||
 | 
					    @design = @item.design
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def create
 | 
					  def create
 | 
				
			||||||
| 
						 | 
					@ -52,8 +53,7 @@ class Admin::PagesController < ApplicationController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def update
 | 
					  def update
 | 
				
			||||||
    @item = Page.find(params[:id])
 | 
					    @item = Page.find(params[:id])
 | 
				
			||||||
    parse_content_update_code(@item, params[:page][:content])
 | 
					    if @item.update_attributes(params[:page])
 | 
				
			||||||
    if @item.update_attributes(params[:item])
 | 
					 | 
				
			||||||
      flash[:notice] = t('admin.update_success_page')
 | 
					      flash[:notice] = t('admin.update_success_page')
 | 
				
			||||||
      respond_to do |format|
 | 
					      respond_to do |format|
 | 
				
			||||||
        format.html {
 | 
					        format.html {
 | 
				
			||||||
| 
						 | 
					@ -86,4 +86,12 @@ class Admin::PagesController < ApplicationController
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  def reload_themes
 | 
				
			||||||
 | 
					    @design = Design.find(params[:id])
 | 
				
			||||||
 | 
					    @themes = @design.themes
 | 
				
			||||||
 | 
					    respond_to do |format|
 | 
				
			||||||
 | 
					      format.js  {}
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,186 @@
 | 
				
			||||||
 | 
					class Admin::PurchasesController < ApplicationController
 | 
				
			||||||
 | 
					  require "net/http"
 | 
				
			||||||
 | 
					  require "uri"
 | 
				
			||||||
 | 
					  require 'zip/zip'
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  layout "admin"
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def index
 | 
				
			||||||
 | 
					    @purchases = Purchase.all.entries
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def download
 | 
				
			||||||
 | 
					    @purchase = Purchase.first(:conditions => {:id => params[:id]})
 | 
				
			||||||
 | 
					    download_purchase(@purchase, request.env['REQUEST_URI'].split('admin')[0].chop)
 | 
				
			||||||
 | 
					    @purchase.downloaded = true
 | 
				
			||||||
 | 
					    @purchase.save
 | 
				
			||||||
 | 
					    redirect_to admin_purchases_url
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def install_app
 | 
				
			||||||
 | 
					    unzip_app
 | 
				
			||||||
 | 
					    redirect_to admin_purchases_url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def download_purchase(purchase, url)
 | 
				
			||||||
 | 
					    uri = URI.parse("http://#{APP_CONFIG['store_ip']}/download/purchase")
 | 
				
			||||||
 | 
					    http = Net::HTTP.new(uri.host, uri.port)
 | 
				
			||||||
 | 
					    request = Net::HTTP::Post.new(uri.request_uri)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public_key = OpenSSL::PKey::RSA.new(File.read(APP_CONFIG['main_public_key']))
 | 
				
			||||||
 | 
					    encrypted_data = public_key.public_encrypt({:purchase_id => purchase.purchase_id,
 | 
				
			||||||
 | 
					                                                :purchase_type => purchase._type,
 | 
				
			||||||
 | 
					                                                :roaming_id => Site.find(session[:site]).roaming_id,
 | 
				
			||||||
 | 
					                                                :url => url}.to_json)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    request.set_form_data({ :purchase => encrypted_data})
 | 
				
			||||||
 | 
					    response = http.request(request)
 | 
				
			||||||
 | 
					    temp_file = Tempfile.new("temp_file")
 | 
				
			||||||
 | 
					    temp_file.binmode
 | 
				
			||||||
 | 
					    temp_file.write response.body
 | 
				
			||||||
 | 
					    temp_file.rewind
 | 
				
			||||||
 | 
					    zip_name = response['content-disposition'].split('filename=')[1].gsub(/[\\\"]|.zip/, '') rescue ''
 | 
				
			||||||
 | 
					    case purchase._type
 | 
				
			||||||
 | 
					      when 'Pdesign'
 | 
				
			||||||
 | 
					        unzip_design(temp_file, zip_name)
 | 
				
			||||||
 | 
					      when 'PModuleApp'
 | 
				
			||||||
 | 
					        unzip_module_app(temp_file, zip_name)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    temp_file.close
 | 
				
			||||||
 | 
					    temp_file.unlink
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def unzip_design(file, zip_name)
 | 
				
			||||||
 | 
					    Zip::ZipFile.open(file) do |zip_file|
 | 
				
			||||||
 | 
					      encrypted = {}
 | 
				
			||||||
 | 
					      ['encrypted_data', 'encrypted_key', 'encrypted_iv'].each do |e|
 | 
				
			||||||
 | 
					        encrypted.merge!(e => zip_file.read(e))
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      orig_file = decrypt_data(encrypted['encrypted_data'], encrypted['encrypted_key'], encrypted['encrypted_iv'])
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file = Tempfile.new("temp_file_zip")
 | 
				
			||||||
 | 
					      temp_file.binmode
 | 
				
			||||||
 | 
					      temp_file.write orig_file
 | 
				
			||||||
 | 
					      temp_file.rewind
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      Zip::ZipFile.open(temp_file) { |orig_zip|
 | 
				
			||||||
 | 
					        design = Design.new.from_json(orig_zip.read("#{zip_name}/#{zip_name}.json"))
 | 
				
			||||||
 | 
					        Dir.mktmpdir('f_path') { |dir|
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          build_file(orig_zip, zip_name, dir, design.layout) if design.layout
 | 
				
			||||||
 | 
					          build_file(orig_zip, zip_name, dir, design.default_css) if design.default_css
 | 
				
			||||||
 | 
					          build_file(orig_zip, zip_name, dir, design.reset_css) if design.reset_css
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          ['themes', 'javascripts', 'images'].each do |type|
 | 
				
			||||||
 | 
					            design.send(type).each do |object|
 | 
				
			||||||
 | 
					              build_file(orig_zip, zip_name, dir, object, type)
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        temp_file.close
 | 
				
			||||||
 | 
					        temp_file.unlink
 | 
				
			||||||
 | 
					        design.save
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def unzip_app
 | 
				
			||||||
 | 
					    zip_name = "NewBlog"
 | 
				
			||||||
 | 
					    file = "#{Rails.root}/lib/NewBlog.zip"
 | 
				
			||||||
 | 
					    destination = "#{Rails.root}/vendor/plugins"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Zip::ZipFile.open(file) do |zip_file|
 | 
				
			||||||
 | 
					      orig_file = file
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file = Tempfile.new("temp_file_zip")
 | 
				
			||||||
 | 
					      temp_file.binmode
 | 
				
			||||||
 | 
					      temp_file.write orig_file
 | 
				
			||||||
 | 
					      temp_file.rewind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      app = AppModule.new.from_json(zip_file.read("#{zip_name}/#{zip_name}/#{zip_name}.json"))
 | 
				
			||||||
 | 
					      zip_file.each do  |f|
 | 
				
			||||||
 | 
					         if (f.to_s=~/^#{zip_name}\/#{zip_name}\/*/)
 | 
				
			||||||
 | 
					            f_path=File.join(destination, f.name.gsub(/^#{zip_name}\//, ''))
 | 
				
			||||||
 | 
					            FileUtils.mkdir_p(File.dirname(f_path))
 | 
				
			||||||
 | 
					            zip_file.extract(f, f_path) unless File.exist?(f_path)
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      log = Logger.new(STDOUT)
 | 
				
			||||||
 | 
					      log.level = Logger::WARN
 | 
				
			||||||
 | 
					      log.warn("App unzip procress is finished,please restart the server to apply effect")
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      #TODO Perform touch tmp/restart to restart in production env
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def unzip_module_app(file, zip_name)
 | 
				
			||||||
 | 
					    destination = "#{Rails.root}/vendor/plugins"
 | 
				
			||||||
 | 
					    Zip::ZipFile.open(file) do |zip_file|
 | 
				
			||||||
 | 
					      encrypted = {}
 | 
				
			||||||
 | 
					      ['encrypted_data', 'encrypted_key', 'encrypted_iv'].each do |e|
 | 
				
			||||||
 | 
					        encrypted.merge!(e => zip_file.read(e))
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      orig_file = decrypt_data(encrypted['encrypted_data'], encrypted['encrypted_key'], encrypted['encrypted_iv'])
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file = Tempfile.new("temp_file_zip")
 | 
				
			||||||
 | 
					      temp_file.binmode
 | 
				
			||||||
 | 
					      temp_file.write orig_file
 | 
				
			||||||
 | 
					      temp_file.rewind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Zip::ZipFile.open(temp_file) { |orig_zip|
 | 
				
			||||||
 | 
					        module_app = ModuleApp.new.from_json(orig_zip.read("#{zip_name}/#{zip_name}.json"))
 | 
				
			||||||
 | 
					        orig_zip.remove("#{zip_name}/#{zip_name}.json")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        orig_zip.each do |orig|
 | 
				
			||||||
 | 
					          inner_temp_file = Tempfile.new("inner_temp_file_zip")
 | 
				
			||||||
 | 
					          inner_temp_file.binmode
 | 
				
			||||||
 | 
					          inner_temp_file.write orig_zip.read(orig)
 | 
				
			||||||
 | 
					          inner_temp_file.rewind
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          Zip::ZipFile.open(inner_temp_file) {|inner_zip|
 | 
				
			||||||
 | 
					            inner_zip.each do |f|
 | 
				
			||||||
 | 
					              if (f.to_s=~/^#{zip_name}\/*/)
 | 
				
			||||||
 | 
					                f_path = File.join(destination, f.name)
 | 
				
			||||||
 | 
					                FileUtils.mkdir_p(File.dirname(f_path))
 | 
				
			||||||
 | 
					                inner_zip.extract(f, f_path) unless File.exist?(f_path)
 | 
				
			||||||
 | 
					              end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          inner_temp_file.close
 | 
				
			||||||
 | 
					          inner_temp_file.unlink
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        module_app.save
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log = Logger.new(STDOUT)
 | 
				
			||||||
 | 
					        log.level = Logger::WARN
 | 
				
			||||||
 | 
					        log.warn("App unzip procress is finished,please restart the server to apply effect")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file.close
 | 
				
			||||||
 | 
					      temp_file.unlink
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def build_file(orig_zip, zip_name, dir, object, type = nil)
 | 
				
			||||||
 | 
					    title = object.file_filename
 | 
				
			||||||
 | 
					    temp = File.new(dir + '/' + title, 'w+')
 | 
				
			||||||
 | 
					    temp.write orig_zip.read(zip_name + '/' + (type ? (type + '/') : '') + title)
 | 
				
			||||||
 | 
					    object.file = temp
 | 
				
			||||||
 | 
					    object.to_save = true
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def unzip_file (file, destination)
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					class Admin::SitesController < ApplicationController
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  layout "admin"
 | 
				
			||||||
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
 | 
					  before_filter :is_admin?
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def index
 | 
				
			||||||
 | 
					    @site = Site.first
 | 
				
			||||||
 | 
					    redirect_to :action => :new unless @site
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def new
 | 
				
			||||||
 | 
					    @site = Site.new
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,8 @@ class Admin::SnippetsController < ApplicationController
 | 
				
			||||||
  before_filter :find_parent_item
 | 
					  before_filter :find_parent_item
 | 
				
			||||||
  before_filter :is_admin?
 | 
					  before_filter :is_admin?
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  #Snippet is a object admin user can define his own tag and being used later on in parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def show
 | 
					  def show
 | 
				
			||||||
    #TODO
 | 
					    #TODO
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
class Admin::UserAttributesController < ApplicationController
 | 
					class Admin::UserAttributesController < ApplicationController
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  layout "admin"
 | 
					  layout "member"
 | 
				
			||||||
  before_filter :authenticate_user!
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
class Admin::UserInfoModelsController < ApplicationController
 | 
					class Admin::UserInfoModelsController < ApplicationController
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  layout "admin"
 | 
					  layout "member"
 | 
				
			||||||
  before_filter :authenticate_user!
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
  before_filter :is_admin?
 | 
					  before_filter :is_admin?
 | 
				
			||||||
  before_filter :set_attribute, :only => [:index, :show, :new, :edit]
 | 
					  before_filter :set_attribute, :only => [:index, :show, :new, :edit]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
class Admin::UserRoleModelsController < ApplicationController
 | 
					class Admin::UserRoleModelsController < ApplicationController
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  layout "admin"
 | 
					  layout "member"
 | 
				
			||||||
  before_filter :authenticate_user!
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
  before_filter :is_admin?
 | 
					  before_filter :is_admin?
 | 
				
			||||||
  before_filter :set_attribute, :only => [:index, :show, :new, :edit]
 | 
					  before_filter :set_attribute, :only => [:index, :show, :new, :edit]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
class Panel::UsersController < ApplicationController
 | 
					class Admin::UsersController < ApplicationController
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  layout "panel"
 | 
					  layout "member"
 | 
				
			||||||
  before_filter :authenticate_user!
 | 
					  before_filter :authenticate_user!
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ class Panel::UsersController < ApplicationController
 | 
				
			||||||
        user_role.save
 | 
					        user_role.save
 | 
				
			||||||
        user_role.attribute_values.each(&:save)
 | 
					        user_role.attribute_values.each(&:save)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
      flash[:notice] = t('panel.create_success_user')
 | 
					      flash[:notice] = t('admin.create_success_user')
 | 
				
			||||||
      redirect_to :action => :index
 | 
					      redirect_to :action => :index
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      render :action => :new      
 | 
					      render :action => :new      
 | 
				
			||||||
| 
						 | 
					@ -48,10 +48,10 @@ class Panel::UsersController < ApplicationController
 | 
				
			||||||
    @user.avatar = params[:file] if params[:file]
 | 
					    @user.avatar = params[:file] if params[:file]
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b
 | 
					    if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b
 | 
				
			||||||
      flash.now[:error] = t('panel.cant_revoke_self_admin')
 | 
					      flash.now[:error] = t('admin.cant_revoke_self_admin')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    if !flash[:error] && @user.update_attributes(params[:user])
 | 
					    if !flash[:error] && @user.update_attributes(params[:user])
 | 
				
			||||||
      flash[:notice] = t('panel.update_success_user')
 | 
					      flash[:notice] = t('admin.update_success_user')
 | 
				
			||||||
      redirect_to :action => :index
 | 
					      redirect_to :action => :index
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      get_info_role_models
 | 
					      get_info_role_models
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ class Panel::UsersController < ApplicationController
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  def destroy
 | 
					  def destroy
 | 
				
			||||||
    if params[:id].eql?(session['warden.user.user.key'][1].to_s)
 | 
					    if params[:id].eql?(session['warden.user.user.key'][1].to_s)
 | 
				
			||||||
      flash[:error] = t('panel.cant_delete_self')
 | 
					      flash[:error] = t('admin.cant_delete_self')
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      @user = User.find(params[:id]) 
 | 
					      @user = User.find(params[:id]) 
 | 
				
			||||||
      @user.destroy
 | 
					      @user.destroy
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,25 @@ class ApplicationController < ActionController::Base
 | 
				
			||||||
  helper :all
 | 
					  helper :all
 | 
				
			||||||
  before_filter :set_locale, :set_site
 | 
					  before_filter :set_locale, :set_site
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  def get_all_app_engines
 | 
				
			||||||
 | 
					    ary = ["vender/plugins/NewBlog"]
 | 
				
			||||||
 | 
					    app_engines = ary.collect{|t|
 | 
				
			||||||
 | 
					      Rails::Engine.find t
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    app_engines.each{ |t|
 | 
				
			||||||
 | 
					     # t.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def flaten_controller
 | 
				
			||||||
 | 
					    ary=[]
 | 
				
			||||||
 | 
					    Find.find(File.join(Rails.root , 'vendor/plugins/'))  { |name|  
 | 
				
			||||||
 | 
					          require_dependency(name) if /_controller\.rb$/ =~ name
 | 
				
			||||||
 | 
					          ary << name
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    ary
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  # Find the parent for the given item
 | 
					  # Find the parent for the given item
 | 
				
			||||||
  def find_parent_item
 | 
					  def find_parent_item
 | 
				
			||||||
    @parent_item  = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil
 | 
					    @parent_item  = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil
 | 
				
			||||||
| 
						 | 
					@ -25,6 +44,8 @@ class ApplicationController < ActionController::Base
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  # Set I18n.locale
 | 
					  # Set I18n.locale
 | 
				
			||||||
  def set_locale
 | 
					  def set_locale
 | 
				
			||||||
    # update session if passed
 | 
					    # update session if passed
 | 
				
			||||||
| 
						 | 
					@ -56,4 +77,26 @@ class ApplicationController < ActionController::Base
 | 
				
			||||||
    session[:current_page] = params[:id] || @item.id rescue nil
 | 
					    session[:current_page] = params[:id] || @item.id rescue nil
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  def decrypt_data(encrypted_data, encrypted_key, encrypted_iv)
 | 
				
			||||||
 | 
					    site = Site.find(session[:site])
 | 
				
			||||||
 | 
					    if encrypted_data
 | 
				
			||||||
 | 
					      private_key = OpenSSL::PKey::RSA.new(site.private_key)
 | 
				
			||||||
 | 
					      cipher = OpenSSL::Cipher.new('aes-256-cbc')
 | 
				
			||||||
 | 
					      cipher.decrypt
 | 
				
			||||||
 | 
					      cipher.key = private_key.private_decrypt(encrypted_key)
 | 
				
			||||||
 | 
					      cipher.iv = private_key.private_decrypt(encrypted_iv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      decrypted_data = cipher.update(encrypted_data)
 | 
				
			||||||
 | 
					      decrypted_data << cipher.final
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      ''
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def get_homepage
 | 
				
			||||||
 | 
					    Item.first(:conditions => {:parent_id => nil})
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					require 'mongo'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GridfsController < ActionController::Metal
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def serve
 | 
				
			||||||
 | 
					    gridfs_path = env["PATH_INFO"].gsub("/gridfs/", "")
 | 
				
			||||||
 | 
					    begin
 | 
				
			||||||
 | 
					      gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r')
 | 
				
			||||||
 | 
					      self.response_body = gridfs_file.read
 | 
				
			||||||
 | 
					      self.content_type = gridfs_file.content_type
 | 
				
			||||||
 | 
					    rescue
 | 
				
			||||||
 | 
					      self.status = :file_not_found
 | 
				
			||||||
 | 
					      self.content_type = 'text/plain'
 | 
				
			||||||
 | 
					      self.response_body = ''
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -1,18 +0,0 @@
 | 
				
			||||||
class SitesController < ApplicationController
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  #layout 'set_up'
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  def index
 | 
					 | 
				
			||||||
    @site = Site.first
 | 
					 | 
				
			||||||
    if @site
 | 
					 | 
				
			||||||
      @title = "site"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      redirect_to :action => :new
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  def new
 | 
					 | 
				
			||||||
    @site = Site.new
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ module Admin::ItemHelper
 | 
				
			||||||
      ret << "<ul>"
 | 
					      ret << "<ul>"
 | 
				
			||||||
      ret << "<li>"
 | 
					      ret << "<li>"
 | 
				
			||||||
      ret << (link_to node.name, dest)
 | 
					      ret << (link_to node.name, dest)
 | 
				
			||||||
      ret << ' | ' << (link_to t('admin.code'), eval("edit_admin_#{node._type.downcase}_path(node, :code => true)")) if node._type.eql?('Page')
 | 
					      ret << ' | ' << (link_to t('admin.edit'), eval("edit_admin_#{node._type.downcase}_path(node)")) if node._type.eql?('Page')
 | 
				
			||||||
      ret << ' | ' << (link_to t('admin.new_page'), new_admin_page_path(:parent_id => node.id), :class => 'new_page') if node._type.eql?('Page')
 | 
					      ret << ' | ' << (link_to t('admin.new_page'), new_admin_page_path(:parent_id => node.id), :class => 'new_page') if node._type.eql?('Page')
 | 
				
			||||||
      ret << ' | ' << (link_to t('admin.new_link'), new_admin_link_path(:parent_id => node.id), :class => 'new_link') if node._type.eql?('Page')
 | 
					      ret << ' | ' << (link_to t('admin.new_link'), new_admin_link_path(:parent_id => node.id), :class => 'new_link') if node._type.eql?('Page')
 | 
				
			||||||
      ret << ' | ' << (link_to t(:delete), eval("delete_admin_#{node._type.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete')
 | 
					      ret << ' | ' << (link_to t(:delete), eval("delete_admin_#{node._type.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					module Admin::UserHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def show_user_attribute(object, key, locale = '')
 | 
				
			||||||
 | 
					    attribute = object.attribute_values.detect {|av| av.key.to_s.eql?(key.to_s) || av[locale.to_s].eql?(locale.to_s) } rescue nil
 | 
				
			||||||
 | 
					    if attribute
 | 
				
			||||||
 | 
					      if locale.to_s.blank?
 | 
				
			||||||
 | 
					        attribute['key']
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        attribute[locale.to_s]
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      ''
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					module DesignHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,108 @@
 | 
				
			||||||
 | 
					class Design
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  field :title
 | 
				
			||||||
 | 
					  field :author
 | 
				
			||||||
 | 
					  field :intro
 | 
				
			||||||
 | 
					  field :version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  has_many :pages
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  embeds_one :layout
 | 
				
			||||||
 | 
					  embeds_one :default_css, :class_name => "Stylesheet" 
 | 
				
			||||||
 | 
					  embeds_one :reset_css, :class_name => "Stylesheet"
 | 
				
			||||||
 | 
					  embeds_many :stylesheets
 | 
				
			||||||
 | 
					  embeds_many :themes
 | 
				
			||||||
 | 
					  embeds_many :javascripts
 | 
				
			||||||
 | 
					  embeds_many :images
 | 
				
			||||||
 | 
					  embeds_many :custom_images, as: :design_image
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  validates_presence_of :title
 | 
				
			||||||
 | 
					  validates_presence_of :author
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  after_save :procs_embedded_objects
 | 
				
			||||||
 | 
					  # after_destroy :del_embedded_objects
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  def javascripts=(*attrs)
 | 
				
			||||||
 | 
					    self.files = (attrs << 'javascripts')
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def themes=(*attrs)
 | 
				
			||||||
 | 
					    self.files = (attrs << 'themes')
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def images=(*attrs)
 | 
				
			||||||
 | 
					    self.files = (attrs << 'images')
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  # Update or create the attribute_model records
 | 
				
			||||||
 | 
					  def files=(attrs)
 | 
				
			||||||
 | 
					    case attrs.last
 | 
				
			||||||
 | 
					      when 'layout'
 | 
				
			||||||
 | 
					        files = self.layout.build
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        files = eval(attrs.last)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    attrs[0].each do |a|
 | 
				
			||||||
 | 
					      if a[:id].blank? && !a[:file].blank?
 | 
				
			||||||
 | 
					        files.build(:file => a[:file], :to_save => true)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        files.each do |file|
 | 
				
			||||||
 | 
					          if file.id.to_s == a[:id]
 | 
				
			||||||
 | 
					             file.to_destroy = a[:to_destroy]
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def del_embedded_objects
 | 
				
			||||||
 | 
					    [[self.layout],self.themes, self.javascripts, self.images].each do |objects|
 | 
				
			||||||
 | 
					      objects.each do |object|
 | 
				
			||||||
 | 
					        object.destroy
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					     end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def procs_embedded_objects
 | 
				
			||||||
 | 
					    [self.javascripts, self.images].each do |objects|
 | 
				
			||||||
 | 
					      objects.each do |object|
 | 
				
			||||||
 | 
					        process_object(object)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    if self.layout.to_save
 | 
				
			||||||
 | 
					      self.layout.to_save = false
 | 
				
			||||||
 | 
					      self.layout.save
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    [[self.default_css], [self.reset_css], self.themes].each do |objects|
 | 
				
			||||||
 | 
					      objects.each do |object|
 | 
				
			||||||
 | 
					        if object
 | 
				
			||||||
 | 
					          to_parse_url = object.to_save ? true : false
 | 
				
			||||||
 | 
					          process_object(object)
 | 
				
			||||||
 | 
					          object.parse_urls if to_parse_url
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def process_object(object)
 | 
				
			||||||
 | 
					    if object.to_save
 | 
				
			||||||
 | 
					      if object.file_filename.nil?
 | 
				
			||||||
 | 
					        new_object = self.send(object._type.downcase.pluralize).build(object)
 | 
				
			||||||
 | 
					        object.destroy
 | 
				
			||||||
 | 
					        new_object.to_save = false
 | 
				
			||||||
 | 
					        new_object.save
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        object.to_save = false
 | 
				
			||||||
 | 
					        object.save
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    if object.to_destroy
 | 
				
			||||||
 | 
					      object.destroy
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					class DesignFile
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  field :to_save, :type => Boolean
 | 
				
			||||||
 | 
					  field :to_destroy, :type => Boolean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					class Image < DesignFile
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  field :in_css, :type => Boolean
 | 
				
			||||||
 | 
					  field :name
 | 
				
			||||||
 | 
					  field :html_id
 | 
				
			||||||
 | 
					  field :html_class
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  embedded_in :design_image, polymorphic: true
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  mount_uploader :file, ImageUploader
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					class Javascript < DesignFile
 | 
				
			||||||
 | 
					  embedded_in :design
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					class Layout < DesignFile
 | 
				
			||||||
 | 
					  include Parser
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  attr_reader :content
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  embeds_one :menu
 | 
				
			||||||
 | 
					  embedded_in :design
 | 
				
			||||||
 | 
					  embeds_many :layout_parts
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  after_save :parse_layout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def content
 | 
				
			||||||
 | 
					    self.file.read.force_encoding("UTF-8") rescue ''
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.exist_one?
 | 
				
			||||||
 | 
					    Layout.count > 0
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def parse_layout 
 | 
				
			||||||
 | 
					    parse_layout_contents(self)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					class LayoutPart
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  field :name
 | 
				
			||||||
 | 
					  field :id_tag
 | 
				
			||||||
 | 
					  field :editable, :type => Boolean
 | 
				
			||||||
 | 
					  field :class_tag
 | 
				
			||||||
 | 
					  field :content
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  embedded_in :layout
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def editable?
 | 
				
			||||||
 | 
					    self.editable
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					class Menu
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  field :levels, :type => Integer
 | 
				
			||||||
 | 
					  field :values, :type => Hash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  embedded_in :layout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					class Stylesheet < DesignFile
 | 
				
			||||||
 | 
					  embedded_in :design
 | 
				
			||||||
 | 
					  mount_uploader :file_orig, AssetUploader
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def parse_urls
 | 
				
			||||||
 | 
					    orig_content = content = self.file.read.force_encoding("UTF-8")
 | 
				
			||||||
 | 
					    self.remove_file!
 | 
				
			||||||
 | 
					    self.remove_file_orig!
 | 
				
			||||||
 | 
					    names = []
 | 
				
			||||||
 | 
					    images = self.design.images
 | 
				
			||||||
 | 
					    content.scan(/(?<=url)(.*?)(?=\))/){
 | 
				
			||||||
 | 
					      css_name = $1.gsub(' ','').gsub('(','')
 | 
				
			||||||
 | 
					      name = File.basename(css_name).gsub(/[\\\"]/, '')
 | 
				
			||||||
 | 
					      file_name = images.detect{ |i| i.file_filename.eql?(name) }.file_url rescue nil
 | 
				
			||||||
 | 
					      names << [css_name, file_name]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    names.each do |name|
 | 
				
			||||||
 | 
					      content.gsub!(name[0], name[1]) if name[1]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    Dir.mktmpdir('f_path') { |dir|
 | 
				
			||||||
 | 
					      orig_file_name = self.file_filename
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file = File.new(dir + '/' + orig_file_name, 'w+')
 | 
				
			||||||
 | 
					      temp_file.write orig_content.force_encoding("UTF-8")
 | 
				
			||||||
 | 
					      self.file_orig = temp_file
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      temp_file = File.new(dir + '/' + orig_file_name, 'w+')
 | 
				
			||||||
 | 
					      temp_file.write content.force_encoding("UTF-8")
 | 
				
			||||||
 | 
					      self.file = temp_file
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      self.save
 | 
				
			||||||
 | 
					    }  
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					class Theme < Stylesheet
 | 
				
			||||||
 | 
					  embedded_in :design
 | 
				
			||||||
 | 
					  field :name
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  before_save :set_name
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def set_name
 | 
				
			||||||
 | 
					    self.name = File.basename(self.file_filename,".css")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -1,21 +0,0 @@
 | 
				
			||||||
class Layout
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
  include Mongoid::Document
 | 
					 | 
				
			||||||
  include Mongoid::Timestamps
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  field :name, :index => true
 | 
					 | 
				
			||||||
  field :description
 | 
					 | 
				
			||||||
  field :content
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  references_many :children, :class_name => "Item"
 | 
					 | 
				
			||||||
  has_many :layout_parts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  validates_presence_of :name
 | 
					 | 
				
			||||||
  validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/
 | 
					 | 
				
			||||||
  validates_uniqueness_of :name
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def self.exist_one?
 | 
					 | 
				
			||||||
    Layout.count > 0
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
class LayoutPart
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
  include Mongoid::Document
 | 
					 | 
				
			||||||
  include Mongoid::Timestamps
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  field :name
 | 
					 | 
				
			||||||
  field :content
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  belongs_to :layout
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					class ModuleApp
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :name_of_app
 | 
				
			||||||
 | 
					  field :version
 | 
				
			||||||
 | 
					  field :organization
 | 
				
			||||||
 | 
					  field :author
 | 
				
			||||||
 | 
					  field :intro
 | 
				
			||||||
 | 
					  field :update_info
 | 
				
			||||||
 | 
					  field :create_date
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -1,20 +1,17 @@
 | 
				
			||||||
class Page < Item
 | 
					class Page < Item
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  #include LayoutSupport
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  field :content
 | 
					  field :content
 | 
				
			||||||
  field :layout_name
 | 
					  field :theme_id, :type => BSON::ObjectId, :default => nil
 | 
				
			||||||
  field :layout_id
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  validates_presence_of :layout_name, :layout_id
 | 
					  belongs_to :design
 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  referenced_in :layout
 | 
					 | 
				
			||||||
  has_many :page_parts
 | 
					  has_many :page_parts
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  embeds_many :custom_images, as: :design_image
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  def create_parts
 | 
					  def create_parts
 | 
				
			||||||
    page_layout = self.get_layout
 | 
					    page_design = self.design
 | 
				
			||||||
    page_layout.layout_parts.each do |p|
 | 
					    page_design.layout.layout_parts.each do |p|
 | 
				
			||||||
      self.page_parts.create( :name => p.name, :i18n_variable_id => I18nVariable.create.id, :kind => 'text' ) if p['editable']
 | 
					      self.page_parts.create( :name => p.name, :i18n_variable_id => I18nVariable.create.id, :kind => 'text' ) if p.editable?
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
| 
						 | 
					@ -26,19 +23,8 @@ class Page < Item
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  def get_layout
 | 
					  def is_home?
 | 
				
			||||||
    Layout.find(layout_id)
 | 
					    self.parent ? false : true
 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  protected
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  def setup_default_value
 | 
					 | 
				
			||||||
    super
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if self.layout_id
 | 
					 | 
				
			||||||
      self.layout_name = get_layout.name
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					class PDesign < Purchase
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					class PModuleApp < Purchase
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class Purchase
 | 
				
			||||||
 | 
					  include Mongoid::Document
 | 
				
			||||||
 | 
					  include Mongoid::Timestamps
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  field :purchase_id
 | 
				
			||||||
 | 
					  field :title
 | 
				
			||||||
 | 
					  field :author
 | 
				
			||||||
 | 
					  field :intro
 | 
				
			||||||
 | 
					  field :downloaded, :type => Boolean
 | 
				
			||||||
 | 
					  field :download_date, :type => Date
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -6,4 +6,27 @@ class Site
 | 
				
			||||||
  field :in_use_locales, :type => Array
 | 
					  field :in_use_locales, :type => Array
 | 
				
			||||||
  field :valid_locales, :type => Array
 | 
					  field :valid_locales, :type => Array
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  field :roaming_id
 | 
				
			||||||
 | 
					  field :private_key, :type => Binary
 | 
				
			||||||
 | 
					  field :public_key, :type => Binary
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  field :school
 | 
				
			||||||
 | 
					  field :department
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def generate_keys
 | 
				
			||||||
 | 
					    private_key = OpenSSL::PKey::RSA.generate(2048)
 | 
				
			||||||
 | 
					    self.public_key = private_key.public_key.to_s
 | 
				
			||||||
 | 
					    self.private_key = private_key.to_s
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def registered?
 | 
				
			||||||
 | 
					    !self.roaming_id.blank?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  def up_to_date?
 | 
				
			||||||
 | 
					    p res = %x(git remote show origin)
 | 
				
			||||||
 | 
					    res = res.split('rails_3_1').pop.gsub('(', '').gsub(')','').strip rescue nil
 | 
				
			||||||
 | 
					    res.eql?('local out of date') ? false : true
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@ class AttributeModel
 | 
				
			||||||
  field :built_in, :type => Boolean, :default => false
 | 
					  field :built_in, :type => Boolean, :default => false
 | 
				
			||||||
  field :disabled, :type => Boolean, :default => false
 | 
					  field :disabled, :type => Boolean, :default => false
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  embedded_in :user_attribute_model, :inverse_of => :attribute_models
 | 
					  embedded_in :user_attribute_model
 | 
				
			||||||
  validates_uniqueness_of :key
 | 
					  validates_uniqueness_of :key
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  # Destroy the i18n_variable
 | 
					  # Destroy the i18n_variable
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,8 @@ class AttributeModel
 | 
				
			||||||
    if self.i18n_variable_id
 | 
					    if self.i18n_variable_id
 | 
				
			||||||
      self.i18n_variable.update_attributes(attr)
 | 
					      self.i18n_variable.update_attributes(attr)
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      var = I18nVariable.new(attr.merge({:key => self.key, :document_class => self.class, :parent_id => self.user_attribute_model.i18n_variable_id}))
 | 
					      # var = I18nVariable.new(attr.merge({:key => self.key, :document_class => self.class, :parent_id => self.user_attribute_model.i18n_variable_id}))
 | 
				
			||||||
 | 
					      var = I18nVariable.new(attr.merge({:key => self.key, :document_class => self.class}))
 | 
				
			||||||
      var.save
 | 
					      var.save
 | 
				
			||||||
      self.i18n_variable_id = var.id
 | 
					      self.i18n_variable_id = var.id
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||