Paypal Registration
3
Gemfile
@ -19,6 +19,7 @@ gem 'oauth2', '~> 0.8.0'
|
|||||||
gem 'carrierwave'
|
gem 'carrierwave'
|
||||||
gem 'carrierwave-imageoptimizer'
|
gem 'carrierwave-imageoptimizer'
|
||||||
gem 'mini_magick'
|
gem 'mini_magick'
|
||||||
|
gem 'carmen', :path => '../carmen/' if File.directory?('../carmen/') && RbConfig::CONFIG['target_os'] =~ /mswin|mingw|cygwin/i
|
||||||
gem 'carmen-rails'
|
gem 'carmen-rails'
|
||||||
gem 'nested_form'
|
gem 'nested_form'
|
||||||
gem 'acts_as_list'
|
gem 'acts_as_list'
|
||||||
@ -30,6 +31,7 @@ gem 'wysiwyg-rails'
|
|||||||
gem 'rails-assets-cdn'
|
gem 'rails-assets-cdn'
|
||||||
gem 'sitemap_generator'
|
gem 'sitemap_generator'
|
||||||
gem 'activerecord-session_store'
|
gem 'activerecord-session_store'
|
||||||
|
gem 'paypal-express'
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'rspec'
|
gem 'rspec'
|
||||||
@ -47,6 +49,7 @@ end
|
|||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
|
gem 'poltergeist'
|
||||||
gem 'guard-rspec'
|
gem 'guard-rspec'
|
||||||
gem 'factory_girl_rails'
|
gem 'factory_girl_rails'
|
||||||
gem 'coveralls', require: false
|
gem 'coveralls', require: false
|
||||||
|
417
Gemfile.lock
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
GIT
|
||||||
|
remote: git://github.com/josevalim/rails-footnotes.git
|
||||||
|
revision: 087914beabb56c2e9979f63eeb0183591065dde3
|
||||||
|
specs:
|
||||||
|
rails-footnotes (4.0.2)
|
||||||
|
rails (>= 3.2)
|
||||||
|
|
||||||
|
GIT
|
||||||
|
remote: git://github.com/svenfuchs/i18n-active_record.git
|
||||||
|
revision: 2d9a22b6a4e5d809782cdbfa65b14d9e47aa27fc
|
||||||
|
specs:
|
||||||
|
i18n-active_record (0.0.2)
|
||||||
|
i18n (>= 0.5.0)
|
||||||
|
|
||||||
|
PATH
|
||||||
|
remote: ../carmen/
|
||||||
|
specs:
|
||||||
|
carmen (1.0.1)
|
||||||
|
|
||||||
|
GEM
|
||||||
|
remote: http://rubygems.org/
|
||||||
|
specs:
|
||||||
|
actionmailer (4.0.0)
|
||||||
|
actionpack (= 4.0.0)
|
||||||
|
mail (~> 2.5.3)
|
||||||
|
actionpack (4.0.0)
|
||||||
|
activesupport (= 4.0.0)
|
||||||
|
builder (~> 3.1.0)
|
||||||
|
erubis (~> 2.7.0)
|
||||||
|
rack (~> 1.5.2)
|
||||||
|
rack-test (~> 0.6.2)
|
||||||
|
activemodel (4.0.0)
|
||||||
|
activesupport (= 4.0.0)
|
||||||
|
builder (~> 3.1.0)
|
||||||
|
activerecord (4.0.0)
|
||||||
|
activemodel (= 4.0.0)
|
||||||
|
activerecord-deprecated_finders (~> 1.0.2)
|
||||||
|
activesupport (= 4.0.0)
|
||||||
|
arel (~> 4.0.0)
|
||||||
|
activerecord-deprecated_finders (1.0.3)
|
||||||
|
activerecord-session_store (0.1.0)
|
||||||
|
actionpack (>= 4.0.0, < 5)
|
||||||
|
activerecord (>= 4.0.0, < 5)
|
||||||
|
railties (>= 4.0.0, < 5)
|
||||||
|
activesupport (4.0.0)
|
||||||
|
i18n (~> 0.6, >= 0.6.4)
|
||||||
|
minitest (~> 4.2)
|
||||||
|
multi_json (~> 1.3)
|
||||||
|
thread_safe (~> 0.1)
|
||||||
|
tzinfo (~> 0.3.37)
|
||||||
|
acts_as_list (0.4.0)
|
||||||
|
activerecord (>= 3.0)
|
||||||
|
addressable (2.3.6)
|
||||||
|
arel (4.0.2)
|
||||||
|
attr_required (1.0.0)
|
||||||
|
awesome_print (1.2.0)
|
||||||
|
bcrypt (3.1.7-x86-mingw32)
|
||||||
|
better_errors (1.1.0)
|
||||||
|
coderay (>= 1.0.0)
|
||||||
|
erubis (>= 2.6.6)
|
||||||
|
binding_of_caller (0.7.2)
|
||||||
|
debug_inspector (>= 0.0.1)
|
||||||
|
builder (3.1.4)
|
||||||
|
callsite (0.0.11)
|
||||||
|
capistrano (2.15.5)
|
||||||
|
highline
|
||||||
|
net-scp (>= 1.0.0)
|
||||||
|
net-sftp (>= 2.0.0)
|
||||||
|
net-ssh (>= 2.0.14)
|
||||||
|
net-ssh-gateway (>= 1.1.0)
|
||||||
|
capybara (2.4.1)
|
||||||
|
mime-types (>= 1.16)
|
||||||
|
nokogiri (>= 1.3.3)
|
||||||
|
rack (>= 1.0.0)
|
||||||
|
rack-test (>= 0.5.4)
|
||||||
|
xpath (~> 2.0)
|
||||||
|
carmen-rails (1.0.1)
|
||||||
|
carmen (~> 1.0.0)
|
||||||
|
rails
|
||||||
|
carrierwave (0.10.0)
|
||||||
|
activemodel (>= 3.2.0)
|
||||||
|
activesupport (>= 3.2.0)
|
||||||
|
json (>= 1.7)
|
||||||
|
mime-types (>= 1.16)
|
||||||
|
carrierwave-imageoptimizer (1.2.1)
|
||||||
|
carrierwave (~> 0.8)
|
||||||
|
image_optimizer (~> 1.2)
|
||||||
|
celluloid (0.15.2)
|
||||||
|
timers (~> 1.1.0)
|
||||||
|
childprocess (0.5.3)
|
||||||
|
ffi (~> 1.0, >= 1.0.11)
|
||||||
|
chunky_png (1.3.1)
|
||||||
|
cliver (0.3.2)
|
||||||
|
coderay (1.1.0)
|
||||||
|
coffee-rails (4.0.1)
|
||||||
|
coffee-script (>= 2.2.0)
|
||||||
|
railties (>= 4.0.0, < 5.0)
|
||||||
|
coffee-script (2.3.0)
|
||||||
|
coffee-script-source
|
||||||
|
execjs
|
||||||
|
coffee-script-source (1.7.1)
|
||||||
|
compass (0.12.7)
|
||||||
|
chunky_png (~> 1.2)
|
||||||
|
fssm (>= 0.2.7)
|
||||||
|
sass (~> 3.2.19)
|
||||||
|
compass-rails (1.1.7)
|
||||||
|
compass (>= 0.12.2)
|
||||||
|
sprockets (<= 2.11.0)
|
||||||
|
coveralls (0.7.0)
|
||||||
|
multi_json (~> 1.3)
|
||||||
|
rest-client
|
||||||
|
simplecov (>= 0.7)
|
||||||
|
term-ansicolor
|
||||||
|
thor
|
||||||
|
crack (0.4.2)
|
||||||
|
safe_yaml (~> 1.0.0)
|
||||||
|
cucumber (1.3.15)
|
||||||
|
builder (>= 2.1.2)
|
||||||
|
diff-lcs (>= 1.1.3)
|
||||||
|
gherkin (~> 2.12)
|
||||||
|
multi_json (>= 1.7.5, < 2.0)
|
||||||
|
multi_test (>= 0.1.1)
|
||||||
|
cucumber-rails (1.4.1)
|
||||||
|
capybara (>= 1.1.2, < 3)
|
||||||
|
cucumber (>= 1.3.8, < 2)
|
||||||
|
mime-types (~> 1.16)
|
||||||
|
nokogiri (~> 1.5)
|
||||||
|
rails (>= 3, < 5)
|
||||||
|
database_cleaner (1.3.0)
|
||||||
|
debug_inspector (0.0.2)
|
||||||
|
diff-lcs (1.2.5)
|
||||||
|
docile (1.1.5)
|
||||||
|
erubis (2.7.0)
|
||||||
|
execjs (2.2.1)
|
||||||
|
factory_girl (4.4.0)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
|
factory_girl_rails (4.4.1)
|
||||||
|
factory_girl (~> 4.4.0)
|
||||||
|
railties (>= 3.0.0)
|
||||||
|
faraday (0.9.0)
|
||||||
|
multipart-post (>= 1.2, < 3)
|
||||||
|
ffi (1.9.3-x86-mingw32)
|
||||||
|
font-awesome-rails (4.1.0.0)
|
||||||
|
railties (>= 3.2, < 5.0)
|
||||||
|
forgery (0.6.0)
|
||||||
|
formatador (0.2.5)
|
||||||
|
foundation-rails (5.3.1.0)
|
||||||
|
railties (>= 3.1.0)
|
||||||
|
sass (>= 3.2.0)
|
||||||
|
fssm (0.2.10)
|
||||||
|
geocoder (1.2.3)
|
||||||
|
gherkin (2.12.2-x86-mingw32)
|
||||||
|
multi_json (~> 1.3)
|
||||||
|
guard (2.6.1)
|
||||||
|
formatador (>= 0.2.4)
|
||||||
|
listen (~> 2.7)
|
||||||
|
lumberjack (~> 1.0)
|
||||||
|
pry (>= 0.9.12)
|
||||||
|
thor (>= 0.18.1)
|
||||||
|
guard-rspec (4.2.10)
|
||||||
|
guard (~> 2.1)
|
||||||
|
rspec (>= 2.14, < 4.0)
|
||||||
|
haml (4.0.5)
|
||||||
|
tilt
|
||||||
|
haml-rails (0.5.1)
|
||||||
|
actionpack (~> 4.0.0)
|
||||||
|
activesupport (~> 4.0.0)
|
||||||
|
haml (>= 3.1, < 5.0)
|
||||||
|
railties (~> 4.0.0)
|
||||||
|
highline (1.6.21)
|
||||||
|
hike (1.2.3)
|
||||||
|
httpauth (0.2.1)
|
||||||
|
i18n (0.6.11)
|
||||||
|
image_optimizer (1.2.1)
|
||||||
|
jquery-rails (3.1.1)
|
||||||
|
railties (>= 3.0, < 5.0)
|
||||||
|
thor (>= 0.14, < 2.0)
|
||||||
|
jquery-ui-rails (5.0.0)
|
||||||
|
railties (>= 3.2.16)
|
||||||
|
json (1.8.1)
|
||||||
|
jwt (0.1.13)
|
||||||
|
multi_json (>= 1.5)
|
||||||
|
launchy (2.4.2)
|
||||||
|
addressable (~> 2.3)
|
||||||
|
listen (2.7.9)
|
||||||
|
celluloid (>= 0.15.2)
|
||||||
|
rb-fsevent (>= 0.9.3)
|
||||||
|
rb-inotify (>= 0.9)
|
||||||
|
lumberjack (1.0.9)
|
||||||
|
mail (2.5.4)
|
||||||
|
mime-types (~> 1.16)
|
||||||
|
treetop (~> 1.4.8)
|
||||||
|
meta_request (0.3.3)
|
||||||
|
callsite (~> 0.0, >= 0.0.11)
|
||||||
|
rack-contrib (~> 1.1)
|
||||||
|
railties (>= 3.0.0, < 5.0.0)
|
||||||
|
method_source (0.8.2)
|
||||||
|
mime-types (1.25.1)
|
||||||
|
mini_magick (3.7.0)
|
||||||
|
subexec (~> 0.2.1)
|
||||||
|
mini_portile (0.6.0)
|
||||||
|
minitest (4.7.5)
|
||||||
|
multi_json (1.10.1)
|
||||||
|
multi_test (0.1.1)
|
||||||
|
multipart-post (2.0.0)
|
||||||
|
nested_form (0.3.2)
|
||||||
|
net-scp (1.2.1)
|
||||||
|
net-ssh (>= 2.6.5)
|
||||||
|
net-sftp (2.1.2)
|
||||||
|
net-ssh (>= 2.6.5)
|
||||||
|
net-ssh (2.9.1)
|
||||||
|
net-ssh-gateway (1.2.0)
|
||||||
|
net-ssh (>= 2.6.5)
|
||||||
|
netrc (0.7.7)
|
||||||
|
nokogiri (1.6.2.1-x86-mingw32)
|
||||||
|
mini_portile (= 0.6.0)
|
||||||
|
oauth (0.4.7)
|
||||||
|
oauth2 (0.8.1)
|
||||||
|
faraday (~> 0.8)
|
||||||
|
httpauth (~> 0.1)
|
||||||
|
jwt (~> 0.1.4)
|
||||||
|
multi_json (~> 1.0)
|
||||||
|
rack (~> 1.2)
|
||||||
|
paper_trail (3.0.3)
|
||||||
|
activerecord (>= 3.0, < 5.0)
|
||||||
|
activesupport (>= 3.0, < 5.0)
|
||||||
|
paypal-express (0.5.5)
|
||||||
|
activesupport (>= 2.3)
|
||||||
|
attr_required (>= 0.0.5)
|
||||||
|
restclient_with_cert
|
||||||
|
pg (0.17.1-x86-mingw32)
|
||||||
|
poltergeist (1.5.1)
|
||||||
|
capybara (~> 2.1)
|
||||||
|
cliver (~> 0.3.1)
|
||||||
|
multi_json (~> 1.0)
|
||||||
|
websocket-driver (>= 0.2.0)
|
||||||
|
polyglot (0.3.5)
|
||||||
|
pry (0.10.0-x86-mingw32)
|
||||||
|
coderay (~> 1.1.0)
|
||||||
|
method_source (~> 0.8.1)
|
||||||
|
slop (~> 3.4)
|
||||||
|
win32console (~> 1.3)
|
||||||
|
rack (1.5.2)
|
||||||
|
rack-contrib (1.1.0)
|
||||||
|
rack (>= 0.9.1)
|
||||||
|
rack-test (0.6.2)
|
||||||
|
rack (>= 1.0)
|
||||||
|
rails (4.0.0)
|
||||||
|
actionmailer (= 4.0.0)
|
||||||
|
actionpack (= 4.0.0)
|
||||||
|
activerecord (= 4.0.0)
|
||||||
|
activesupport (= 4.0.0)
|
||||||
|
bundler (>= 1.3.0, < 2.0)
|
||||||
|
railties (= 4.0.0)
|
||||||
|
sprockets-rails (~> 2.0.0)
|
||||||
|
rails-assets-cdn (0.1.0)
|
||||||
|
rails
|
||||||
|
rails_12factor (0.0.2)
|
||||||
|
rails_serve_static_assets
|
||||||
|
rails_stdout_logging
|
||||||
|
rails_serve_static_assets (0.0.2)
|
||||||
|
rails_stdout_logging (0.0.3)
|
||||||
|
railties (4.0.0)
|
||||||
|
actionpack (= 4.0.0)
|
||||||
|
activesupport (= 4.0.0)
|
||||||
|
rake (>= 0.8.7)
|
||||||
|
thor (>= 0.18.1, < 2.0)
|
||||||
|
rake (10.3.2)
|
||||||
|
rb-fsevent (0.9.4)
|
||||||
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
rest-client (1.7.2-x86-mingw32)
|
||||||
|
ffi (~> 1.9)
|
||||||
|
mime-types (>= 1.16, < 3.0)
|
||||||
|
netrc (~> 0.7)
|
||||||
|
restclient_with_cert (0.0.8)
|
||||||
|
rest-client (>= 1.6)
|
||||||
|
rspec (3.0.0)
|
||||||
|
rspec-core (~> 3.0.0)
|
||||||
|
rspec-expectations (~> 3.0.0)
|
||||||
|
rspec-mocks (~> 3.0.0)
|
||||||
|
rspec-core (3.0.2)
|
||||||
|
rspec-support (~> 3.0.0)
|
||||||
|
rspec-expectations (3.0.2)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.0.0)
|
||||||
|
rspec-mocks (3.0.2)
|
||||||
|
rspec-support (~> 3.0.0)
|
||||||
|
rspec-rails (3.0.1)
|
||||||
|
actionpack (>= 3.0)
|
||||||
|
activesupport (>= 3.0)
|
||||||
|
railties (>= 3.0)
|
||||||
|
rspec-core (~> 3.0.0)
|
||||||
|
rspec-expectations (~> 3.0.0)
|
||||||
|
rspec-mocks (~> 3.0.0)
|
||||||
|
rspec-support (~> 3.0.0)
|
||||||
|
rspec-support (3.0.2)
|
||||||
|
rubyzip (1.1.6)
|
||||||
|
rvm-capistrano (1.5.3)
|
||||||
|
capistrano (~> 2.15.4)
|
||||||
|
safe_yaml (1.0.3)
|
||||||
|
sass (3.2.19)
|
||||||
|
sass-rails (4.0.3)
|
||||||
|
railties (>= 4.0.0, < 5.0)
|
||||||
|
sass (~> 3.2.0)
|
||||||
|
sprockets (~> 2.8, <= 2.11.0)
|
||||||
|
sprockets-rails (~> 2.0)
|
||||||
|
selenium-webdriver (2.42.0)
|
||||||
|
childprocess (>= 0.5.0)
|
||||||
|
multi_json (~> 1.0)
|
||||||
|
rubyzip (~> 1.0)
|
||||||
|
websocket (~> 1.0.4)
|
||||||
|
simplecov (0.9.0)
|
||||||
|
docile (~> 1.1.0)
|
||||||
|
multi_json
|
||||||
|
simplecov-html (~> 0.8.0)
|
||||||
|
simplecov-html (0.8.0)
|
||||||
|
sitemap_generator (5.0.4)
|
||||||
|
builder
|
||||||
|
slop (3.6.0)
|
||||||
|
sorcery (0.8.6)
|
||||||
|
bcrypt (~> 3.1)
|
||||||
|
oauth (~> 0.4, >= 0.4.4)
|
||||||
|
oauth2 (>= 0.8.0, < 1.0.0)
|
||||||
|
sprockets (2.11.0)
|
||||||
|
hike (~> 1.2)
|
||||||
|
multi_json (~> 1.0)
|
||||||
|
rack (~> 1.0)
|
||||||
|
tilt (~> 1.1, != 1.3.0)
|
||||||
|
sprockets-rails (2.0.1)
|
||||||
|
actionpack (>= 3.0)
|
||||||
|
activesupport (>= 3.0)
|
||||||
|
sprockets (~> 2.8)
|
||||||
|
subexec (0.2.3)
|
||||||
|
term-ansicolor (1.3.0)
|
||||||
|
tins (~> 1.0)
|
||||||
|
thor (0.19.1)
|
||||||
|
thread_safe (0.3.4)
|
||||||
|
tilt (1.4.1)
|
||||||
|
timers (1.1.0)
|
||||||
|
tins (1.3.0)
|
||||||
|
treetop (1.4.15)
|
||||||
|
polyglot
|
||||||
|
polyglot (>= 0.3.1)
|
||||||
|
tzinfo (0.3.40)
|
||||||
|
uglifier (2.5.3)
|
||||||
|
execjs (>= 0.3.0)
|
||||||
|
json (>= 1.8.0)
|
||||||
|
wdm (0.1.0)
|
||||||
|
webmock (1.18.0)
|
||||||
|
addressable (>= 2.3.6)
|
||||||
|
crack (>= 0.3.2)
|
||||||
|
websocket (1.0.7)
|
||||||
|
websocket-driver (0.3.4)
|
||||||
|
win32console (1.3.2-x86-mingw32)
|
||||||
|
wysiwyg-rails (1.1.6)
|
||||||
|
font-awesome-rails (= 4.1.0.0)
|
||||||
|
railties (>= 3.2, < 5.0)
|
||||||
|
xpath (2.0.0)
|
||||||
|
nokogiri (~> 1.3)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
x86-mingw32
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
activerecord-session_store
|
||||||
|
acts_as_list
|
||||||
|
awesome_print
|
||||||
|
better_errors
|
||||||
|
binding_of_caller
|
||||||
|
capistrano
|
||||||
|
capybara
|
||||||
|
carmen!
|
||||||
|
carmen-rails
|
||||||
|
carrierwave
|
||||||
|
carrierwave-imageoptimizer
|
||||||
|
coffee-rails (~> 4.0.0)
|
||||||
|
compass-rails (~> 1.1.3)
|
||||||
|
coveralls
|
||||||
|
cucumber-rails
|
||||||
|
database_cleaner
|
||||||
|
factory_girl_rails
|
||||||
|
font-awesome-rails
|
||||||
|
forgery
|
||||||
|
foundation-rails
|
||||||
|
geocoder
|
||||||
|
guard-rspec
|
||||||
|
haml
|
||||||
|
haml-rails
|
||||||
|
i18n-active_record!
|
||||||
|
jquery-rails
|
||||||
|
jquery-ui-rails
|
||||||
|
launchy
|
||||||
|
meta_request
|
||||||
|
mini_magick
|
||||||
|
nested_form
|
||||||
|
oauth2 (~> 0.8.0)
|
||||||
|
paper_trail
|
||||||
|
paypal-express
|
||||||
|
pg
|
||||||
|
poltergeist
|
||||||
|
rails (= 4.0.0)
|
||||||
|
rails-assets-cdn
|
||||||
|
rails-footnotes!
|
||||||
|
rails_12factor
|
||||||
|
rspec
|
||||||
|
rspec-rails
|
||||||
|
rvm-capistrano
|
||||||
|
sass-rails (~> 4.0.0)
|
||||||
|
selenium-webdriver
|
||||||
|
simplecov
|
||||||
|
sitemap_generator
|
||||||
|
sorcery (>= 0.8.1)
|
||||||
|
uglifier (>= 1.3.0)
|
||||||
|
wdm (>= 0.1.0)
|
||||||
|
webmock
|
||||||
|
wysiwyg-rails
|
BIN
app/assets/images/bblogo.png
Normal file
After Width: | Height: | Size: 10 KiB |
@ -1,4 +1,43 @@
|
|||||||
table#translations {
|
table#translations {
|
||||||
|
table-layout: fixed;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
.key, .pages {
|
||||||
|
width: 25%;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pages {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
ul {
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
ul {
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
td.value {
|
td.value {
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
@ -396,6 +435,48 @@ ul.tags,
|
|||||||
outline: none !important;
|
outline: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#register-dlg {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: transparent;
|
||||||
|
visibility: hidden;
|
||||||
|
z-index: 100;
|
||||||
|
@include text-shadow(none);
|
||||||
|
@include transition(background-color 250ms ease-in-out 125ms, visibility 0 linear 250ms);
|
||||||
|
|
||||||
|
form {
|
||||||
|
position: fixed;
|
||||||
|
min-width: 30em;
|
||||||
|
left: 110%;
|
||||||
|
right: 0;
|
||||||
|
max-width: 30em;
|
||||||
|
bottom: 0;
|
||||||
|
margin: auto;
|
||||||
|
top: 0;
|
||||||
|
background-color: $white;
|
||||||
|
height: 10em;
|
||||||
|
padding: 1em;
|
||||||
|
z-index: 101;
|
||||||
|
@include transform(skewX(-30deg));
|
||||||
|
@include transition(all 250ms ease-in-out 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.open {
|
||||||
|
background-color: rgba($primary-color, 0.8);
|
||||||
|
visibility: visible;
|
||||||
|
@include transition(background-color 250ms ease-in-out);
|
||||||
|
|
||||||
|
form {
|
||||||
|
left: 0;
|
||||||
|
@include transform(skewX(0));
|
||||||
|
@include transition(all 250ms ease-in-out 125ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@include breakpoint(medium) {
|
@include breakpoint(medium) {
|
||||||
.organizations-index,
|
.organizations-index,
|
||||||
.conferences-index {
|
.conferences-index {
|
||||||
|
@ -85,7 +85,7 @@ body {
|
|||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
width: auto;
|
width: 100%;
|
||||||
height: 90%;//2em;
|
height: 90%;//2em;
|
||||||
fill: $primary-color;
|
fill: $primary-color;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -236,6 +236,11 @@ body {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
text-align: center;
|
||||||
|
padding: 2em 0;
|
||||||
|
}
|
||||||
|
|
||||||
@include breakpoint(medium) {
|
@include breakpoint(medium) {
|
||||||
+ #content {
|
+ #content {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
@ -333,23 +338,33 @@ main {
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-bottom > div {
|
//.align-bottom > div {
|
||||||
margin-bottom: 3em;
|
//margin-bottom: 3em;
|
||||||
}
|
//}
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
width: 75%;
|
width: 75%;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
border-color: inherit;
|
border-color: inherit;
|
||||||
background-color: rgba(darken($article-color, 0), 0.33);
|
background-color: rgba(darken($primary-color, 0), 0.33);
|
||||||
padding: 0.75em 1em;
|
padding: 0.75em 1em;
|
||||||
|
white-space: nowrap;
|
||||||
@include text-shadow(none);
|
@include text-shadow(none);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $article-color;
|
background-color: $primary-color;
|
||||||
color: $white;
|
color: $white;
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&#register-now {
|
||||||
|
background-color: rgba(darken($warning-color, 0), 0.33);
|
||||||
|
margin-top: 0;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.organizations & {
|
.organizations & {
|
||||||
@ -433,7 +448,8 @@ main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-style-emphasize-banner & {
|
.page-style-emphasize-banner &,
|
||||||
|
.conferences & {
|
||||||
figure img {
|
figure img {
|
||||||
box-shadow: 0 0 2em $black;
|
box-shadow: 0 0 2em $black;
|
||||||
}
|
}
|
||||||
@ -495,6 +511,10 @@ main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-style-article.small-banner & {
|
||||||
|
min-height: 10em;
|
||||||
|
}
|
||||||
|
|
||||||
.page-style-list & {
|
.page-style-list & {
|
||||||
min-height: 10em;
|
min-height: 10em;
|
||||||
height: 30em;
|
height: 30em;
|
||||||
@ -505,6 +525,10 @@ main {
|
|||||||
font-size: 6vw;
|
font-size: 6vw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.row .align-bottom.buttons {
|
||||||
|
height: 14em;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@include breakpoint(large) {
|
@include breakpoint(large) {
|
||||||
@ -526,6 +550,10 @@ main {
|
|||||||
border-bottom-left-radius: inherit;
|
border-bottom-left-radius: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
//margin-top: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
.page-style-list & {
|
.page-style-list & {
|
||||||
height: 15em;
|
height: 15em;
|
||||||
height: 15vw;
|
height: 15vw;
|
||||||
@ -560,6 +588,10 @@ main {
|
|||||||
|
|
||||||
.row .align-bottom {
|
.row .align-bottom {
|
||||||
height: auto;
|
height: auto;
|
||||||
|
|
||||||
|
&.buttons {
|
||||||
|
height: 10em;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -623,13 +655,15 @@ main {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
right: 0.25em;
|
right: 0.25em;
|
||||||
margin: 0.25em 0.25em 0 0;
|
//margin: 0.25em 0.25em 0 0;
|
||||||
|
margin: -1em 0.25em 0 0;
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
@include opacity(0.5);
|
@include opacity(0.5);
|
||||||
clear: right;
|
clear: right;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
mix-blend-mode: luminosity;
|
||||||
|
|
||||||
> span {
|
> span {
|
||||||
display: none;
|
display: none;
|
||||||
@ -1043,3 +1077,7 @@ table {
|
|||||||
.clearfix {
|
.clearfix {
|
||||||
@include clearfix;
|
@include clearfix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
article.row {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
@ -14,9 +14,32 @@ class ApplicationController < ActionController::Base
|
|||||||
|
|
||||||
before_filter :capture_page_info
|
before_filter :capture_page_info
|
||||||
|
|
||||||
|
@@test_host
|
||||||
|
@@test_location
|
||||||
|
|
||||||
def capture_page_info
|
def capture_page_info
|
||||||
init_vars
|
init_vars
|
||||||
$page_info = {:path => request.env['PATH_INFO'], :controller => params['controller'], :action => params['action']}
|
$page_info = {:path => request.env['PATH_INFO'], :controller => params['controller'], :action => params['action']}
|
||||||
|
ActionMailer::Base.default_url_options = {:host => "#{request.protocol}#{request.host_with_port}"}
|
||||||
|
lang = I18n.backend.set_locale (is_test? && @@test_host.present? ? @@test_host : request.host)
|
||||||
|
if lang.blank?
|
||||||
|
do_404
|
||||||
|
elsif lang != true
|
||||||
|
@lang = lang
|
||||||
|
render 'pages/language_not_enabled', status: 404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.set_host(host)
|
||||||
|
@@test_host = host
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.set_location(location)
|
||||||
|
@@test_location = location#.nil? nil : Geocoder.search(location)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.get_location()
|
||||||
|
@@test_location
|
||||||
end
|
end
|
||||||
|
|
||||||
def do_404
|
def do_404
|
||||||
|
@ -6,7 +6,6 @@ class ConferencesController < ApplicationController
|
|||||||
|
|
||||||
# GET /conferences
|
# GET /conferences
|
||||||
def index
|
def index
|
||||||
#puts params
|
|
||||||
@conference_type = nil
|
@conference_type = nil
|
||||||
if params['conference_type']
|
if params['conference_type']
|
||||||
@conference_type = ConferenceType.find_by!(:slug => params['conference_type'])
|
@conference_type = ConferenceType.find_by!(:slug => params['conference_type'])
|
||||||
@ -111,50 +110,72 @@ class ConferencesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def register_submit
|
def register_submit
|
||||||
#set_conference
|
|
||||||
next_step = nil
|
next_step = nil
|
||||||
if !session[:registration]
|
if !session[:registration]
|
||||||
session[:registration] = Hash.new
|
session[:registration] = Hash.new
|
||||||
session[:registration][:path] = Array.new
|
session[:registration][:path] = Array.new
|
||||||
end
|
end
|
||||||
case params['step']
|
|
||||||
|
case session[:registration_step] || params['step']
|
||||||
|
when 'confirm'
|
||||||
|
if session[:registration][:is_participant]
|
||||||
|
registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
if registration.completed
|
||||||
|
complete_registration
|
||||||
|
next_step = 'thanks'
|
||||||
|
else
|
||||||
|
next_step = 'organizations'
|
||||||
|
end
|
||||||
|
else
|
||||||
|
complete_registration
|
||||||
|
next_step = 'thanks'
|
||||||
|
end
|
||||||
when 'register'
|
when 'register'
|
||||||
session[:registration][:email] = params[:email]
|
session[:registration][:email] = params[:email]
|
||||||
user = User.find_by(:email => params[:email])
|
registration = ConferenceRegistration.find_by(:email => params[:email])
|
||||||
#registration = ConferenceRegistration.new(:conference_id => @conference.id, :is_attending => 'yes', :is_participant => params[:is_participant], :is_volunteer => params[:is_volunteer])
|
if !registration.nil?
|
||||||
session[:registration][:user] = Hash.new
|
session[:registration] = YAML.load(registration.data)
|
||||||
session[:registration][:organizations] = Array.new
|
session[:registration][:registration_id] = registration.id
|
||||||
session[:registration][:user][:id] = user ? user.id : nil
|
next_step = (registration.completed.blank? && registration.is_participant.present? ? 'organizations' : 'thanks')
|
||||||
if user
|
else
|
||||||
user.organizations.each { |org| session[:registration][:organizations] << org.id }
|
if !session[:registration][:user] || !session[:registration][:user][:firstname]
|
||||||
|
user = User.find_by(:email => params[:email])
|
||||||
|
session[:registration][:user] = Hash.new
|
||||||
|
session[:registration][:user][:id] = user ? user.id : nil
|
||||||
|
session[:registration][:user][:firstname] = user ? (user.firstname || user.username) : nil
|
||||||
|
session[:registration][:user][:lastname] = user ? user.lastname : nil
|
||||||
|
session[:registration][:user][:username] = user ? user.username : nil
|
||||||
|
end
|
||||||
|
next_step = 'primary'
|
||||||
end
|
end
|
||||||
session[:registration][:user][:firstname] = user ? (user.firstname || user.username) : nil
|
|
||||||
session[:registration][:user][:lastname] = user ? user.lastname : nil
|
|
||||||
session[:registration][:user][:username] = user ? user.username : nil
|
|
||||||
next_step = 'primary'
|
|
||||||
when 'primary'
|
when 'primary'
|
||||||
if !params[:firstname] || !params[:lastname]
|
if params[:firstname].blank? || params[:lastname].blank?
|
||||||
error = _'registration.register.no_name_error','Oh, c\'mon, please tell us your name. We promise not to share it with anyone, we just don\'t want to get you mixed up with someone else.'
|
error = _'registration.register.no_name_error',"Oh, c'mon, please tell us your name. We promise not to share it with anyone, we just don't want to get you mixed up with someone else."
|
||||||
|
end
|
||||||
|
if (params[:is_volunteer] || 'false').to_sym != :true && (params[:is_participant] || 'false').to_sym != :true
|
||||||
|
error ||= _'registration.register.no_role_error',"Please let us know if you're attending the conference or volunteering (or both)"
|
||||||
end
|
end
|
||||||
session[:registration][:user][:firstname] = params[:firstname]
|
session[:registration][:user][:firstname] = params[:firstname]
|
||||||
session[:registration][:user][:firstname] = params[:lastname]
|
session[:registration][:user][:lastname] = params[:lastname]
|
||||||
session[:registration][:is_volunteer] = params[:is_volunteer]
|
session[:registration][:is_volunteer] = (params[:is_volunteer] || 'false').to_sym == :true
|
||||||
session[:registration][:is_participant] = params[:is_participant]
|
session[:registration][:is_participant] = (params[:is_participant] || 'false').to_sym == :true
|
||||||
if !session[:registration][:user][:id]
|
if !session[:registration][:user][:id]
|
||||||
session[:registration][:user][:username] = params[:username] || (params[:firstname] + ' ' + params[:lastname])
|
session[:registration][:user][:username] = !error && params[:username].blank? ? (params[:firstname] + ' ' + params[:lastname]) : params[:username]
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:is_volunteer]
|
if session[:registration][:is_volunteer]
|
||||||
next_step = 'volunteer_questions'
|
next_step = 'volunteer_questions'
|
||||||
elsif params[:is_participant]
|
elsif session[:registration][:is_participant]
|
||||||
next_step = 'organizations'
|
next_step = 'questions'
|
||||||
else
|
|
||||||
error = _'registration.register.no_role_error',"Please let us know if you're attending the conference or volunteering (or both)"
|
|
||||||
end
|
end
|
||||||
when 'organizations'
|
when 'organizations'
|
||||||
session[:registration][:organizations] = Array.new
|
@registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
if params[:org].length > 0
|
if (params[:org] && params[:org].length > 0) || params[:add_new_org]
|
||||||
params[:org].each { |org| session[:registration][:organizations] << org }
|
session[:registration][:organizations] = Array.new
|
||||||
|
if params[:org]
|
||||||
|
params[:org].each { |org| session[:registration][:organizations] << (org.is_a?(Array) ? org.first : org).to_i }
|
||||||
|
end
|
||||||
|
update_registration_data
|
||||||
|
|
||||||
if params[:add_new_org]
|
if params[:add_new_org]
|
||||||
session[:registration][:new_organization] ||= Array.new
|
session[:registration][:new_organization] ||= Array.new
|
||||||
@ -168,28 +189,43 @@ class ConferencesController < ApplicationController
|
|||||||
end
|
end
|
||||||
next_step = 'new_organization'
|
next_step = 'new_organization'
|
||||||
else
|
else
|
||||||
next_step = 'questions'
|
if session[:registration][:is_workshop_host]
|
||||||
|
next_step = 'new_workshop'
|
||||||
|
session[:registration][:workshop] ||= Array.new
|
||||||
|
session[:registration][:workshop][0] ||= Hash.new
|
||||||
|
session[:registration][:workshop_index] = 0
|
||||||
|
else
|
||||||
|
complete_registration
|
||||||
|
next_step = 'thanks'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elsif params[:no_org]
|
||||||
|
if !session[:registration][:is_workshop_host]
|
||||||
|
next_step = 'new_workshop'
|
||||||
|
session[:registration][:workshop] ||= Array.new
|
||||||
|
session[:registration][:workshop][0] ||= Hash.new
|
||||||
|
session[:registration][:workshop_index] = 0
|
||||||
|
else
|
||||||
|
complete_registration
|
||||||
|
next_step = 'thanks'
|
||||||
end
|
end
|
||||||
elsif params[:add_new_org]
|
|
||||||
session[:registration][:questions] ||= Hash.new
|
|
||||||
next_step = 'questions'
|
|
||||||
else
|
else
|
||||||
error = _'registration.register.no_organization_error',"Please select an organization or enter a new one"
|
error = _'registration.register.no_organization_error',"Please select an organization or enter a new one"
|
||||||
end
|
end
|
||||||
when 'new_organization'
|
when 'new_organization'
|
||||||
if !params[:city]
|
if params[:name].blank?
|
||||||
message = _'register.new_organization.no_city_error','Please enter your organization\'s city'
|
error = _'register.new_organization.no_name_error',"Please tell us your organization's name"
|
||||||
end
|
end
|
||||||
if !params[:street]
|
if params[:organization_email].blank?
|
||||||
message = _'register.new_organization.no_street_error','Please enter your organization\'s street address'
|
error ||= _'register.new_organization.no_email_error',"Please tell us your organization's email address. We need it so that we can send out invitations for upcoming conferences. No spam, we promise, and you'll be able to edit your preferences before we start ending out email."
|
||||||
end
|
|
||||||
if !params[:organization_email]
|
|
||||||
message = _'register.new_organization.no_email_error','Please tell us your organization\'s email address. We need it so that we can send out invitaions for upcoming conferences. No spam, we promise, and you\'ll be able to edit your preferences before we start ending out email.'
|
|
||||||
elsif params[:organization_email].strip.casecmp(session[:registration][:email].strip)
|
elsif params[:organization_email].strip.casecmp(session[:registration][:email].strip)
|
||||||
message = _'register.new_organization.same_email_as_attendee_error','This email needs to be different than your own personal email, we need to keep in touch with your organization even if you\'re gone in years to come.'
|
error ||= _'register.new_organization.same_email_as_attendee_error',"This email needs to be different than your own personal email, we need to keep in touch with your organization even if you're gone in years to come."
|
||||||
end
|
end
|
||||||
if !params[:name]
|
if params[:street].blank?
|
||||||
message = _'register.new_organization.no_name_error','Please tell us your organization\'s name'
|
error ||= _'register.new_organization.no_street_error','Please enter your organization\'s street address'
|
||||||
|
end
|
||||||
|
if params[:city].blank?
|
||||||
|
error ||= _'register.new_organization.no_city_error','Please enter your organization\'s city'
|
||||||
end
|
end
|
||||||
i = params[:new_org_index].to_i
|
i = params[:new_org_index].to_i
|
||||||
session[:registration][:new_organization][i][:country] = params[:organization_country]
|
session[:registration][:new_organization][i][:country] = params[:organization_country]
|
||||||
@ -200,23 +236,26 @@ class ConferencesController < ApplicationController
|
|||||||
session[:registration][:new_organization][i][:email] = params[:organization_email]
|
session[:registration][:new_organization][i][:email] = params[:organization_email]
|
||||||
session[:registration][:new_organization][i][:name] = params[:organization_name]
|
session[:registration][:new_organization][i][:name] = params[:organization_name]
|
||||||
|
|
||||||
if params[:organization_logo]
|
if params[:logo] && !session[:registration][:new_organization][i][:saved]
|
||||||
if session[:registration][:new_organization][i][:organization_logo]
|
begin
|
||||||
FileUtils.rm session[:registration][:new_organization][i][:organization_logo]
|
if session[:registration][:new_organization][i][:logo]
|
||||||
end
|
FileUtils.rm session[:registration][:new_organization][i][:logo]
|
||||||
|
end
|
||||||
|
rescue; end
|
||||||
base_dir = File.join("public", "registration_data")
|
base_dir = File.join("public", "registration_data")
|
||||||
FileUtils.mkdir_p(base_dir) unless File.directory?(base_dir)
|
FileUtils.mkdir_p(base_dir) unless File.directory?(base_dir)
|
||||||
hash_dir = rand(36**16).to_s(36)
|
hash_dir = rand_hash
|
||||||
dir = File.join(base_dir, hash_dir)
|
dir = File.join(base_dir, hash_dir)
|
||||||
while File.directory?(dir)
|
while File.directory?(dir)
|
||||||
hash_dir = rand(36**16).to_s(36)
|
hash_dir = rand_hash
|
||||||
dir = File.join(base_dir, hash_dir)
|
dir = File.join(base_dir, hash_dir)
|
||||||
end
|
end
|
||||||
FileUtils.mkdir_p(dir)
|
FileUtils.mkdir_p(dir)
|
||||||
session[:registration][:new_organization][i][:organization_logo] = File.join("registration_data", hash_dir, params[:organization_logo].original_filename)
|
session[:registration][:new_organization][i][:logo] = File.join("registration_data", hash_dir, params[:logo].original_filename)
|
||||||
FileUtils.cp params[:organization_logo].tempfile.path, File.join("public", session[:registration][:new_organization][i][:organization_logo])
|
FileUtils.cp params[:logo].tempfile.path, File.join("public", session[:registration][:new_organization][i][:logo])
|
||||||
end
|
end
|
||||||
if params[:add_another_org] && params[:add_another_org].to_sym == :on
|
update_registration_data
|
||||||
|
if params[:add_another_org] && params[:add_another_org].to_sym == :true
|
||||||
next_step = 'new_organization'
|
next_step = 'new_organization'
|
||||||
if params[:previous]
|
if params[:previous]
|
||||||
session[:registration][:new_org_index] = [0, i - 1].max
|
session[:registration][:new_org_index] = [0, i - 1].max
|
||||||
@ -233,25 +272,37 @@ class ConferencesController < ApplicationController
|
|||||||
if session[:registration][:new_organization][i + 1]
|
if session[:registration][:new_organization][i + 1]
|
||||||
session[:registration][:new_organization] = session[:registration][:new_organization].first(i + 1)
|
session[:registration][:new_organization] = session[:registration][:new_organization].first(i + 1)
|
||||||
end
|
end
|
||||||
next_step = 'questions'
|
if session[:registration][:is_workshop_host]
|
||||||
|
next_step = 'new_workshop'
|
||||||
|
session[:registration][:workshop] ||= Array.new
|
||||||
|
session[:registration][:workshop][0] ||= Hash.new
|
||||||
|
session[:registration][:workshop_index] = 0
|
||||||
|
else
|
||||||
|
complete_registration
|
||||||
|
next_step = 'thanks'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
when 'questions'
|
when 'questions'
|
||||||
session[:registration][:questions] = params[:questions].deep_symbolize_keys
|
session[:registration][:questions] = params[:questions].deep_symbolize_keys
|
||||||
session[:registration][:is_workshop_host] = params[:is_workshop_host].to_i
|
session[:registration][:is_workshop_host] = !params[:is_workshop_host].to_i.zero?
|
||||||
if !params[:is_workshop_host].to_i.zero?
|
next_step = 'organizations'
|
||||||
next_step = 'new_workshop'
|
if params[:submit] || params[:next]
|
||||||
session[:registration][:workshop] ||= Array.new
|
if !session[:registration][:organizations]
|
||||||
session[:registration][:workshop][0] ||= Hash.new
|
user = User.find_by(:email => session[:registration][:email])
|
||||||
session[:registration][:workshop_index] = 0
|
session[:registration][:organizations] = Array.new
|
||||||
else
|
if user
|
||||||
next_step = 'submit'
|
user.organizations.each { |org| session[:registration][:organizations] << org.id }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
create_registration
|
||||||
end
|
end
|
||||||
when 'volunteer_questions'
|
when 'volunteer_questions'
|
||||||
session[:registration][:volunteer_questions] = params[:volunteer_questions].deep_symbolize_keys
|
session[:registration][:volunteer_questions] = params[:volunteer_questions].deep_symbolize_keys
|
||||||
if session[:registration][:is_participant]
|
if session[:registration][:is_participant]
|
||||||
next_step = 'organizations'
|
next_step = 'questions'
|
||||||
else
|
else
|
||||||
next_step = 'submit'
|
create_registration
|
||||||
|
next_step = 'thanks'
|
||||||
end
|
end
|
||||||
when 'new_workshop'
|
when 'new_workshop'
|
||||||
i = params[:workshop_index].to_i
|
i = params[:workshop_index].to_i
|
||||||
@ -259,15 +310,18 @@ class ConferencesController < ApplicationController
|
|||||||
session[:registration][:workshop][i][:info] = params[:workshop_info]
|
session[:registration][:workshop][i][:info] = params[:workshop_info]
|
||||||
session[:registration][:workshop][i][:stream] = params[:workshop_stream]
|
session[:registration][:workshop][i][:stream] = params[:workshop_stream]
|
||||||
session[:registration][:workshop][i][:presentation_style] = params[:workshop_presentation_style]
|
session[:registration][:workshop][i][:presentation_style] = params[:workshop_presentation_style]
|
||||||
|
session[:registration][:workshop][i][:notes] = params[:workshop_notes]
|
||||||
|
|
||||||
if !params[:workshop_info]
|
if params[:workshop_title].blank?
|
||||||
error = _'registration.register.no_workshop_info_error','Please describe your workshop as best as you can to give other participants an idea of what to expect'
|
|
||||||
end
|
|
||||||
|
|
||||||
if !params[:workshop_title]
|
|
||||||
error = _'registration.register.no_workshop_title_error','Please give your workshop a title'
|
error = _'registration.register.no_workshop_title_error','Please give your workshop a title'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if params[:workshop_info].blank?
|
||||||
|
error ||= _'registration.register.no_workshop_info_error','Please describe your workshop as best as you can to give other participants an idea of what to expect'
|
||||||
|
end
|
||||||
|
|
||||||
|
update_registration_data
|
||||||
|
|
||||||
if params[:previous]
|
if params[:previous]
|
||||||
session[:registration][:workshop_index] = [0, i - 1].max
|
session[:registration][:workshop_index] = [0, i - 1].max
|
||||||
elsif params[:add_another_workshop]
|
elsif params[:add_another_workshop]
|
||||||
@ -281,11 +335,14 @@ class ConferencesController < ApplicationController
|
|||||||
if session[:registration][:workshop][i + 1]
|
if session[:registration][:workshop][i + 1]
|
||||||
session[:registration][:workshop] = session[:registration][:workshop].first(i + 1)
|
session[:registration][:workshop] = session[:registration][:workshop].first(i + 1)
|
||||||
end
|
end
|
||||||
next_step = 'submit'
|
next_step = 'thanks'
|
||||||
|
complete_registration
|
||||||
|
end
|
||||||
|
when 'thanks'
|
||||||
|
@registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
if @registration.is_confirmed.blank?
|
||||||
|
send_confirmation
|
||||||
end
|
end
|
||||||
when 'submit'
|
|
||||||
UserMailer.conference_registration_email(@conference, session[:registration]).deliver
|
|
||||||
session.delete(:registration)
|
|
||||||
next_step = 'thanks'
|
next_step = 'thanks'
|
||||||
when 'cancel'
|
when 'cancel'
|
||||||
if params[:yes]
|
if params[:yes]
|
||||||
@ -294,45 +351,77 @@ class ConferencesController < ApplicationController
|
|||||||
else
|
else
|
||||||
return {error: false, next_step: session[:registration][:path].pop}
|
return {error: false, next_step: session[:registration][:path].pop}
|
||||||
end
|
end
|
||||||
|
when 'already_registered'
|
||||||
|
send_confirmation
|
||||||
|
next_step = 'thanks'
|
||||||
|
when 'pay_now', 'payment-confirmed', 'payment-cancelled'
|
||||||
|
next_step = 'thanks'
|
||||||
end
|
end
|
||||||
if params[:previous]
|
session.delete(:registration_step)
|
||||||
next_step = session[:registration][:path].pop
|
#if params[:previous]
|
||||||
else
|
# next_step = session[:registration][:path].pop
|
||||||
if !params[:cancel] && error
|
#else
|
||||||
return {error: true, message: error, next_step: params['step']}
|
if !params[:cancel] && error
|
||||||
end
|
return {error: true, message: error, next_step: params['step']}
|
||||||
if session[:registration] && params['step']
|
|
||||||
session[:registration][:path] << params['step']
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
if session[:registration] && session[:registration][:path] && params['step']
|
||||||
|
session[:registration][:path] << params['step']
|
||||||
|
end
|
||||||
|
#end
|
||||||
{error: false, next_step: params[:cancel] ? 'cancel' : next_step}
|
{error: false, next_step: params[:cancel] ? 'cancel' : next_step}
|
||||||
end
|
end
|
||||||
|
|
||||||
def register
|
def register
|
||||||
|
is_post = request.post? || session[:registration_step]
|
||||||
set_conference
|
set_conference
|
||||||
|
|
||||||
|
if !@conference.registration_open
|
||||||
|
do_404
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
data = register_submit
|
data = register_submit
|
||||||
@register_step = request.post? ? data[:next_step] : 'register'
|
@register_step = is_post ? data[:next_step] : 'register'
|
||||||
@error_message = data[:error] ? data[:message] : nil
|
@error_message = data[:error] ? data[:message] : nil
|
||||||
template = (@register_step == 'register' ? '' : 'register_') + @register_step
|
template = (@register_step == 'register' ? '' : 'register_') + @register_step
|
||||||
|
|
||||||
if !File.exists?(Rails.root.join("app", "views", params[:controller], "_#{template}.html.haml"))
|
if !File.exists?(Rails.root.join("app", "views", params[:controller], "_#{template}.html.haml"))
|
||||||
do_404
|
do_404
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if session[:registration]
|
if session[:registration]
|
||||||
session[:registration][@register_step.to_sym] ||= Hash.new
|
session[:registration][@register_step.to_sym] ||= Hash.new
|
||||||
end
|
end
|
||||||
@actions = nil
|
@actions = nil
|
||||||
|
@multipart = false
|
||||||
case @register_step
|
case @register_step
|
||||||
when 'register'
|
when 'register', 'organizations', 'new_organization', 'new_workshop', 'volunteer_questions'
|
||||||
@actions = :next
|
@actions = :next
|
||||||
when 'primary', 'organizations', 'new_organization', 'new_workshop', 'volunteer_questions'
|
if @register_step == 'new_organization'
|
||||||
@actions = [:previous, :cancel, :next]
|
@multipart = true
|
||||||
|
end
|
||||||
|
when 'thanks'
|
||||||
|
@registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
if @registration.is_confirmed.blank?
|
||||||
|
@actions = :resend_confirmation_email
|
||||||
|
end
|
||||||
|
next_step = 'thanks'
|
||||||
|
#if @registration.complete && @registration.is_participant && @registration.payment_info.nil?
|
||||||
|
#` @actions = [:submit_payment]
|
||||||
|
when 'primary'
|
||||||
|
@actions = [:cancel, :next]
|
||||||
when 'submit'
|
when 'submit'
|
||||||
@actions = [:previous, :cancel, :submit]
|
@actions = [:cancel, :submit]
|
||||||
when 'cancel'
|
when 'cancel'
|
||||||
@actions = [:no, :yes]
|
@actions = [:no, :yes]
|
||||||
|
when 'already_registered'
|
||||||
|
@registration = ConferenceRegistration.find_by(:email => session[:registration][:email])
|
||||||
|
if !@registration.complete
|
||||||
|
@actions = :resend_confirmation_email
|
||||||
|
end
|
||||||
when 'questions'
|
when 'questions'
|
||||||
@actions = [:previous, :cancel, :next]
|
@actions = [:cancel, :submit]
|
||||||
@housing_options = {
|
@housing_options = {
|
||||||
'I will fend for myself thanks' => 'none',
|
'I will fend for myself thanks' => 'none',
|
||||||
'I will need a real bed' => 'bed',
|
'I will need a real bed' => 'bed',
|
||||||
@ -342,13 +431,17 @@ class ConferencesController < ApplicationController
|
|||||||
session[:registration][:questions][:housing] ||= 'couch'
|
session[:registration][:questions][:housing] ||= 'couch'
|
||||||
@loaner_bike_options = {
|
@loaner_bike_options = {
|
||||||
'No' => 'no',
|
'No' => 'no',
|
||||||
'Yes' => 'medium',
|
'Yes, an average size should do' => 'medium',
|
||||||
'Yes but a small one please' => 'small',
|
'Yes but a small one please' => 'small',
|
||||||
'Yes but a large one please' => 'large'
|
'Yes but a large one please' => 'large'
|
||||||
}
|
}
|
||||||
session[:registration][:questions][:loaner_bike] ||= 'medium'
|
session[:registration][:questions][:loaner_bike] ||= 'medium'
|
||||||
session[:registration][:questions][:diet] ||= Hash.new
|
#session[:registration][:questions][:diet] ||= Hash.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#puts ' ------yyyy----------------- '
|
||||||
|
#puts @register_step
|
||||||
|
|
||||||
if request.xhr?
|
if request.xhr?
|
||||||
@register_content = render_to_string :partial => template
|
@register_content = render_to_string :partial => template
|
||||||
render :json => {status: 200, html: @register_content}
|
render :json => {status: 200, html: @register_content}
|
||||||
@ -358,6 +451,94 @@ class ConferencesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def register_confirm
|
||||||
|
set_conference
|
||||||
|
@conference_registration = ConferenceRegistration.find_by(confirmation_token: params[:confirmation_token])
|
||||||
|
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && !@conference_registration.complete
|
||||||
|
@conference_registration.is_confirmed = true
|
||||||
|
@conference_registration.save!
|
||||||
|
session[:registration] = YAML.load(@conference_registration.data)
|
||||||
|
session[:registration][:path] = Array.new
|
||||||
|
session[:registration][:registration_id] = @conference_registration.id
|
||||||
|
session[:registration_step] = 'confirm'
|
||||||
|
redirect_to action: 'register'
|
||||||
|
else
|
||||||
|
do_404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def register_pay_registration
|
||||||
|
set_conference
|
||||||
|
@conference_registration = ConferenceRegistration.find_by(confirmation_token: params[:confirmation_token])
|
||||||
|
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete
|
||||||
|
if params[:payment_amount].nil?
|
||||||
|
session[:registration] = YAML.load(@conference_registration.data)
|
||||||
|
session[:registration][:registration_id] = @conference_registration.id
|
||||||
|
session[:registration][:path] = Array.new
|
||||||
|
session[:registration_step] = 'pay_now'
|
||||||
|
redirect_to action: 'register'
|
||||||
|
else
|
||||||
|
host = "#{request.protocol}#{request.host_with_port}"
|
||||||
|
begin
|
||||||
|
paypal_info = get_secure_info(:paypal)
|
||||||
|
request = Paypal::Express::Request.new(
|
||||||
|
:username => paypal_info[:username].strip!,
|
||||||
|
:password => paypal_info[:password].strip!,
|
||||||
|
:signature => paypal_info[:signature].strip!
|
||||||
|
)
|
||||||
|
payment_request = Paypal::Payment::Request.new(
|
||||||
|
:currency_code => 'USD', # if nil, PayPal use USD as default
|
||||||
|
:description => 'Conference Registration', # item description
|
||||||
|
:quantity => 1, # item quantity
|
||||||
|
:amount => params[:payment_amount].to_f, # item value
|
||||||
|
:custom_fields => {
|
||||||
|
CARTBORDERCOLOR: "00ADEF",
|
||||||
|
LOGOIMG: "https://cdn.bikebike.org/assets/bblogo.png"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
response = request.setup(
|
||||||
|
payment_request,
|
||||||
|
host + (@conference.url + "/register/confirm-payment/#{@conference_registration.payment_confirmation_token}/").gsub(/\/\/+/, '/'),
|
||||||
|
host + (@conference.url + "/register/cancel-payment/#{@conference_registration.confirmation_token}/").gsub(/\/\/+/, '/')
|
||||||
|
)
|
||||||
|
redirect_to response.redirect_uri
|
||||||
|
rescue Exception => e
|
||||||
|
ddd
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
do_404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def register_confirm_payment
|
||||||
|
set_conference
|
||||||
|
@conference_registration = ConferenceRegistration.find_by(payment_confirmation_token: params[:confirmation_token])
|
||||||
|
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete && @conference_registration.payment_info.nil?
|
||||||
|
@conference_registration.payment_info = "#{params[:PayerID]}:#{params[:token]}"
|
||||||
|
@conference_registration.save!
|
||||||
|
session[:registration] = YAML.load(@conference_registration.data)
|
||||||
|
session[:registration][:registration_id] = @conference_registration.id
|
||||||
|
session[:registration][:path] = Array.new
|
||||||
|
session[:registration_step] = 'payment-confirmed'
|
||||||
|
redirect_to action: 'register'
|
||||||
|
else
|
||||||
|
do_404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def register_cancel_payment
|
||||||
|
set_conference
|
||||||
|
@conference_registration = ConferenceRegistration.find_by(confirmation_token: params[:confirmation_token])
|
||||||
|
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete && @conference_registration.payment_info.nil?
|
||||||
|
session[:registration] = YAML.load(@conference_registration.data)
|
||||||
|
session[:registration][:registration_id] = @conference_registration.id
|
||||||
|
session[:registration][:path] = Array.new
|
||||||
|
session[:registration_step] = 'payment-cancelled'
|
||||||
|
redirect_to action: 'register'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def register_step
|
def register_step
|
||||||
set_conference
|
set_conference
|
||||||
data = params
|
data = params
|
||||||
@ -456,4 +637,133 @@ class ConferencesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_registration_data
|
||||||
|
if session[:registration][:registration_id]
|
||||||
|
registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
registration.data = YAML.load(registration.data).merge(session[:registration]).to_yaml
|
||||||
|
registration.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def complete_registration
|
||||||
|
if session[:registration][:registration_id]
|
||||||
|
registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
session[:registration] = YAML.load(registration.data)
|
||||||
|
registration.completed = true
|
||||||
|
if registration.is_confirmed
|
||||||
|
registration.complete = true
|
||||||
|
|
||||||
|
user = User.find_by(:email => session[:registration][:email])
|
||||||
|
if !user
|
||||||
|
user = User.new(:email => session[:registration][:email], :username => session[:registration][:user][:username], :role => 'user')
|
||||||
|
end
|
||||||
|
user.firstname = session[:registration][:user][:firstname]
|
||||||
|
user.lastname = session[:registration][:user][:lastname]
|
||||||
|
user.save!
|
||||||
|
|
||||||
|
if session[:registration][:is_participant]
|
||||||
|
UserOrganizationRelationship.destroy_all(:user_id => user.id)
|
||||||
|
session[:registration][:organizations].each { |org_id|
|
||||||
|
found = false
|
||||||
|
org = Organization.find(org_id.is_a?(Array) ? org_id.first : org_id)
|
||||||
|
org.user_organization_relationships.each {|rel| found = found && rel.user_id == user.id}
|
||||||
|
if !found
|
||||||
|
org.user_organization_relationships << UserOrganizationRelationship.new(:user_id => user.id, :relationship => UserOrganizationRelationship::Administrator)
|
||||||
|
end
|
||||||
|
org.save!
|
||||||
|
}
|
||||||
|
|
||||||
|
if session[:registration][:new_organization]
|
||||||
|
session[:registration][:new_organization].each { |new_org|
|
||||||
|
found = false
|
||||||
|
org = Organization.find_by(:email_address => new_org[:email])
|
||||||
|
if org.nil?
|
||||||
|
org = Organization.new(
|
||||||
|
:name => new_org[:name],
|
||||||
|
:email_address => new_org[:email],
|
||||||
|
:info => new_org[:info]
|
||||||
|
)
|
||||||
|
org.locations << Location.new(:country => new_org[:country], :territory => new_org[:territory], :city => new_org[:city], :street => new_org[:street])
|
||||||
|
end
|
||||||
|
org.user_organization_relationships.each {|rel| found = found && rel.user_id == user.id}
|
||||||
|
if !found
|
||||||
|
org.user_organization_relationships << UserOrganizationRelationship.new(:user_id => user.id, :relationship => UserOrganizationRelationship::Administrator)
|
||||||
|
end
|
||||||
|
org.save!
|
||||||
|
org.avatar = "#{request.protocol}#{request.host_with_port}/#{new_org[:logo]}"
|
||||||
|
cover = get_panoramio_image(org.locations.first)
|
||||||
|
org.cover = cover[:image]
|
||||||
|
org.cover_attribution_id = cover[:attribution_id]
|
||||||
|
org.cover_attribution_user_id = cover[:attribution_user_id]
|
||||||
|
org.cover_attribution_name = cover[:attribution_user_name]
|
||||||
|
org.cover_attribution_src = cover[:attribution_src]
|
||||||
|
org.save!
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if session[:registration][:is_workshop_host] && session[:registration][:workshop]
|
||||||
|
session[:registration][:workshop].each { |new_workshop|
|
||||||
|
workshop = Workshop.new(
|
||||||
|
:conference_id => @conference.id,
|
||||||
|
:title => new_workshop[:title],
|
||||||
|
:info => new_workshop[:info],
|
||||||
|
:workshop_stream_id => WorkshopStream.find_by(:slug => new_workshop[:stream]).id,
|
||||||
|
:workshop_presentation_style => WorkshopPresentationStyle.find_by(:slug => new_workshop[:presentation_style])
|
||||||
|
)
|
||||||
|
workshop.workshop_facilitators << WorkshopFacilitator.new(:user_id => user.id)
|
||||||
|
workshop.save!
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
send_confirmation_confirmation(registration, session[:registration])
|
||||||
|
|
||||||
|
session.delete(:registration)
|
||||||
|
session[:registration] = Hash.new
|
||||||
|
session[:registration][:registration_id] = registration.id
|
||||||
|
end
|
||||||
|
registration.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_registration
|
||||||
|
if !session[:registration][:registration_id]
|
||||||
|
registration = ConferenceRegistration.new(
|
||||||
|
:conference_id => @conference.id,
|
||||||
|
:user_id => session[:registration][:user][:id],
|
||||||
|
:email => session[:registration][:email],
|
||||||
|
:is_attending => 'yes',
|
||||||
|
:is_participant => session[:registration][:is_participant],
|
||||||
|
:is_volunteer => session[:registration][:is_volunteer],
|
||||||
|
:is_confirmed => false,
|
||||||
|
:complete => false,
|
||||||
|
:completed => false,
|
||||||
|
:confirmation_token => rand_hash(32, :conference_registration, :confirmation_token),
|
||||||
|
:payment_confirmation_token => rand_hash(32, :conference_registration, :payment_confirmation_token),
|
||||||
|
:data => session[:registration].to_yaml
|
||||||
|
)
|
||||||
|
registration.save!
|
||||||
|
session[:registration][:registration_id] = registration.id
|
||||||
|
send_confirmation(registration, session[:registration])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def send_confirmation(registration = nil, data = nil)
|
||||||
|
registration ||= ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
data ||= YAML.load(registration.data)
|
||||||
|
UserMailer.conference_registration_email(@conference, data, registration).deliver
|
||||||
|
end
|
||||||
|
|
||||||
|
def send_confirmation_confirmation(registration = nil, data = nil)
|
||||||
|
registration ||= ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
data ||= YAML.load(registration.data)
|
||||||
|
UserMailer.conference_registration_confirmed_email(@conference, data, registration).deliver
|
||||||
|
end
|
||||||
|
|
||||||
|
def send_payment_received(registration = nil, data = nil)
|
||||||
|
registration ||= ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
data ||= YAML.load(registration.data)
|
||||||
|
UserMailer.conference_registration_payment_received(@conference, data, registration).deliver
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -22,8 +22,8 @@ class OrganizationsController < ApplicationController
|
|||||||
if !@organizations.has_key?(country.name)
|
if !@organizations.has_key?(country.name)
|
||||||
@organizations[country.name] = Hash.new
|
@organizations[country.name] = Hash.new
|
||||||
end
|
end
|
||||||
territory = country.subregions.coded(location.territory)
|
territory = country.subregions? ? country.subregions.coded(location.territory) : nil
|
||||||
territory_name = territory ? territory.name : 0
|
territory_name = territory.nil? ? 0 : territory.name
|
||||||
if !@organizations[country.name].has_key?(territory_name)
|
if !@organizations[country.name].has_key?(territory_name)
|
||||||
@organizations[country.name][territory_name] = Hash.new
|
@organizations[country.name][territory_name] = Hash.new
|
||||||
end
|
end
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
|
|
||||||
class PagesController < ApplicationController
|
class PagesController < ApplicationController
|
||||||
protect_from_forgery :except => :location_territories
|
protect_from_forgery :except => :location_territories
|
||||||
#skip_before_filter :verify_authenticity_token, only: [:translate]
|
#skip_before_filter :verify_authenticity_token, only: [:translate]
|
||||||
|
|
||||||
def home
|
def home
|
||||||
@conferences = Conference.all
|
#@conferences = Conference.all
|
||||||
@conference = Conference.find(:first, :order => "start_date DESC")
|
@conference = Conference.order("start_date DESC").first
|
||||||
end
|
end
|
||||||
|
|
||||||
def resources
|
def resources
|
||||||
@ -51,23 +51,23 @@ class PagesController < ApplicationController
|
|||||||
#render json: (Carmen:::RegionCollection.new(Carmen::Country.coded(params[:country])) || []).to_json
|
#render json: (Carmen:::RegionCollection.new(Carmen::Country.coded(params[:country])) || []).to_json
|
||||||
territories = {}
|
territories = {}
|
||||||
country = Carmen::Country.coded(params[:country])
|
country = Carmen::Country.coded(params[:country])
|
||||||
if country
|
if country
|
||||||
country.subregions.each { |t| territories[t.code] = t.name }
|
country.subregions.each { |t| territories[t.code] = t.name }
|
||||||
end
|
end
|
||||||
render json: territories.to_json
|
render json: territories.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
def translations
|
def translations
|
||||||
if !current_user
|
#if !current_user
|
||||||
raise ActiveRecord::PremissionDenied
|
# raise ActiveRecord::PremissionDenied
|
||||||
end
|
#end
|
||||||
@lang = params[:lang]
|
@lang = params[:lang]
|
||||||
@translations = I18n.backend.get_translation_info
|
@translations = is_test? ? {} : I18n.backend.get_translation_info
|
||||||
I18n.config.enforce_available_locales = false
|
I18n.config.enforce_available_locales = false
|
||||||
end
|
end
|
||||||
|
|
||||||
def translation_list
|
def translation_list
|
||||||
if !current_user
|
if !current_user && is_production?
|
||||||
raise ActiveRecord::PremissionDenied
|
raise ActiveRecord::PremissionDenied
|
||||||
end
|
end
|
||||||
total = 0
|
total = 0
|
||||||
|
@ -9,6 +9,8 @@ module ApplicationHelper
|
|||||||
@@banner_image = nil
|
@@banner_image = nil
|
||||||
@@has_content = true
|
@@has_content = true
|
||||||
@@front_page = false
|
@@front_page = false
|
||||||
|
@@body_class = nil
|
||||||
|
@@test_location = nil
|
||||||
|
|
||||||
def init_vars
|
def init_vars
|
||||||
@@keyQueue = nil
|
@@keyQueue = nil
|
||||||
@ -20,6 +22,7 @@ module ApplicationHelper
|
|||||||
@@banner_image = nil
|
@@banner_image = nil
|
||||||
@@has_content = true
|
@@has_content = true
|
||||||
@@front_page = false
|
@@front_page = false
|
||||||
|
@@body_class = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def this_is_the_front_page
|
def this_is_the_front_page
|
||||||
@ -100,6 +103,11 @@ module ApplicationHelper
|
|||||||
content_for(:dom_ready, &block)
|
content_for(:dom_ready, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def body_class(c)
|
||||||
|
@@body_class ||= Array.new
|
||||||
|
@@body_class << (c.is_a?(Array) ? c.join(' ') : c)
|
||||||
|
end
|
||||||
|
|
||||||
def page_style(style)
|
def page_style(style)
|
||||||
classes = ['page-style-' + style.to_s]
|
classes = ['page-style-' + style.to_s]
|
||||||
#if @@no_banner
|
#if @@no_banner
|
||||||
@ -114,6 +122,9 @@ module ApplicationHelper
|
|||||||
if @@banner_image
|
if @@banner_image
|
||||||
classes << 'has-banner-image'
|
classes << 'has-banner-image'
|
||||||
end
|
end
|
||||||
|
if @@body_class
|
||||||
|
classes << @@body_class.join(' ')
|
||||||
|
end
|
||||||
|
|
||||||
if params[:controller]
|
if params[:controller]
|
||||||
classes << params[:controller]
|
classes << params[:controller]
|
||||||
@ -440,7 +451,9 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def lookup_ip_location
|
def lookup_ip_location
|
||||||
if request.remote_ip == '127.0.0.1'
|
if is_test? && ApplicationController::get_location.present?
|
||||||
|
Geocoder.search(ApplicationController::get_location).first
|
||||||
|
elsif request.remote_ip == '127.0.0.1'
|
||||||
Geocoder.search(session['remote_ip'] || (session['remote_ip'] = open("http://checkip.dyndns.org").first.gsub(/^.*\s([\d\.]+).*$/s, '\1').gsub(/[^\.\d]/, ''))).first
|
Geocoder.search(session['remote_ip'] || (session['remote_ip'] = open("http://checkip.dyndns.org").first.gsub(/^.*\s([\d\.]+).*$/s, '\1').gsub(/[^\.\d]/, ''))).first
|
||||||
else
|
else
|
||||||
request.location
|
request.location
|
||||||
@ -492,6 +505,10 @@ module ApplicationHelper
|
|||||||
Rails.env == 'production'
|
Rails.env == 'production'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_test?
|
||||||
|
Rails.env == 'test'
|
||||||
|
end
|
||||||
|
|
||||||
def subdomain
|
def subdomain
|
||||||
request.env['SERVER_NAME'].gsub(/^(\w+)\..*$/, '\1')
|
request.env['SERVER_NAME'].gsub(/^(\w+)\..*$/, '\1')
|
||||||
end
|
end
|
||||||
@ -505,6 +522,56 @@ module ApplicationHelper
|
|||||||
location.city + (territory ? ' ' + territory.name : '') + ', ' + Carmen::Country.coded(location.country).name
|
location.city + (territory ? ' ' + territory.name : '') + ', ' + Carmen::Country.coded(location.country).name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rand_hash(length = 16, model = nil, field = nil)
|
||||||
|
if field
|
||||||
|
hash = rand_hash(length)
|
||||||
|
while !model.to_s.to_s.singularize.classify.constantize.find_by(field => hash).nil?
|
||||||
|
hash = rand_hash(length)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rand(36**length).to_s(36)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_panoramio_image(location)
|
||||||
|
if is_test?
|
||||||
|
params[:image] = 'panoramio.jpg'
|
||||||
|
params[:attribution_id] = 1234
|
||||||
|
params[:attribution_user_id] = 5678
|
||||||
|
params[:attribution_name] = 'Some Guy'
|
||||||
|
params[:attribution_src] = 'panoramio'
|
||||||
|
return params
|
||||||
|
end
|
||||||
|
|
||||||
|
location = location.city + ', ' + (location.territory ? location.territory + ' ' : '') + location.country
|
||||||
|
$panoramios ||= Hash.new
|
||||||
|
$panoramios[location] ||= 0
|
||||||
|
$panoramios[location] += 1
|
||||||
|
result = Geocoder.search(location).first
|
||||||
|
if result
|
||||||
|
points = Geocoder::Calculations.bounding_box([result.latitude, result.longitude], 5, { :unit => :km })
|
||||||
|
options = {:set => :public, :size => :original, :from => 0, :to => 20, :mapfilter => false, :miny => points[0], :minx => points[1], :maxy => points[2], :maxx => points[3]}
|
||||||
|
url = 'http://www.panoramio.com/map/get_panoramas.php?' + options.to_query
|
||||||
|
response = JSON.parse(open(url).read)
|
||||||
|
response['photos'].each { |img|
|
||||||
|
if img['width'].to_i > 980
|
||||||
|
if Organization.find_by(:cover_attribution_id => img['photo_id'], :cover_attribution_src => 'panoramio').nil? && Conference.find_by(:cover_attribution_id => img['photo_id'], :cover_attribution_src => 'panoramio').nil?
|
||||||
|
params[:image] = img['photo_file_url']
|
||||||
|
params[:attribution_id] = img['photo_id']
|
||||||
|
params[:attribution_user_id] = img['owner_id']
|
||||||
|
params[:attribution_name] = img['owner_name']
|
||||||
|
params[:attribution_src] = 'panoramio'
|
||||||
|
return params
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_secure_info(name)
|
||||||
|
YAML.load(File.read(Rails.root.parent.join("secure/#{name.to_s}.yml")))[Rails.env].symbolize_keys
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def _form_field(type, name, value, options)
|
def _form_field(type, name, value, options)
|
||||||
if type == 'check_box'
|
if type == 'check_box'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
class UserMailer < ActionMailer::Base
|
class UserMailer < ActionMailer::Base
|
||||||
default from: "noreply@bikebike.org"
|
default from: "Bike!Bike! <noreply@bikebike.org>"
|
||||||
|
|
||||||
# Subject can be set in your I18n file at config/locales/en.yml
|
# Subject can be set in your I18n file at config/locales/en.yml
|
||||||
# with the following lookup:
|
# with the following lookup:
|
||||||
@ -23,9 +23,19 @@ class UserMailer < ActionMailer::Base
|
|||||||
mail to: "to@example.org"
|
mail to: "to@example.org"
|
||||||
end
|
end
|
||||||
|
|
||||||
def conference_registration_email(conference, data)
|
def conference_registration_email(conference, data, conference_registration)
|
||||||
|
@data = data
|
||||||
|
@conference = conference
|
||||||
|
@url = "https://bikebike.org"#UserMailer.default_url_options[:host]
|
||||||
|
@confirmation_url = UserMailer.default_url_options[:host] + "/#{@conference.url}/register/confirm/#{conference_registration.confirmation_token}/".gsub(/\/\/+/, '/')
|
||||||
|
mail to: data[:email], subject: (_'register.email.registration.subject',"Please confirm your registration for #{conference.title}", vars: {:conference_title => conference.title})
|
||||||
|
end
|
||||||
|
|
||||||
|
def conference_registration_confirmed_email(conference, data, conference_registration)
|
||||||
@data = data
|
@data = data
|
||||||
@conference = conference
|
@conference = conference
|
||||||
mail to: data[:email], subject: 'Please confirm your registration for ' + conference.title
|
@url = "https://bikebike.org"#UserMailer.default_url_options[:host]
|
||||||
|
@confirmation_url = UserMailer.default_url_options[:host] + "/#{@conference.url}/register/pay-registration/#{conference_registration.confirmation_token}/".gsub(/\/\/+/, '/')
|
||||||
|
mail to: data[:email], subject: (_'register.email.registration_confirmed.subject',"Thanks for confirming your registration for #{conference.title}", vars: {:conference_title => conference.title})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -7,8 +7,8 @@ class Conference < ActiveRecord::Base
|
|||||||
has_many :conference_host_organizations, :dependent => :destroy
|
has_many :conference_host_organizations, :dependent => :destroy
|
||||||
has_many :organizations, :through => :conference_host_organizations
|
has_many :organizations, :through => :conference_host_organizations
|
||||||
|
|
||||||
has_many :conference_registration_form_fields, :order => 'position ASC', :dependent => :destroy#, :class_name => '::ConferenceRegistrationFormField'
|
#has_many :conference_registration_form_fields, :order => 'position ASC', :dependent => :destroy#, :class_name => '::ConferenceRegistrationFormField'
|
||||||
has_many :registration_form_fields, :through => :conference_registration_form_fields
|
#has_many :registration_form_fields, :through => :conference_registration_form_fields
|
||||||
|
|
||||||
has_many :workshops
|
has_many :workshops
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
class Location < ActiveRecord::Base
|
class Location < ActiveRecord::Base
|
||||||
#attr_accessible :title, :country, :territory, :city, :street, :postal_code, :latitude, :longitude
|
#attr_accessible :title, :country, :territory, :city, :street, :postal_code, :latitude, :longitude
|
||||||
has_many :locations_organization
|
has_many :locations_organization
|
||||||
has_many :organizations, :through => :locations_organization
|
has_many :organizations, :through => :locations_organization
|
||||||
|
|
||||||
geocoded_by :full_address
|
geocoded_by :full_address
|
||||||
|
|
||||||
reverse_geocoded_by :latitude, :longitude, :address => :full_address
|
reverse_geocoded_by :latitude, :longitude, :address => :full_address
|
||||||
after_validation :geocode, if: ->(obj){ obj.country_changed? or obj.territory_changed? or obj.city_changed? or obj.street_changed? or obj.postal_code_changed? }
|
after_validation :geocode, if: ->(obj){ obj.country_changed? or obj.territory_changed? or obj.city_changed? or obj.street_changed? or obj.postal_code_changed? }
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ class Organization < ActiveRecord::Base
|
|||||||
|
|
||||||
accepts_nested_attributes_for :locations, :reject_if => proc {|l| l[id].blank?}
|
accepts_nested_attributes_for :locations, :reject_if => proc {|l| l[id].blank?}
|
||||||
accepts_nested_attributes_for :user_organization_relationships, :reject_if => proc {|u| u[:user_id].blank?}, :allow_destroy => true
|
accepts_nested_attributes_for :user_organization_relationships, :reject_if => proc {|u| u[:user_id].blank?}, :allow_destroy => true
|
||||||
|
before_create :make_slug
|
||||||
|
|
||||||
def location
|
def location
|
||||||
locations.first
|
locations.first
|
||||||
@ -28,4 +29,33 @@ class Organization < ActiveRecord::Base
|
|||||||
slug
|
slug
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def generate_slug(name, location = nil)
|
||||||
|
s = name.gsub(/[^a-z1-9]+/i, '-').chomp('-').gsub(/\-([A-Z])/, '\1')
|
||||||
|
if Organization.find_by(:slug => s).present? && !location.nil?
|
||||||
|
if location.city.present?
|
||||||
|
s += '-' + location.city
|
||||||
|
end
|
||||||
|
if Organization.find_by(:slug => s).present? && location.territory.present?
|
||||||
|
s += '-' + location.territory
|
||||||
|
end
|
||||||
|
if Organization.find_by(:slug => s).present?
|
||||||
|
s += '-' + location.country
|
||||||
|
end
|
||||||
|
end
|
||||||
|
attempt = 1
|
||||||
|
ss = s
|
||||||
|
|
||||||
|
while Organization.find_by(:slug => s)
|
||||||
|
attempt += 1
|
||||||
|
s = ss + '-' + attempt.to_s
|
||||||
|
end
|
||||||
|
s
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def make_slug
|
||||||
|
if !self.slug
|
||||||
|
self.slug = generate_slug(self.name, self.locations && self.locations[0])
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,8 +3,8 @@ class User < ActiveRecord::Base
|
|||||||
config.authentications_class = Authentication
|
config.authentications_class = Authentication
|
||||||
end
|
end
|
||||||
|
|
||||||
validates :password, presence: true, confirmation: true, length: { minimum: 3 }, unless: ("id?" || "password_confirmation?")
|
#validates :password, presence: true, confirmation: true, length: { minimum: 3 }, unless: ("id?" || "password_confirmation?")
|
||||||
validates :password_confirmation, presence: true, unless: ("id?" || "password?")
|
#validates :password_confirmation, presence: true, unless: ("id?" || "password?")
|
||||||
|
|
||||||
validates :email, uniqueness: true
|
validates :email, uniqueness: true
|
||||||
|
|
||||||
|
@ -1,7 +1,37 @@
|
|||||||
class Workshop < ActiveRecord::Base
|
class Workshop < ActiveRecord::Base
|
||||||
belongs_to :conference
|
belongs_to :conference
|
||||||
|
|
||||||
|
has_many :workshop_facilitators, :dependent => :destroy
|
||||||
|
has_many :users, :through => :workshop_facilitators
|
||||||
|
|
||||||
|
accepts_nested_attributes_for :workshop_facilitators, :reject_if => proc {|u| u[:user_id].blank?}, :allow_destroy => true
|
||||||
|
|
||||||
|
before_create :make_slug
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
slug
|
slug
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def make_slug
|
||||||
|
if !self.slug
|
||||||
|
s = self.title.gsub(/[^a-z1-9]+/i, '-').chomp('-').gsub(/\-([A-Z])/, '\1')
|
||||||
|
if Organization.find_by(:slug => s) && self.locations && self.locations[0]
|
||||||
|
s += '-' + self.locations[0].city
|
||||||
|
if Organization.find_by(:slug => s) && locations[0].territory
|
||||||
|
s += '-' + self.locations[0].territory
|
||||||
|
end
|
||||||
|
if Organization.find_by(:slug => s)
|
||||||
|
s += '-' + self.locations[0].country
|
||||||
|
end
|
||||||
|
end
|
||||||
|
attempt = 1
|
||||||
|
ss = s
|
||||||
|
while Organization.find_by(:slug => s)
|
||||||
|
attempt += 1
|
||||||
|
s = ss + '-' + attempt
|
||||||
|
end
|
||||||
|
self.slug = s
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
- banner_image @conference.cover_url, id: @conference.cover_attribution_id, name: @conference.cover_attribution_name, user_id: @conference.cover_attribution_user_id, src: @conference.cover_attribution_src
|
- banner_image @conference.cover_url, id: @conference.cover_attribution_id, name: @conference.cover_attribution_name, user_id: @conference.cover_attribution_user_id, src: @conference.cover_attribution_src
|
||||||
|
- small_banner = (params['controller'] == 'conferences' && params['action'] != 'show')
|
||||||
|
- if small_banner
|
||||||
|
- body_class('small-banner')
|
||||||
- page_style (params['controller'] == 'conferences' ? 'article' : 'emphasize-banner')
|
- page_style (params['controller'] == 'conferences' ? 'article' : 'emphasize-banner')
|
||||||
|
|
||||||
- content_for :banner do
|
- content_for :banner do
|
||||||
.row
|
.row
|
||||||
.columns.small-12.banner
|
- if !small_banner
|
||||||
%figure
|
.columns.small-12.banner
|
||||||
%img{src: @conference.poster.full.url}
|
%figure
|
||||||
.columns.medium-8.align-bottom
|
%img{src: @conference.poster.full.url}
|
||||||
|
.columns.medium-7.align-bottom
|
||||||
- title = @conference.conference_type.slug == 'bikebike' ? 'Bike!Bike! '+@conference.start_date.year.to_s : @conference.title
|
- title = @conference.conference_type.slug == 'bikebike' ? 'Bike!Bike! '+@conference.start_date.year.to_s : @conference.title
|
||||||
%div
|
%div
|
||||||
%h1
|
%h1
|
||||||
@ -33,11 +37,31 @@
|
|||||||
= info.html_safe
|
= info.html_safe
|
||||||
- else
|
- else
|
||||||
%p= ActionView::Base.full_sanitizer.sanitize(@conference.info).gsub(/^(.{300,350}\.)(.*)$/m, '\1...')
|
%p= ActionView::Base.full_sanitizer.sanitize(@conference.info).gsub(/^(.{300,350}\.)(.*)$/m, '\1...')
|
||||||
.columns.medium-4.centered.align-bottom
|
.columns.medium-5.centered.align-bottom.buttons
|
||||||
%div
|
%div
|
||||||
- if @conference.registration_open
|
|
||||||
%a.button.arrow-r{href: @conference.url(:register)}
|
|
||||||
=_'conference.Register_Now'
|
|
||||||
- if params['controller'] != 'conferences'
|
- if params['controller'] != 'conferences'
|
||||||
%a.button.more{href: @conference.url}
|
%a.button.more{href: @conference.url}
|
||||||
=_'conference.More_Info'
|
=_'conference.More_Info'
|
||||||
|
- if @conference.registration_open && !small_banner
|
||||||
|
%a.button#register-now{href: @conference.url(:register)}
|
||||||
|
=_'conference.Register_Now'
|
||||||
|
#register-dlg
|
||||||
|
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :method => :post do
|
||||||
|
= hidden_field_tag :step, 'register'
|
||||||
|
= email_field_tag :email
|
||||||
|
= form_actions :register
|
||||||
|
- if !small_banner && @conference.registration_open
|
||||||
|
- content_for :dom_ready do
|
||||||
|
:plain
|
||||||
|
$('#register-now').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if ($('#register-dlg').hasClass('open')) {
|
||||||
|
$('#register-dlg form').submit();
|
||||||
|
}
|
||||||
|
$('#register-dlg').toggleClass('open');
|
||||||
|
});
|
||||||
|
$('#register-dlg').click(function(e) {
|
||||||
|
if ($(e.target).attr('id') == 'register-dlg') {
|
||||||
|
$('#register-dlg').toggleClass('open');
|
||||||
|
}
|
||||||
|
});
|
@ -1 +1,2 @@
|
|||||||
= email_field_tag :email, session[:registration][:email]
|
= email_field_tag :email, session[:registration][:email]
|
||||||
|
|
||||||
|
14
app/views/conferences/_register_already_registered.html.haml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
- if @registration.complete
|
||||||
|
%h3=_'registration.already_registered.complete.title','You Have Already Registered'
|
||||||
|
.columns.medium-10.medium-offset-1.end
|
||||||
|
%p.help
|
||||||
|
=_'registration.already_registered.complete.help','There\'s nothing more to do, you have already registered so we\'ll see you in '
|
||||||
|
= @conference.organizations.first.locations.first.city
|
||||||
|
- elsif @registration.is_confirmed
|
||||||
|
%h3=_'registration.already_registered.confirmed.title','You\'re Already Registered but we are missing some Information'
|
||||||
|
.columns.medium-10.medium-offset-1.end
|
||||||
|
%p.help=_'registration.already_registered.complete.help','You\'re already set to go but we had a few more questions for you. If you need us to resed your confirmation, just click the button below.'
|
||||||
|
- else
|
||||||
|
%h3=_'registration.already_registered.not_confirmed.title','We\'re awaiting your Confirmation'
|
||||||
|
.columns.medium-10.medium-offset-1.end
|
||||||
|
%p.help=_'registration.already_registered.not_confirmed.help','You already sent us the information we need but we need you to confirm. If you don\'t have the email anymore, we can resend it to you.'
|
@ -2,16 +2,17 @@
|
|||||||
= hidden_field_tag :new_org_index, org_index
|
= hidden_field_tag :new_org_index, org_index
|
||||||
- if session[:registration][:new_organization].length > 1
|
- if session[:registration][:new_organization].length > 1
|
||||||
%h3=_'registration.new_organization.list.title','Your New Organizations'
|
%h3=_'registration.new_organization.list.title','Your New Organizations'
|
||||||
%ul.columns.medium-10.medium-offset-1
|
%ul.columns.medium-11.medium-offset-1.end
|
||||||
- session[:registration][:new_organization].each_with_index do |new_organization, index|
|
- session[:registration][:new_organization].each_with_index do |new_organization, index|
|
||||||
- if new_organization[:title]
|
- if new_organization[:name]
|
||||||
%li
|
%li
|
||||||
- if index == org_index && new_organization[:title]
|
- if index == org_index && new_organization[:name]
|
||||||
%strong=new_organization[:title]
|
%strong=new_organization[:name]
|
||||||
- else
|
- else
|
||||||
= new_organization[:title]
|
= new_organization[:name]
|
||||||
%h3=_'registration.new_organization.title','Your Organization Information'
|
%h3=_'registration.new_organization.title','Your Organization Information'
|
||||||
.columns.medium-12= text_field_tag :organization_name, session[:registration][:new_organization][org_index][:name], :required => true
|
.columns.medium-12
|
||||||
|
= text_field_tag :organization_name, session[:registration][:new_organization][org_index][:name], :required => true
|
||||||
.columns.medium-12= text_area_tag :organization_info, session[:registration][:new_organization][org_index][:info], :data => {:editor => ""}
|
.columns.medium-12= text_area_tag :organization_info, session[:registration][:new_organization][org_index][:info], :data => {:editor => ""}
|
||||||
.columns.medium-7
|
.columns.medium-7
|
||||||
= email_field_tag :organization_email, session[:registration][:new_organization][org_index][:email], :required => true
|
= email_field_tag :organization_email, session[:registration][:new_organization][org_index][:email], :required => true
|
||||||
@ -20,7 +21,7 @@
|
|||||||
= country_select_tag :organization_country, session[:registration][:new_organization][org_index][:country], :required => true
|
= country_select_tag :organization_country, session[:registration][:new_organization][org_index][:country], :required => true
|
||||||
= subregion_select_tag :organization_territory, session[:registration][:new_organization][org_index][:territory], session[:registration][:new_organization][org_index][:country] || 'US', html: {class: session[:registration][:new_organization][org_index][:country] ? 'can' : 'cant', data: {:country => session[:registration][:new_organization][org_index][:country]}}
|
= subregion_select_tag :organization_territory, session[:registration][:new_organization][org_index][:territory], session[:registration][:new_organization][org_index][:country] || 'US', html: {class: session[:registration][:new_organization][org_index][:country] ? 'can' : 'cant', data: {:country => session[:registration][:new_organization][org_index][:country]}}
|
||||||
.columns.medium-5
|
.columns.medium-5
|
||||||
= image_field_tag :organization_logo
|
= image_field_tag :logo
|
||||||
.columns
|
.columns
|
||||||
= check_box_tag :add_another_org, (org_index <= session[:registration][:new_organization].length - 1)
|
= check_box_tag :add_another_org, (org_index <= session[:registration][:new_organization].length - 1)
|
||||||
|
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
.columns.medium-10.medium-offset-1= text_field_tag :workshop_title, session[:registration][:workshop][workshop_index][:title], :required => true
|
.columns.medium-10.medium-offset-1= text_field_tag :workshop_title, session[:registration][:workshop][workshop_index][:title], :required => true
|
||||||
.columns.medium-10.medium-offset-1= text_area_tag :workshop_info, session[:registration][:workshop][workshop_index][:info], :required => true, :data => {:editor => ""}
|
.columns.medium-10.medium-offset-1= text_area_tag :workshop_info, session[:registration][:workshop][workshop_index][:info], :required => true, :data => {:editor => ""}
|
||||||
.columns.medium-5.medium-offset-1
|
.columns.medium-5.medium-offset-1
|
||||||
%h4=_'registration.workshop.streams.title','Stream'
|
%h4=_'registration.workshop.streams.title','Themes'
|
||||||
%p.help=_'registration.workshop.streams.help','Select the stream that best categorizes your workshop'
|
%p.help=_'registration.workshop.streams.help','Select the theme that best categorizes your workshop'
|
||||||
- streams = Hash.new
|
- streams = Hash.new
|
||||||
- streams[_'workshop_stream.select_one','Select a stream'] = ''
|
- streams[_'workshop_stream.select_one','Select a theme'] = ''
|
||||||
- WorkshopStream.all.each do |stream|
|
- WorkshopStream.order('"order" ASC').each do |stream|
|
||||||
- streams[_'workshop_stream.' + stream.slug] = stream.slug
|
- streams[_'workshop_stream.' + stream.slug] = stream.slug
|
||||||
= select_tag :workshop_stream, options_for_select(streams, session[:registration][:workshop][workshop_index][:stream] || '')
|
= select_tag :workshop_stream, options_for_select(streams, session[:registration][:workshop][workshop_index][:stream] || '')
|
||||||
.columns.medium-5.end
|
.columns.medium-5.end
|
||||||
@ -26,12 +26,15 @@
|
|||||||
%p.help=_'registration.workshop.styles.help','Select the style that best describes how you will run your workshop'
|
%p.help=_'registration.workshop.styles.help','Select the style that best describes how you will run your workshop'
|
||||||
- styles = Hash.new
|
- styles = Hash.new
|
||||||
- styles[_'workshop_presentation_style.select_one','Select a style'] = ''
|
- styles[_'workshop_presentation_style.select_one','Select a style'] = ''
|
||||||
- WorkshopPresentationStyle.all.each do |style|
|
- WorkshopPresentationStyle.order('"order" ASC').each do |style|
|
||||||
- styles[_'workshop_presentation_style.' + style.slug] = style.slug
|
- styles[_'workshop_presentation_style.' + style.slug] = style.slug
|
||||||
= select_tag :workshop_presentation_style, options_for_select(styles, session[:registration][:workshop][workshop_index][:presentation_style] || '')
|
= select_tag :workshop_presentation_style, options_for_select(styles, session[:registration][:workshop][workshop_index][:presentation_style] || '')
|
||||||
|
.columns.medium-10.medium-offset-1.end
|
||||||
|
%h4=_'registration.workshop.notes.title','Additional notes for Organizers'
|
||||||
|
%p=_'registration.workshop.notes.help','Anything else that the conference organizers should know? Is anyone helping you facilitate?'
|
||||||
|
= text_area_tag :workshop_notes, session[:registration][:workshop][workshop_index][:notes], :label => false
|
||||||
.columns.medium-10.medium-offset-1
|
.columns.medium-10.medium-offset-1
|
||||||
- #xx
|
|
||||||
= check_box_tag :add_another_workshop, "1", (workshop_index < session[:registration][:workshop].length - 1)
|
= check_box_tag :add_another_workshop, "1", (workshop_index < session[:registration][:workshop].length - 1)
|
||||||
|
|
||||||
- content_for :footer_scripts do
|
- content_for :footer_scripts do
|
||||||
= javascript_include_tag 'editor'
|
= javascript_include_tag 'editor'
|
@ -1,3 +1,11 @@
|
|||||||
|
- registration = ConferenceRegistration.find(session[:registration][:registration_id])
|
||||||
|
- if registration && registration.is_confirmed
|
||||||
|
%h3=_'register.organizations.confirm_thanks.title','Thanks for confirming!'
|
||||||
|
- if session[:registration][:is_workshop_host]
|
||||||
|
%p=_'register.organizations.confirm_thanks.is_workshop_host.help','Before you finish, we would just like to find out where you\'re coming from and get some info about your workshop.'
|
||||||
|
- else
|
||||||
|
%p=_'register.organizations.confirm_thanks.is_not_workshop_host.help','Before you finish, we would just like to find out where you\'re coming from.'
|
||||||
|
%p=_'register.organizations.confirm_thanks.payment_notice','After that you will also be able to pay for registration.'
|
||||||
%h3
|
%h3
|
||||||
=_'register.organizations.title','Who do you Represent?'
|
=_'register.organizations.title','Who do you Represent?'
|
||||||
%p=_'register.organizations.description','Please let us know where you\'re coming from! Find your organizations on the right, they are listed by how close they are to you right now.'
|
%p=_'register.organizations.description','Please let us know where you\'re coming from! Find your organizations on the right, they are listed by how close they are to you right now.'
|
||||||
@ -8,8 +16,6 @@
|
|||||||
- my_location = lookup_ip_location
|
- my_location = lookup_ip_location
|
||||||
- lids = Location.near(my_location.latitude.to_s+', '+my_location.longitude.to_s, 999999, order: 'distance').map{|l|l.id}
|
- lids = Location.near(my_location.latitude.to_s+', '+my_location.longitude.to_s, 999999, order: 'distance').map{|l|l.id}
|
||||||
- orgs = Hash.new
|
- orgs = Hash.new
|
||||||
-# orgs = Organization.joins(:locations_organization).where('locations_organizations.location_id' => lids)
|
|
||||||
-# orgs.each do |org|
|
|
||||||
- lids.each do |lid|
|
- lids.each do |lid|
|
||||||
- org = Organization.joins(:locations_organization).where('locations_organizations.location_id' => lid).first
|
- org = Organization.joins(:locations_organization).where('locations_organizations.location_id' => lid).first
|
||||||
- if org && !orgs.has_key?(org.id)
|
- if org && !orgs.has_key?(org.id)
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
.columns
|
.columns
|
||||||
%h3=_'registration.primary.role_title','Attending as:'
|
%h3=_'registration.primary.role_title','Attending as:'
|
||||||
.columns.small-offset-1
|
.columns.small-offset-1
|
||||||
= check_box_tag :is_participant, session[:registration][:is_participant]
|
= check_box_tag :is_participant, 'true', session[:registration][:is_participant]
|
||||||
= check_box_tag :is_volunteer, session[:registration][:is_volunteer]
|
= check_box_tag :is_volunteer, 'true', session[:registration][:is_volunteer]
|
||||||
|
@ -13,19 +13,19 @@
|
|||||||
.columns.medium-8.medium-offset-2.end
|
.columns.medium-8.medium-offset-2.end
|
||||||
= select_tag '[questions][loaner_bike]', options_for_select(@loaner_bike_options, session[:registration][:questions][:loaner_bike])
|
= select_tag '[questions][loaner_bike]', options_for_select(@loaner_bike_options, session[:registration][:questions][:loaner_bike])
|
||||||
|
|
||||||
|
-#.columns.medium-offset-1.end
|
||||||
|
-# %h4=_'registration.questions.diet','We\'ll be serving some food. Do you have any dietary restrictions?'
|
||||||
|
-#.columns.medium-8.medium-offset-2.end
|
||||||
|
-# = check_box_tag '[questions][diet][no_meat]', session[:registration][:questions][:diet][:no_meat]
|
||||||
|
-# = check_box_tag '[questions][diet][no_dairy]', session[:registration][:questions][:diet][:no_dairy]
|
||||||
|
-# = check_box_tag '[questions][diet][no_animal_products]', session[:registration][:questions][:diet][:no_animal_products]
|
||||||
|
-# = check_box_tag '[questions][diet][no_gluten]', session[:registration][:questions][:diet][:no_gluten]
|
||||||
|
-# = check_box_tag '[questions][diet][no_nuts]', session[:registration][:questions][:diet][:no_nuts]
|
||||||
|
-# %h5=_'registration.questions.diet_extra.title','Anything else?'
|
||||||
|
-# = text_area_tag '[questions][diet][diet_extra]', session[:registration][:questions][:diet_extra], :label => false
|
||||||
.columns.medium-offset-1.end
|
.columns.medium-offset-1.end
|
||||||
%h4=_'registration.questions.diet','We\'ll be serving some food. Do you have any dietary restrictions?'
|
%h4=_'registration.questions.workshop','Would you like to host a workshop?'
|
||||||
.columns.medium-8.medium-offset-2.end
|
%p.help=_'registration.questions.workshop.help','Did you have an idea for a workshop that you\'d like to help run? If so, we\'ll ask some follow-up questions later on.'
|
||||||
= check_box_tag '[questions][diet][no_meat]', session[:registration][:questions][:diet][:no_meat]
|
|
||||||
= check_box_tag '[questions][diet][no_dairy]', session[:registration][:questions][:diet][:no_dairy]
|
|
||||||
= check_box_tag '[questions][diet][no_animal_products]', session[:registration][:questions][:diet][:no_animal_products]
|
|
||||||
= check_box_tag '[questions][diet][no_gluten]', session[:registration][:questions][:diet][:no_gluten]
|
|
||||||
= check_box_tag '[questions][diet][no_nuts]', session[:registration][:questions][:diet][:no_nuts]
|
|
||||||
%h5=_'registration.questions.diet_extra.title','Anything else?'
|
|
||||||
= text_area_tag '[questions][diet][diet_extra]', session[:registration][:questions][:diet_extra], :label => false
|
|
||||||
.columns.medium-offset-1.end
|
|
||||||
%h4=_'registration.questions.workshop','Would you ilke to host a workshop?'
|
|
||||||
%p.help=_'registration.questions.workshop.help','Did you have an idea for a workshop that you\d like to help run? If so, we\'ll ask some follow-up questions on the following page.'
|
|
||||||
.columns.medium-8.medium-offset-2.end
|
.columns.medium-8.medium-offset-2.end
|
||||||
= select_tag :is_workshop_host, options_for_select({(_'Yes') => 1, (_'No') => 0}, session[:registration][:is_workshop_host] || 0)
|
= select_tag :is_workshop_host, options_for_select({(_'Yes') => 1, (_'No') => 0}, session[:registration][:is_workshop_host] || 0)
|
||||||
.columns.medium-offset-1.end
|
.columns.medium-offset-1.end
|
||||||
|
@ -1,6 +1,25 @@
|
|||||||
%h3=_'registration.thanks.title','Thanks for submitting your registration'
|
- if @registration && @registration.complete
|
||||||
.columns.medium-offset-1.end
|
- city = @conference.organizations.first.locations.first.city
|
||||||
%h4=_'registration.thanks.remember_to_confirm','Remember to confirm your registration upon receiving the confirmation email'
|
%h3=_'registration.thanks.complete.title','Thanks for completing your registration'
|
||||||
%p.help
|
.columns
|
||||||
=_'registration.thanks.remember_to_confirm.help','If you experience any technical issues, please contact Godwin directly at'
|
- if !@registration.is_participant
|
||||||
%a{href: 'mailto:goodgodwin@hotmail.com'}='goodgodwin@hotmail.com'
|
%p=_'registration.thanks.all_done.volunteer','Thanks for submitting your volunteer infomation. We\'ll see you at Bike!Bike!'
|
||||||
|
- elsif @registration.payment_info.nil?
|
||||||
|
%p=_'registration.thanks.all_done.please_pay',"Thank you for completing your registration. We'll see you at Bike!Bike! If you have not already done so, we ask that you pay the registration donation as soon as you can."
|
||||||
|
= form_tag ("#{@conference.url}/register/pay-registration/#{@registration.confirmation_token}/").gsub(/\/\/+/, '/'), :method => :post, :class => 'row' do
|
||||||
|
= hidden_field_tag :confirmation_token, @registration.confirmation_token
|
||||||
|
.columns.small-4.small-offset-2
|
||||||
|
= number_field_tag :payment_amount, 25.00, :step => 0.01, :min => 0.01
|
||||||
|
.columns.small-4.end
|
||||||
|
= form_actions :submit_payment
|
||||||
|
- else
|
||||||
|
%p=_'registration.thanks.all_done.paid',"You're all done and paid up! We'll see you in #{city}.", vars: {:city => city}
|
||||||
|
%p=_'register.email.registration_confirmed.info',"We'll have housing, loaner bikes, and food arranged for your arrival. If you have any other questions or concerns, please email bikebike2014columbus@gmail.com."
|
||||||
|
%p=_'register.email.registration_confirmed.contact',"For urgent/emergency matters, you can reach our Outreach Coordinator, Reda, at 503-984-9191 or Jason at 614-364-3636."
|
||||||
|
- else
|
||||||
|
%h3=_'registration.thanks.title','Thanks for submitting your registration'
|
||||||
|
.columns
|
||||||
|
%h4=_'registration.thanks.remember_to_confirm','Remember to confirm your registration upon receiving the confirmation email. If you need it to be resent, just press the button below.'
|
||||||
|
%p.help
|
||||||
|
=_'registration.thanks.remember_to_confirm.help','If you experience any technical issues, please contact Godwin directly at'
|
||||||
|
%a{href: 'mailto:goodgodwin@hotmail.com'}='goodgodwin@hotmail.com'
|
||||||
|
@ -6,25 +6,31 @@
|
|||||||
= text_field_tag '[volunteer_questions][address]', session[:registration][:volunteer_questions][:address]
|
= text_field_tag '[volunteer_questions][address]', session[:registration][:volunteer_questions][:address]
|
||||||
= text_field_tag '[volunteer_questions][phone_number]', session[:registration][:volunteer_questions][:phone_number]
|
= text_field_tag '[volunteer_questions][phone_number]', session[:registration][:volunteer_questions][:phone_number]
|
||||||
|
|
||||||
|
-#.columns.medium-offset-1.end
|
||||||
|
-# %h4=_'registration.volunteer_questions.has_kitchen','Do have a kitchen / cook space to offer?'
|
||||||
|
-#.columns.medium-8.medium-offset-2.end
|
||||||
|
-# = select_tag '[volunteer_questions][has_kitchen]', options_for_select({(_'Yes') => 1, (_'No') => 0}, session[:registration][:volunteer_questions][:has_kitchen] || 0)
|
||||||
.columns.medium-offset-1.end
|
.columns.medium-offset-1.end
|
||||||
%h4=_'registration.volunteer_questions.has_kitchen','Do have a kitchen / cook space to offer?'
|
%h4=_'registration.volunteer_questions.tasks.title','How can you help out?'
|
||||||
.columns.medium-8.medium-offset-2.end
|
.columns.medium-8.medium-offset-2.end
|
||||||
= select_tag '[volunteer_questions][has_kitchen]', options_for_select({(_'Yes') => 1, (_'No') => 0}, session[:registration][:volunteer_questions][:has_kitchen] || 0)
|
- session[:registration][:volunteer_questions][:tasks] ||= Hash.new
|
||||||
|
= check_box_tag '[volunteer_questions][tasks][cooking]', session[:registration][:volunteer_questions][:tasks][:cooking]
|
||||||
|
= check_box_tag '[volunteer_questions][tasks][manual_labour]', session[:registration][:volunteer_questions][:tasks][:manual_labour]
|
||||||
|
|
||||||
.columns.medium-offset-1.end
|
.columns.medium-offset-1.end
|
||||||
%h4=_'registration.volunteer_questions.has_housing','Do you have housing to offer for out of town attendees?'
|
%h4=_'registration.volunteer_questions.has_housing','Do you have housing to offer for out of town attendees?'
|
||||||
.columns.medium-offset-2.medium-5
|
.columns.medium-offset-2.medium-5
|
||||||
%h5=_'registration.volunteer_questions.beds','Spare Beds:'
|
%h5=_'registration.volunteer_questions.beds','Spare Beds:'
|
||||||
.columns.medium-3.end
|
.columns.medium-3.end
|
||||||
= number_field_tag '[volunteer_questions][beds]', session[:registration][:volunteer_questions][:beds] || 0, :label => false
|
= number_field_tag '[volunteer_questions][beds]', session[:registration][:volunteer_questions][:beds] || 0, :label => false, min: 0
|
||||||
.columns.medium-offset-2.medium-5
|
.columns.medium-offset-2.medium-5
|
||||||
%h5=_'registration.volunteer_questions.couch_space','Number you can accomodate on couches/floor space:'
|
%h5=_'registration.volunteer_questions.couch_space','Number you can accomodate on couches/floor space:'
|
||||||
.columns.medium-3.end
|
.columns.medium-3.end
|
||||||
= number_field_tag '[volunteer_questions][beds]', session[:registration][:volunteer_questions][:couch_space] || 0, :label => false
|
= number_field_tag '[volunteer_questions][couch_space]', session[:registration][:volunteer_questions][:couch_space] || 0, :label => false, min: 0
|
||||||
.columns.medium-offset-2.medium-5
|
.columns.medium-offset-2.medium-5
|
||||||
%h5=_'registration.volunteer_questions.tents','Estimated number of tests you\'d be willing to have in your yard:'
|
%h5=_'registration.volunteer_questions.tents','Estimated number of tests you\'d be willing to have in your yard:'
|
||||||
.columns.medium-3.end
|
.columns.medium-3.end
|
||||||
= number_field_tag '[volunteer_questions][tents]', session[:registration][:volunteer_questions][:tents] || 0, :label => false
|
= number_field_tag '[volunteer_questions][tents]', session[:registration][:volunteer_questions][:tents] || 0, :label => false, min: 0
|
||||||
.columns.medium-offset-1.end
|
.columns.medium-offset-1.end
|
||||||
%h4=_'registration.volunteer_questions.other','Anything else you\'d like to tell us?'
|
%h4=_'registration.volunteer_questions.other','Anything else you\'d like to tell us?'
|
||||||
.columns.medium-8.medium-offset-2.end
|
.columns.medium-8.medium-offset-2.end
|
||||||
|
@ -4,15 +4,12 @@
|
|||||||
- title @conference.title
|
- title @conference.title
|
||||||
- description "#{@conference.title} conference in #{location_name} for DIY bicycle collectives, co-ops, and advocacy groups"
|
- description "#{@conference.title} conference in #{location_name} for DIY bicycle collectives, co-ops, and advocacy groups"
|
||||||
= render 'header'
|
= render 'header'
|
||||||
|
|
||||||
=# tabs!
|
|
||||||
|
|
||||||
%article.row
|
%article.row
|
||||||
.columns.large-10
|
.columns.large-10
|
||||||
- if @register_step
|
- if @register_step
|
||||||
%h2='Register!'
|
%h2='Conference Registration'
|
||||||
- if @actions
|
- if @actions
|
||||||
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :method => :post do
|
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :method => :post, :multipart => @multipart do
|
||||||
= hidden_field_tag :step, @register_step
|
= hidden_field_tag :step, @register_step
|
||||||
- if @error_message
|
- if @error_message
|
||||||
.columns.medium-8.medium-centered
|
.columns.medium-8.medium-centered
|
||||||
|
@ -36,6 +36,15 @@
|
|||||||
- if content_for?(:side_bar)
|
- if content_for?(:side_bar)
|
||||||
%aside#side-bar
|
%aside#side-bar
|
||||||
= yield :side_bar
|
= yield :side_bar
|
||||||
|
%form{action: 'https://www.paypal.com/cgi-bin/webscr', method: 'post', target: '_top'}
|
||||||
|
%input{type: 'hidden', name: 'cmd', value: '_donations'}
|
||||||
|
%input{type: 'hidden', name: 'business', value: 'info@thirdhand.org'}
|
||||||
|
%input{type: 'hidden', name: 'lc', value: 'US'}
|
||||||
|
%input{type: 'hidden', name: 'item_name', value: 'Bike!Bike!'}
|
||||||
|
%input{type: 'hidden', name: 'no_note', value: '0'}
|
||||||
|
%input{type: 'hidden', name: 'currency_code', value: 'USD'}
|
||||||
|
%button{type: 'submit', value: 'PP-DonationsBF:paypal_logo.png:NonHostedGuest'}=_'donate.button_label','Make a Donation!'
|
||||||
|
|
||||||
- if has_content?
|
- if has_content?
|
||||||
#content=yield
|
#content=yield
|
||||||
- else
|
- else
|
||||||
|
76
app/views/layouts/user_mailer.html.haml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
!!! Strict
|
||||||
|
%html{xmlns: "http://www.w3.org/1999/xhtml"}
|
||||||
|
%head
|
||||||
|
%meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}/
|
||||||
|
%meta{content: "width=device-width, initial-scale=1.0", name: "viewport"}/
|
||||||
|
%title Your Message Subject or Title
|
||||||
|
:css
|
||||||
|
#outlook a {padding:0;}
|
||||||
|
body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}
|
||||||
|
.ExternalClass {width:100%;}
|
||||||
|
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;}
|
||||||
|
#backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}
|
||||||
|
img {outline:none; text-decoration:none; -ms-interpolation-mode: bicubic;}
|
||||||
|
a img {border:none;}
|
||||||
|
.image_fix {display:block;}
|
||||||
|
p {margin: 1em 0;text-align:left;font-size: 1.25em}
|
||||||
|
h1, h2, h3, h4, h5, h6 {color: black !important;margin-bottom: 1.5em;line-height:1.5em}
|
||||||
|
h2 {text-align:left;font-size:1.3em;}
|
||||||
|
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {color: white !important;margin-bottom:1em}
|
||||||
|
h1 a:active, h2 a:active, h3 a:active, h4 a:active, h5 a:active, h6 a:active {color: white !important;}
|
||||||
|
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited {color: white !important;}
|
||||||
|
table td {border-collapse: collapse;}
|
||||||
|
table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }
|
||||||
|
a {color: #00ADEF;}
|
||||||
|
@media only screen and (max-device-width: 480px) {
|
||||||
|
a[href^="tel"], a[href^="sms"] {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #00ADEF;
|
||||||
|
pointer-events: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {
|
||||||
|
text-decoration: default;
|
||||||
|
color: #00ADEF !important;
|
||||||
|
pointer-events: auto;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
|
||||||
|
a[href^="tel"], a[href^="sms"] {
|
||||||
|
text-decoration: none;
|
||||||
|
color: blue; /* or whatever your want */
|
||||||
|
pointer-events: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {
|
||||||
|
text-decoration: default;
|
||||||
|
color: #00ADEF !important;
|
||||||
|
pointer-events: auto;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2) {}
|
||||||
|
@media only screen and (-webkit-device-pixel-ratio:.75){}
|
||||||
|
@media only screen and (-webkit-device-pixel-ratio:1){}
|
||||||
|
@media only screen and (-webkit-device-pixel-ratio:1.5){}
|
||||||
|
/[if IEMobile 7]
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
</style>
|
||||||
|
/[if gte mso 9]
|
||||||
|
<style>
|
||||||
|
\/* Target Outlook 2007 and 2010 */
|
||||||
|
</style>
|
||||||
|
%body
|
||||||
|
%table#backgroundTable{border: "0", cellpadding: "0", cellspacing: "0"}
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
|
%div{style:'width:100%;background-color:#00ADEF;padding: 25px 0 200px;text-align: center;'}
|
||||||
|
%div{style:'max-width:600px;border:3px solid #00ADEF;margin:25px auto;background-color:#FFF;display:inline-block;width:75%;'}
|
||||||
|
= yield
|
||||||
|
%div{style: 'text-align:center;padding-bottom:25px'}
|
||||||
|
%a{href: "#{@url}"}
|
||||||
|
2014 Bike!Bike!
|
5
app/views/layouts/user_mailer.text.haml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
='========== Bike!Bike! =========='
|
||||||
|
|
||||||
|
= yield
|
||||||
|
|
||||||
|
="===== #{@url} ======"
|
@ -1 +1,9 @@
|
|||||||
404!d
|
- page_title = _'error.404.page_title.This_Page_Does_Not_Exist'
|
||||||
|
- title page_title
|
||||||
|
- banner_title page_title
|
||||||
|
|
||||||
|
.row
|
||||||
|
%h1
|
||||||
|
=_'error.404.title','This page does not exist!'
|
||||||
|
%p
|
||||||
|
=_'error.404.description', :p
|
9
app/views/pages/language_not_enabled.html.haml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
- page_title = _'error.no_lang.page_title.Language_not_enabled'
|
||||||
|
- title page_title
|
||||||
|
- banner_title page_title
|
||||||
|
|
||||||
|
.row
|
||||||
|
%h1
|
||||||
|
=(_ 'language_not_yet_translated', vars: {:language => (_ ('languages.' + @lang))})
|
||||||
|
%p
|
||||||
|
=_'error.no_lang.description', :p
|
@ -1,9 +1,9 @@
|
|||||||
- page_title = _'error.title.Permission_Denied'
|
- page_title = _'error.403.page_title.Permission_Denied'
|
||||||
- title page_title
|
- title page_title
|
||||||
- banner_title page_title
|
- banner_title page_title
|
||||||
|
|
||||||
.row
|
.row
|
||||||
%h1
|
%h1
|
||||||
='This page is inaccessible to you'
|
=_'error.403.title','This page is inaccessible to you'
|
||||||
%p
|
%p
|
||||||
=_'error.desc.permission_denied', :p
|
=_'error.403.description', :p
|
@ -12,11 +12,11 @@
|
|||||||
- if code && @completeness.has_key?(code.to_s)
|
- if code && @completeness.has_key?(code.to_s)
|
||||||
%li.text-center
|
%li.text-center
|
||||||
- completeness = @completeness[code.to_s]
|
- completeness = @completeness[code.to_s]
|
||||||
- percent = @total_translations ? ((completeness / @total_translations.to_f) * 100).to_i : 0
|
-# percent = @total_translations ? ((completeness / @total_translations.to_f) * 100).to_i : 0
|
||||||
%a{:href => "/translations/#{code}/", :class => (percent > 99 ? 'complete' : percent > 67 ? 'needs-work' : nil)}
|
%a{:href => "/translations/#{code}/", :class => (completeness > 99 ? 'complete' : completeness > 67 ? 'needs-work' : nil)}
|
||||||
%h3=_"languages.#{code}"
|
%h3=_"languages.#{code}"
|
||||||
.completeness
|
.completeness
|
||||||
= "#{completeness} / #{@total_translations} (#{percent}%)"
|
= "#{completeness} / #{@total_translations} (#{completeness}%)"
|
||||||
%h2= _ 'languages.inactive'
|
%h2= _ 'languages.inactive'
|
||||||
%ul.languages.inactive.small-block-grid-1.medium-block-grid-3.large-block-grid-4.grid.links
|
%ul.languages.inactive.small-block-grid-1.medium-block-grid-3.large-block-grid-4.grid.links
|
||||||
- @language_codes.each do |code|
|
- @language_codes.each do |code|
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
%th.key=_'translations.Pages'
|
%th.key=_'translations.Pages'
|
||||||
%th.key=_'translations.Value'
|
%th.key=_'translations.Value'
|
||||||
- @translations.sort{| a1, a2 | a1[0].downcase <=> a2[0].downcase}.each do |k,translation|
|
- @translations.sort{| a1, a2 | a1[0].downcase <=> a2[0].downcase}.each do |k,translation|
|
||||||
- current_translation = Translation.locale(@lang.to_sym).lookup(k)#[0].value #_ translation[0], :strict, locale: @lang.to_sym
|
- current_translation = Translation.locale(@lang.to_sym).lookup(k)
|
||||||
- current_translation = current_translation.size() > 0 ? current_translation = current_translation[0].value : nil
|
- current_translation = current_translation.size() > 0 ? current_translation = current_translation[0].value : nil
|
||||||
- cached = (translation['languages'] && translation['languages'].include?(@lang))
|
- cached = (translation && translation['languages'] && translation['languages'].include?(@lang))
|
||||||
- vars = translation.has_key?('vars') && translation['vars'].size() > 0 ? translation['vars'] : nil
|
- vars = translation && translation.has_key?('vars') && translation['vars'].size() > 0 ? translation['vars'] : nil
|
||||||
- (vars && vars.include?(:count) ? I18n.backend.get_pluralization_rules(@lang) : [nil]).each do |pluralization|
|
- (vars && vars.include?(:count) ? I18n.backend.get_pluralization_rules(@lang) : [nil]).each do |pluralization|
|
||||||
- key = k + (pluralization ? ".#{pluralization.to_s}" : '')
|
- key = k + (pluralization ? ".#{pluralization.to_s}" : '')
|
||||||
%tr{:class => current_translation ? 'exists' : 'not-exists', :data => {:key => key}}
|
%tr{:class => current_translation ? 'exists' : 'not-exists', :data => {:key => key}}
|
||||||
@ -28,9 +28,10 @@
|
|||||||
%li=v
|
%li=v
|
||||||
%td.pages
|
%td.pages
|
||||||
%ul
|
%ul
|
||||||
- translation['pages'].each do |page|
|
- if translation
|
||||||
%li
|
- translation['pages'].each do |page|
|
||||||
%a{:href => page}=page
|
%li
|
||||||
|
%a{:href => page}=page
|
||||||
%td.value.primary
|
%td.value.primary
|
||||||
- if current_translation
|
- if current_translation
|
||||||
= current_translation
|
= current_translation
|
||||||
@ -43,5 +44,5 @@
|
|||||||
- unless current_translation
|
- unless current_translation
|
||||||
%a{:href => '#', :class => 'auto-translate button small'}='Auto'
|
%a{:href => '#', :class => 'auto-translate button small'}='Auto'
|
||||||
|
|
||||||
-# content_for :footer_scripts
|
- content_for :footer_scripts do
|
||||||
= javascript_include_tag 'translations'
|
= javascript_include_tag 'translations'
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
%img{src: "#{@url}/#{@conference.poster.full.url}", style: "max-width: 100%;"}
|
||||||
|
%div{style: 'padding: 25px'}
|
||||||
|
%h1=_'register.email.registration_confirmed.thank_you',"Hi #{@data[:user][:username]}, thank you for completing your registration. We'll see you at Bike!Bike!"
|
||||||
|
%h2=_'register.email.registration_confirmed.please_pay',"If you have not already done so, we ask that you pay the registration donation as soon as you can. At your convenience please visit the link below."
|
||||||
|
%div{style: 'text-align:center'}
|
||||||
|
%h1{style: 'background-color:#F11845;text-align:center;display:inline-block;padding: 5px 20px 10px;'}
|
||||||
|
%a{href: @confirmation_url, style: 'color:#FFF;text-decoration:none;'}
|
||||||
|
=_'register.email.registration_confirmed.pay_now',"Pay Registration Fees"
|
||||||
|
%p=(_'register.email.registration_confirmed.info',"We'll have housing, loaner bikes, and food arranged for your arrival. If you have any other questions or concerns, please email bikebike2014columbus@gmail.com").gsub(/(\w+@\w+\.\w{2,3})/, '<a href="mailto:\1">\1</a>').html_safe
|
||||||
|
%p=_'register.email.registration_confirmed.contact',"For urgent/emergency matters, you can reach our Outreach Coordinator, Reda, at 503-984-9191 or Jason at 614-364-3636."
|
@ -0,0 +1,9 @@
|
|||||||
|
=_'register.email.registration_confirmed.thank_you',"Hi #{@data[:user][:username]}, thank you for completing your registration. We'll see you at Bike!Bike!"
|
||||||
|
|
||||||
|
=_'register.email.registration_confirmed.please_pay',"If you have not already done so, we ask that you pay the registration donation as soon as you can. At your convenience please visit the link below."
|
||||||
|
|
||||||
|
= @confirmation_url
|
||||||
|
|
||||||
|
=_'register.email.registration_confirmed.info',"We'll have housing, loaner bikes, and food arranged for your arrival. If you have any other questions or concerns, please email bikebike2014columbus@gmail.com."
|
||||||
|
|
||||||
|
=_'register.email.registration_confirmed.contact',"For urgent/emergency matters, you can reach our Outreach Coordinator, Reda, at 503-984-9191 or Jason at 614-364-3636."
|
@ -0,0 +1,7 @@
|
|||||||
|
%img{src: "#{@url}/#{@conference.poster.full.url}", style: "max-width: 100%;"}
|
||||||
|
%div{style: 'padding: 25px'}
|
||||||
|
%h1=_'register.email.registration.please_confirm',"Hi #{@data[:user][:username]}, please confirm your registration for #{@conference.title}", vars: {:username => @data[:user][:username]}
|
||||||
|
%div{style: 'text-align:center'}
|
||||||
|
%h1{style: 'background-color:#F11845;text-align:center;display:inline-block;padding: 5px 20px 10px;'}
|
||||||
|
%a{href: @confirmation_url, style: 'color:#FFF;text-decoration:none;'}
|
||||||
|
=_'register.email.registration.confirm_button',"Yes I'm Really Coming!"
|
@ -1 +1 @@
|
|||||||
= @data.to_json.to_s
|
=_('register.email.registration.please_confirm',"Hi #{@data[:user][:username]}, please confirm your registration for #{@conference.title}", vars: {:username => @data[:user][:username]}) + ": #{@confirmation_url}"
|
@ -13,24 +13,25 @@ ENV['JPEGOPTIM_BIN'] = 'jpegoptim'
|
|||||||
ENV['OPTIPNG_BIN'] = 'optipng'
|
ENV['OPTIPNG_BIN'] = 'optipng'
|
||||||
|
|
||||||
module BikeBike
|
module BikeBike
|
||||||
class Application < Rails::Application
|
class Application < Rails::Application
|
||||||
# Settings in config/environments/* take precedence over those specified here.
|
# Settings in config/environments/* take precedence over those specified here.
|
||||||
# Application configuration should go into files in config/initializers
|
# Application configuration should go into files in config/initializers
|
||||||
# -- all .rb files in that directory are automatically loaded.
|
# -- all .rb files in that directory are automatically loaded.
|
||||||
|
|
||||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||||
# config.time_zone = 'Central Time (US & Canada)'
|
# config.time_zone = 'Central Time (US & Canada)'
|
||||||
|
|
||||||
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
||||||
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||||
config.i18n.default_locale = :en #:de
|
config.i18n.default_locale = :en #:de
|
||||||
config.i18n.enforce_available_locales = false
|
config.i18n.enforce_available_locales = false
|
||||||
# config.action_controller.default_url_options = { :trailing_slash => true }
|
self.paths['config/database'] = Rails.root.parent.join("secure/database.yml").to_s
|
||||||
#config.middleware.swap 'Rack::MethodOverride', 'Rack::MethodOverrideWithParams'
|
# config.action_controller.default_url_options = { :trailing_slash => true }
|
||||||
#config.i18n.exception_handler = I18n::MissingTranslationExceptionHandler.new
|
#config.middleware.swap 'Rack::MethodOverride', 'Rack::MethodOverrideWithParams'
|
||||||
#require '/app/helpers/bike_bike_form_helper'
|
#config.i18n.exception_handler = I18n::MissingTranslationExceptionHandler.new
|
||||||
#ActionView::Base.default_form_builder
|
#require '/app/helpers/bike_bike_form_helper'
|
||||||
#config.action_view.default_form_builder = 'BikeBikeFormHelper::BikeBikeFormBuilder'
|
#ActionView::Base.default_form_builder
|
||||||
|
#config.action_view.default_form_builder = 'BikeBikeFormHelper::BikeBikeFormBuilder'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -45,13 +45,15 @@ BikeBike::Application.configure do
|
|||||||
}
|
}
|
||||||
config.action_mailer.raise_delivery_errors = true
|
config.action_mailer.raise_delivery_errors = true
|
||||||
config.action_mailer.perform_deliveries = true
|
config.action_mailer.perform_deliveries = true
|
||||||
#config.force_ssl = true
|
#config.force_ssl = true
|
||||||
#config.action_mailer.default_charset = 'utf-8'
|
#config.action_mailer.default_charset = 'utf-8'
|
||||||
|
|
||||||
#Carmen.i18n_backend.locale_paths = ''
|
#Carmen.i18n_backend.locale_paths = ''
|
||||||
#puts "CARMEN\t" + Carmen.i18n_backend.locale_paths
|
#puts "CARMEN\t" + Carmen.i18n_backend.locale_paths
|
||||||
|
|
||||||
#PerfTools::CpuProfiler.start('/tmp/dev_prof')
|
#PerfTools::CpuProfiler.start('/tmp/dev_prof')
|
||||||
config.serve_static_assets = true
|
config.serve_static_assets = true
|
||||||
#config.assets.precompile = false
|
#config.assets.precompile = false
|
||||||
|
Paypal.sandbox!
|
||||||
|
#Paypal.sandbox = false
|
||||||
end
|
end
|
||||||
|
@ -1,37 +1,38 @@
|
|||||||
BikeBike::Application.configure do
|
BikeBike::Application.configure do
|
||||||
# Settings specified here will take precedence over those in config/application.rb.
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
|
||||||
# The test environment is used exclusively to run your application's
|
# The test environment is used exclusively to run your application's
|
||||||
# test suite. You never need to work with it otherwise. Remember that
|
# test suite. You never need to work with it otherwise. Remember that
|
||||||
# your test database is "scratch space" for the test suite and is wiped
|
# your test database is "scratch space" for the test suite and is wiped
|
||||||
# and recreated between test runs. Don't rely on the data there!
|
# and recreated between test runs. Don't rely on the data there!
|
||||||
config.cache_classes = true
|
config.cache_classes = true
|
||||||
|
|
||||||
# Do not eager load code on boot. This avoids loading your whole application
|
# Do not eager load code on boot. This avoids loading your whole application
|
||||||
# just for the purpose of running a single test. If you are using a tool that
|
# just for the purpose of running a single test. If you are using a tool that
|
||||||
# preloads Rails for running tests, you may have to set it to true.
|
# preloads Rails for running tests, you may have to set it to true.
|
||||||
config.eager_load = false
|
config.eager_load = false
|
||||||
|
|
||||||
# Configure static asset server for tests with Cache-Control for performance.
|
# Configure static asset server for tests with Cache-Control for performance.
|
||||||
config.serve_static_assets = true
|
config.serve_static_assets = true
|
||||||
config.static_cache_control = "public, max-age=3600"
|
config.static_cache_control = "public, max-age=3600"
|
||||||
|
|
||||||
# Show full error reports and disable caching.
|
# Show full error reports and disable caching.
|
||||||
config.consider_all_requests_local = true
|
config.consider_all_requests_local = true
|
||||||
config.action_controller.perform_caching = false
|
config.action_controller.perform_caching = false
|
||||||
|
|
||||||
# Raise exceptions instead of rendering exception templates.
|
# Raise exceptions instead of rendering exception templates.
|
||||||
config.action_dispatch.show_exceptions = false
|
config.action_dispatch.show_exceptions = false
|
||||||
|
|
||||||
# Disable request forgery protection in test environment.
|
# Disable request forgery protection in test environment.
|
||||||
config.action_controller.allow_forgery_protection = false
|
config.action_controller.allow_forgery_protection = false
|
||||||
|
|
||||||
# Tell Action Mailer not to deliver emails to the real world.
|
# Tell Action Mailer not to deliver emails to the real world.
|
||||||
# The :test delivery method accumulates sent emails in the
|
# The :test delivery method accumulates sent emails in the
|
||||||
# ActionMailer::Base.deliveries array.
|
# ActionMailer::Base.deliveries array.
|
||||||
config.action_mailer.delivery_method = :test
|
config.action_mailer.delivery_method = :test
|
||||||
config.action_mailer.default_url_options = { host: 'localhost' }
|
config.action_mailer.default_url_options = { host: 'localhost' }
|
||||||
|
|
||||||
# Print deprecation notices to the stderr.
|
# Print deprecation notices to the stderr.
|
||||||
config.active_support.deprecation = :stderr
|
config.active_support.deprecation = :stderr
|
||||||
|
Paypal.sandbox!
|
||||||
end
|
end
|
||||||
|
@ -48,7 +48,8 @@ module I18n
|
|||||||
end
|
end
|
||||||
return self.lorem_ipsum(behavior, behavior_size)
|
return self.lorem_ipsum(behavior, behavior_size)
|
||||||
end
|
end
|
||||||
key.to_s.gsub(/^world\..*\.(.+)\.name$/, '\1').gsub(/^.*\.(.+)?$/, '\1').gsub('_', ' ')
|
#key.to_s.gsub(/^world\..*\.(.+)\.name$/, '\1').gsub(/^.*\.(.+)?$/, '\1').gsub('_', ' ')
|
||||||
|
key.to_s.gsub(/^world\.(.+)\.name$/, '\1').gsub(/^.*\.(.+)?$/, '\1').gsub('_', ' ')
|
||||||
end
|
end
|
||||||
|
|
||||||
def call(exception, locale, key, options)
|
def call(exception, locale, key, options)
|
||||||
@ -68,6 +69,21 @@ module I18n
|
|||||||
@@translation_cache_file = 'config/locales/.translation-cache.yml'
|
@@translation_cache_file = 'config/locales/.translation-cache.yml'
|
||||||
@@pluralization_rules_file = 'config/locales/pluralization-rules.yml'
|
@@pluralization_rules_file = 'config/locales/pluralization-rules.yml'
|
||||||
@@translation_cache
|
@@translation_cache
|
||||||
|
@@testing_started = false
|
||||||
|
@@hosts
|
||||||
|
|
||||||
|
def self.init_tests!(new_translations = nil)
|
||||||
|
if Rails.env.test?
|
||||||
|
if !@@testing_started
|
||||||
|
@@testing_started = true
|
||||||
|
File.open(@@translations_file, 'w+')
|
||||||
|
File.open(@@translation_cache_file, 'w+')
|
||||||
|
end
|
||||||
|
if !new_translations.nil?
|
||||||
|
record_translation(new_translations)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def needs_translation(key)
|
def needs_translation(key)
|
||||||
@@needs_translation ||= Array.new
|
@@needs_translation ||= Array.new
|
||||||
@ -90,12 +106,9 @@ module I18n
|
|||||||
end
|
end
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
if Rails.env.test? || !File.exist?(@@translation_cache_file)
|
if !File.exist?(@@translation_cache_file)
|
||||||
File.open(@@translation_cache_file, 'w+')
|
File.open(@@translation_cache_file, 'w+')
|
||||||
end
|
end
|
||||||
if Rails.env.test?
|
|
||||||
File.open(@@translations_file, 'w+')
|
|
||||||
end
|
|
||||||
@@translation_cache = YAML.load(File.read(@@translation_cache_file)) || Hash.new
|
@@translation_cache = YAML.load(File.read(@@translation_cache_file)) || Hash.new
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
@ -105,8 +118,6 @@ module I18n
|
|||||||
YAML.load_file(@@translations_file) || {}
|
YAML.load_file(@@translations_file) || {}
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
# sometimes concurrency issues cause an exception during testing
|
# sometimes concurrency issues cause an exception during testing
|
||||||
puts e.class
|
|
||||||
x
|
|
||||||
sleep(1/2.0)
|
sleep(1/2.0)
|
||||||
get_translation_info()
|
get_translation_info()
|
||||||
end
|
end
|
||||||
@ -121,6 +132,30 @@ module I18n
|
|||||||
YAML.load_file(@@pluralization_rules_file).keys
|
YAML.load_file(@@pluralization_rules_file).keys
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_locale(host)
|
||||||
|
@@hosts ||= Hash.new
|
||||||
|
default = I18n.default_locale.to_s
|
||||||
|
lang = @@hosts[host]
|
||||||
|
if lang === false
|
||||||
|
lang = nil
|
||||||
|
elsif lang.nil?
|
||||||
|
if (lang = host.gsub(/^(dev|test|www)[\-\.](.*)$/, '\2').gsub(/^(([^\.]+)\.)?[^\.]+\.[^\.]+$/, '\2')).blank?
|
||||||
|
lang = default
|
||||||
|
end
|
||||||
|
if get_language_codes().include? lang
|
||||||
|
if !language_enabled? lang
|
||||||
|
I18n.locale = default
|
||||||
|
return lang
|
||||||
|
end
|
||||||
|
else
|
||||||
|
lang = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
I18n.locale = default unless lang.present?
|
||||||
|
# return nil if the language doesn exist, false if it is not enabled, or the code if it is enabled
|
||||||
|
lang.present? ? true : false
|
||||||
|
end
|
||||||
|
|
||||||
def get_language_completion(lang)
|
def get_language_completion(lang)
|
||||||
total = 0
|
total = 0
|
||||||
complete = 0
|
complete = 0
|
||||||
@ -128,7 +163,11 @@ module I18n
|
|||||||
total += 1
|
total += 1
|
||||||
complete += v['languages'].include?(lang.to_s) ? 1 : 0
|
complete += v['languages'].include?(lang.to_s) ? 1 : 0
|
||||||
}
|
}
|
||||||
total ? complete / total : 0
|
(total ? complete / total.to_f : 0.0) * 100.0
|
||||||
|
end
|
||||||
|
|
||||||
|
def language_enabled?(lang)
|
||||||
|
lang.to_s == I18n.default_locale.to_s || get_language_completion(lang) > 66
|
||||||
end
|
end
|
||||||
|
|
||||||
def request_translation(key, vars, options)
|
def request_translation(key, vars, options)
|
||||||
@ -142,10 +181,26 @@ module I18n
|
|||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def record_translation(key)
|
||||||
|
translations = get_translation_info()
|
||||||
|
translations ||= Hash.new
|
||||||
|
|
||||||
|
if key.is_a(Array)
|
||||||
|
key.each { |k| translations[k.to_s] ||= Hash.new }
|
||||||
|
else
|
||||||
|
translations[key.to_s] ||= Hash.new
|
||||||
|
end
|
||||||
|
File.open(@@translations_file, 'w') { |f| f.write translations.to_yaml }
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def lookup(locale, key, scope = [], options = {})
|
def lookup(locale, key, scope = [], options = {})
|
||||||
result = nil
|
result = nil
|
||||||
|
|
||||||
|
if key.is_a?(String)
|
||||||
|
key = key.gsub(/(^\[|\])/, '').gsub(/\[/, '.')
|
||||||
|
end
|
||||||
|
|
||||||
if @@translation_cache && @@translation_cache.has_key?(locale.to_s) && @@translation_cache[locale.to_s].has_key?(key.to_s)
|
if @@translation_cache && @@translation_cache.has_key?(locale.to_s) && @@translation_cache[locale.to_s].has_key?(key.to_s)
|
||||||
result = @@translation_cache[locale.to_s][key.to_s]
|
result = @@translation_cache[locale.to_s][key.to_s]
|
||||||
end
|
end
|
||||||
|
@ -1,31 +1,430 @@
|
|||||||
---
|
---
|
||||||
nola_2013.about:
|
world.ca.ns.name:
|
||||||
languages: []
|
languages:
|
||||||
|
- en
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/"
|
||||||
data: []
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
home.its_awesome:
|
data:
|
||||||
languages: []
|
- '{"id":1489,"locale":"en","key":"world.ca.ns.name","value":"Nova Scotia","interpolations":[],"is_proc":false,"created_at":"2014-05-04T05:27:57.814Z","updated_at":"2014-05-04T05:27:57.821Z"}'
|
||||||
|
time.formats.date:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/"
|
||||||
data: []
|
data:
|
||||||
|
- '{"id":1618,"locale":"en","key":"time.formats.date","value":"%B %d, %Y","interpolations":[],"is_proc":false,"created_at":null,"updated_at":null}'
|
||||||
|
date.month_names:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":1620,"locale":"en","key":"date.month_names","value":["~","January","February","March","April","May","June","July","August","September","October","November","December"],"interpolations":[],"is_proc":true,"created_at":"2014-07-06T19:53:45.689Z","updated_at":"2014-07-06T19:53:45.689Z"}'
|
||||||
|
conference.More_Info:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":92004,"locale":"en","key":"conference.More_Info","value":"More Info","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:04:56.683Z","updated_at":"2014-07-22T00:04:56.696Z"}'
|
||||||
Conferences:
|
Conferences:
|
||||||
languages: []
|
languages:
|
||||||
|
- de
|
||||||
|
- en
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/"
|
||||||
data: []
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":1503,"locale":"de","key":"Conferences","value":"Konferenzen","interpolations":[],"is_proc":false,"created_at":"2014-05-04T14:27:46.772Z","updated_at":"2014-05-04T14:27:46.789Z"}'
|
||||||
|
- '{"id":1481,"locale":"en","key":"Conferences","value":"Conferences","interpolations":[],"is_proc":false,"created_at":"2014-05-04T05:05:06.760Z","updated_at":"2014-05-04T05:26:07.021Z"}'
|
||||||
Organizations:
|
Organizations:
|
||||||
languages: []
|
languages:
|
||||||
|
- en
|
||||||
|
- de
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/"
|
||||||
data: []
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":1482,"locale":"en","key":"Organizations","value":"Organizations","interpolations":[],"is_proc":false,"created_at":"2014-05-04T05:05:46.445Z","updated_at":"2014-07-21T01:51:57.345Z"}'
|
||||||
|
- '{"id":1505,"locale":"de","key":"Organizations","value":"Organisationen","interpolations":[],"is_proc":false,"created_at":"2014-05-04T14:29:44.542Z","updated_at":"2014-05-04T14:29:44.557Z"}'
|
||||||
Resources:
|
Resources:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
- de
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":1483,"locale":"en","key":"Resources","value":"Resources","interpolations":[],"is_proc":false,"created_at":"2014-05-04T05:05:50.964Z","updated_at":"2014-05-04T05:25:53.510Z"}'
|
||||||
|
- '{"id":1506,"locale":"de","key":"Resources","value":"Ressourcen","interpolations":[],"is_proc":false,"created_at":"2014-05-04T14:36:08.331Z","updated_at":"2014-05-04T14:36:08.438Z"}'
|
||||||
|
donate.button_label:
|
||||||
languages: []
|
languages: []
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/"
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
data: []
|
data: []
|
||||||
Sign_In:
|
conference.Register_Now:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":92005,"locale":"en","key":"conference.Register_Now","value":"Register Now","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:05:01.141Z","updated_at":"2014-07-22T00:05:01.155Z"}'
|
||||||
|
form.placeholder.Enter_your_step:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91970,"locale":"en","key":"form.placeholder.Enter_your_step","value":"NIL","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:48:28.017Z","updated_at":"2014-07-21T01:48:28.028Z"}'
|
||||||
|
form.placeholder.Enter_your_email:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":91961,"locale":"en","key":"form.placeholder.Enter_your_email","value":"someone@example.com","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:39:53.873Z","updated_at":"2014-07-21T02:17:18.066Z"}'
|
||||||
|
form.label.email:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":91944,"locale":"en","key":"form.label.email","value":"Email","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:33:11.129Z","updated_at":"2014-07-21T01:33:11.140Z"}'
|
||||||
|
register:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
data:
|
||||||
|
- '{"id":91980,"locale":"en","key":"register","value":"Register","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:52:22.219Z","updated_at":"2014-07-21T01:52:22.261Z"}'
|
||||||
|
- '{"id":92009,"locale":"en","key":"register.new_organization.no_city_error","value":"Please
|
||||||
|
enter your organization''s city","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:08:55.720Z","updated_at":"2014-07-22T00:08:55.758Z"}'
|
||||||
|
- '{"id":92010,"locale":"en","key":"register.new_organization.no_street_error","value":"Please
|
||||||
|
enter your organization''s street address","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:09:13.603Z","updated_at":"2014-07-22T00:09:13.616Z"}'
|
||||||
|
- '{"id":92012,"locale":"en","key":"register.organizations.confirm_thanks.is_not_workshop_host.help","value":"","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:10:09.190Z","updated_at":"2014-07-22T00:10:09.203Z"}'
|
||||||
|
- '{"id":92013,"locale":"en","key":"register.organizations.confirm_thanks.title","value":"","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:10:13.343Z","updated_at":"2014-07-22T00:10:13.355Z"}'
|
||||||
|
- '{"id":92011,"locale":"en","key":"register.new_organization.same_email_as_attendee_error","value":"This
|
||||||
|
email needs to be different than your own personal email, we need to keep in touch
|
||||||
|
with your organization even if you''re gone in years to come.","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:09:49.895Z","updated_at":"2014-07-22T00:11:24.105Z"}'
|
||||||
|
- '{"id":92008,"locale":"en","key":"register.new_organization.no_name_error","value":"Please
|
||||||
|
tell us your organization''s name","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:06:48.248Z","updated_at":"2014-07-22T00:12:21.428Z"}'
|
||||||
|
world.ca.nb.name:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/"
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":1487,"locale":"en","key":"world.ca.nb.name","value":"New Brunswick","interpolations":[],"is_proc":false,"created_at":"2014-05-04T05:27:41.999Z","updated_at":"2014-05-04T05:27:42.039Z"}'
|
||||||
|
form.placeholder.Enter_your_firstname:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91962,"locale":"en","key":"form.placeholder.Enter_your_firstname","value":"Francis?
|
||||||
|
Frances? Phransiz?","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:40:00.075Z","updated_at":"2014-07-21T01:53:51.732Z"}'
|
||||||
|
form.label.firstname:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91945,"locale":"en","key":"form.label.firstname","value":"First name","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:33:15.267Z","updated_at":"2014-07-21T01:33:15.278Z"}'
|
||||||
|
form.placeholder.Enter_your_lastname:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91963,"locale":"en","key":"form.placeholder.Enter_your_lastname","value":"Smith?
|
||||||
|
Ng?","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:42:51.398Z","updated_at":"2014-07-21T01:42:51.409Z"}'
|
||||||
|
form.label.lastname:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91948,"locale":"en","key":"form.label.lastname","value":"Last name","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:34:35.847Z","updated_at":"2014-07-21T01:34:35.859Z"}'
|
||||||
|
form.placeholder.Enter_your_username:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91971,"locale":"en","key":"form.placeholder.Enter_your_username","value":"How
|
||||||
|
would you like to be known?","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:48:51.318Z","updated_at":"2014-07-21T01:48:56.170Z"}'
|
||||||
|
form.label.username:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91955,"locale":"en","key":"form.label.username","value":"Preferred name","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:36:18.747Z","updated_at":"2014-07-21T01:36:18.758Z"}'
|
||||||
|
registration.primary.role_title:
|
||||||
languages: []
|
languages: []
|
||||||
pages:
|
pages:
|
||||||
- /
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
form.label.is_participant:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91946,"locale":"en","key":"form.label.is_participant","value":"A conference
|
||||||
|
participant","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:34:27.255Z","updated_at":"2014-07-21T01:34:27.267Z"}'
|
||||||
|
form.label.is_volunteer:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91947,"locale":"en","key":"form.label.is_volunteer","value":"A volunteer","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:34:33.243Z","updated_at":"2014-07-21T01:34:33.255Z"}'
|
||||||
|
cancel:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":92003,"locale":"en","key":"cancel","value":"Cancel","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:04:53.461Z","updated_at":"2014-07-22T00:04:53.473Z"}'
|
||||||
|
next:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91977,"locale":"en","key":"next","value":"next","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:51:54.465Z","updated_at":"2014-07-21T01:51:54.477Z"}'
|
||||||
|
registration.cancel.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.cancel.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
'no':
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
'yes':
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.cancelled.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.cancelled.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.housing:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.housing.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.housing_extra.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
form.placeholder.Enter_your_.questions.housing_extra:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91959,"locale":"en","key":"form.placeholder.Enter_your_.questions.housing_extra","value":"Preferences?
|
||||||
|
Concerns? Whatever.","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:39:27.543Z","updated_at":"2014-07-21T01:39:27.555Z"}'
|
||||||
|
registration.questions.loaner_bike:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.loaner_bike.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.workshop:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.questions.workshop.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
'Yes':
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91981,"locale":"en","key":"Yes","value":"Yes","interpolations":[],"is_proc":false,"created_at":"2014-07-21T02:03:02.555Z","updated_at":"2014-07-21T02:03:02.627Z"}'
|
||||||
|
'No':
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91978,"locale":"en","key":"No","value":"No","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:51:55.944Z","updated_at":"2014-07-21T01:51:55.955Z"}'
|
||||||
|
registration.questions.other:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
form.placeholder.Enter_your_.questions.other:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91960,"locale":"en","key":"form.placeholder.Enter_your_.questions.other","value":"Anything
|
||||||
|
else that we should know....","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:39:45.419Z","updated_at":"2014-07-21T01:39:45.431Z"}'
|
||||||
|
submit:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
register.email.registration.subject:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
vars:
|
||||||
|
- :conference_title
|
||||||
|
data: []
|
||||||
|
register.email.registration.please_confirm:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
vars:
|
||||||
|
- :username
|
||||||
|
data: []
|
||||||
|
register.email.registration.confirm_button:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
register.organizations.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
register.organizations.description:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
all_organizations:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":92002,"locale":"en","key":"all_organizations","value":"All organizations","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:04:45.086Z","updated_at":"2014-07-22T00:04:48.200Z"}'
|
||||||
|
world.ca.name:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":113,"locale":"en","key":"world.ca.name","value":"Canada","interpolations":[],"is_proc":false,"created_at":null,"updated_at":"2014-04-27T21:35:22.347Z"}'
|
||||||
|
orgnizations_filter.placeholder:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91979,"locale":"en","key":"orgnizations_filter.placeholder","value":"Organization
|
||||||
|
name or location","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:52:13.721Z","updated_at":"2014-07-21T01:52:13.732Z"}'
|
||||||
|
my_organizations:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91976,"locale":"en","key":"my_organizations","value":"My Organizations","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:51:51.454Z","updated_at":"2014-07-21T01:51:51.465Z"}'
|
||||||
|
form.label.add_new_org:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91943,"locale":"en","key":"form.label.add_new_org","value":"My organization
|
||||||
|
isn''t listed here","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:33:04.823Z","updated_at":"2014-07-21T01:33:04.834Z"}'
|
||||||
|
form.label.no_org:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":91949,"locale":"en","key":"form.label.no_org","value":"I currently do not
|
||||||
|
belong to any organization","interpolations":[],"is_proc":false,"created_at":"2014-07-21T01:35:06.287Z","updated_at":"2014-07-21T01:35:06.299Z"}'
|
||||||
|
registration.thanks.title:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.thanks.remember_to_confirm:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
registration.thanks.remember_to_confirm.help:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
resend_confirmation_email:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data: []
|
||||||
|
register.email.registration_confirmed.subject:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
vars:
|
||||||
|
- :conference_title
|
||||||
|
data: []
|
||||||
|
register.organizations.confirm_thanks.title:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":92013,"locale":"en","key":"register.organizations.confirm_thanks.title","value":"","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:10:13.343Z","updated_at":"2014-07-22T00:10:13.355Z"}'
|
||||||
|
register.organizations.confirm_thanks.is_not_workshop_host.help:
|
||||||
|
languages:
|
||||||
|
- en
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
|
data:
|
||||||
|
- '{"id":92012,"locale":"en","key":"register.organizations.confirm_thanks.is_not_workshop_host.help","value":"","interpolations":[],"is_proc":false,"created_at":"2014-07-22T00:10:09.190Z","updated_at":"2014-07-22T00:10:09.203Z"}'
|
||||||
|
register.organizations.confirm_thanks.payment_notice:
|
||||||
|
languages: []
|
||||||
|
pages:
|
||||||
|
- "/conferences/:conference_type/:conference_slug/register(/:step)"
|
||||||
data: []
|
data: []
|
||||||
|
@ -15,6 +15,10 @@ BikeBike::Application.routes.draw do
|
|||||||
#get :register, :param => 'step'
|
#get :register, :param => 'step'
|
||||||
#post 'register/next' => 'conferences#register_submit'
|
#post 'register/next' => 'conferences#register_submit'
|
||||||
match 'register(/:step)' => 'conferences#register', via: [:get, :post]
|
match 'register(/:step)' => 'conferences#register', via: [:get, :post]
|
||||||
|
get 'register/confirm/:confirmation_token' => 'conferences#register_confirm'
|
||||||
|
match 'register/pay-registration/:confirmation_token' => 'conferences#register_pay_registration', via: [:get, :post]
|
||||||
|
get 'register/confirm-payment/:confirmation_token' => 'conferences#register_confirm_payment'
|
||||||
|
get 'register/cancel-payment/:confirmation_token' => 'conferences#register_cancel_payment'
|
||||||
#patch 'register/step/:step' => 'conferences#register_step'
|
#patch 'register/step/:step' => 'conferences#register_step'
|
||||||
#resources :registrations, :path => 'registration' do
|
#resources :registrations, :path => 'registration' do
|
||||||
# get :form, on: :collection
|
# get :form, on: :collection
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddEmailToConferenceRegistrations < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :conference_registrations, :email, :string
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddIsCompleteToConferenceRegistrations < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :conference_registrations, :complete, :boolean
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddCompletedToConferenceRegistrations < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :conference_registrations, :completed, :boolean
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddPaymentConfirmationTokenToConferenceRegistration < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :conference_registrations, :payment_confirmation_token, :string
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddPaymentInfoToConferenceRegistration < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :conference_registrations, :payment_info, :string
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddOrderToWorkshopStreams < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :workshop_streams, :order, :integer
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddOrderToWorkshopPresentationStyles < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :workshop_presentation_styles, :order, :integer
|
||||||
|
end
|
||||||
|
end
|
@ -11,7 +11,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20140716002152) do
|
ActiveRecord::Schema.define(version: 20140723183557) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
@ -66,6 +66,11 @@ ActiveRecord::Schema.define(version: 20140716002152) do
|
|||||||
t.boolean "is_volunteer"
|
t.boolean "is_volunteer"
|
||||||
t.string "confirmation_token"
|
t.string "confirmation_token"
|
||||||
t.binary "data"
|
t.binary "data"
|
||||||
|
t.string "email"
|
||||||
|
t.boolean "complete"
|
||||||
|
t.boolean "completed"
|
||||||
|
t.string "payment_confirmation_token"
|
||||||
|
t.string "payment_info"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "conference_types", force: true do |t|
|
create_table "conference_types", force: true do |t|
|
||||||
@ -267,6 +272,7 @@ ActiveRecord::Schema.define(version: 20140716002152) do
|
|||||||
t.string "info"
|
t.string "info"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
t.integer "order"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "workshop_requested_resources", force: true do |t|
|
create_table "workshop_requested_resources", force: true do |t|
|
||||||
@ -291,6 +297,7 @@ ActiveRecord::Schema.define(version: 20140716002152) do
|
|||||||
t.string "info"
|
t.string "info"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
t.integer "order"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "workshops", force: true do |t|
|
create_table "workshops", force: true do |t|
|
||||||
|
@ -1,9 +1,24 @@
|
|||||||
Feature: Landing Page
|
Feature: Landing Page
|
||||||
As a person interested in bikebike
|
In order to learn about Bike!Bike!
|
||||||
I want to find out about the current bikebike
|
As a visitor
|
||||||
In order to attend the conference
|
|
||||||
|
|
||||||
Scenario: Read landing page content
|
Scenario: See a more info link
|
||||||
Given I am on the landing page
|
Given There is an upcoming conference in Halifax NS
|
||||||
Then I can read about the current bikebike
|
And I am on the landing page
|
||||||
And I can register for the conference
|
Then I see the Bike!Bike! logo
|
||||||
|
And I see the Conferences menu item
|
||||||
|
And I see the Organizations menu item
|
||||||
|
And I see the Resources menu item
|
||||||
|
And I see Halifax
|
||||||
|
And I see More Info
|
||||||
|
|
||||||
|
Scenario: See a register link
|
||||||
|
Given There is an upcoming conference in Halifax NS
|
||||||
|
And Registration is open
|
||||||
|
And I am on the landing page
|
||||||
|
Then I see the Bike!Bike! logo
|
||||||
|
And I see the Conferences menu item
|
||||||
|
And I see the Organizations menu item
|
||||||
|
And I see the Resources menu item
|
||||||
|
And I see Halifax
|
||||||
|
And I see a Register Now link
|
||||||
|
0
features/organizations.feature
Normal file
0
features/registration-two.feature
Normal file
593
features/registration.feature
Normal file
@ -0,0 +1,593 @@
|
|||||||
|
Feature: Registration
|
||||||
|
In order to register for the latest Bike!Bike!
|
||||||
|
As a visitor
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as participant with some second thoughts
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with shout@me.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Joe
|
||||||
|
And I fill in my lastname with Smith
|
||||||
|
And I fill in my username with Joey
|
||||||
|
And I check is_participant
|
||||||
|
And I press cancel
|
||||||
|
|
||||||
|
Then I should see you will lose the infomation you have submitted
|
||||||
|
Then I press no
|
||||||
|
And I should see Attending as
|
||||||
|
And firstname should be set to Joe
|
||||||
|
And lastname should be set to Smith
|
||||||
|
And username should be set to Joey
|
||||||
|
And is_participant should be checked
|
||||||
|
And is_volunteer should not be checked
|
||||||
|
|
||||||
|
Then I press cancel
|
||||||
|
And press yes
|
||||||
|
Then I should see Your registration has been cancelled
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as participant
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with shout@me.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Joe
|
||||||
|
And I fill in my lastname with Smith
|
||||||
|
And I fill in my username with Joey
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select couch from housing
|
||||||
|
And I fill in housing extra with I'm easy
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select Yes, from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with Nope
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
But my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And I should see Who do you Represent
|
||||||
|
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I click on The Bike Bush
|
||||||
|
And press next
|
||||||
|
And my registration is completed
|
||||||
|
|
||||||
|
Then in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
And I am not a user
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
And I should see Thanks for completing your registration
|
||||||
|
And my registration is confirmed
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
And I am a user
|
||||||
|
And I am a member of The Bike Bush
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as eager participant
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with goodgodwin@hotmail.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Michael
|
||||||
|
And I fill in my lastname with Godwin
|
||||||
|
And I fill in my username with Godwin
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select bed from housing
|
||||||
|
And I fill in housing extra with I have a bad back
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select large from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with I'm coming two months early
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
And my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link
|
||||||
|
And I see Who do you Represent
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
Then I see Thanks for confirming
|
||||||
|
And I see Who do you Represent
|
||||||
|
And my registration is confirmed
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I click on Cool Cats Bikes
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
But my registration is not paid
|
||||||
|
|
||||||
|
Then I should get a Thanks email
|
||||||
|
And in the email I should see pay the registration donation
|
||||||
|
And in the email I should see a pay registration link
|
||||||
|
|
||||||
|
When I go to the pay registration page
|
||||||
|
Then I see Thanks for completing your registration
|
||||||
|
And I see we ask that you pay
|
||||||
|
And I see payment amount
|
||||||
|
And I see submit payment
|
||||||
|
|
||||||
|
Then I fill in payment amount with 12.34
|
||||||
|
And press submit payment
|
||||||
|
Then I should see Your order summary
|
||||||
|
|
||||||
|
When I finish paying
|
||||||
|
Then I should see We'll see you in Moncton
|
||||||
|
And my registration is paid
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as really eager participant
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with goodgodwin@hotmail.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Michael
|
||||||
|
And I fill in my lastname with Godwin
|
||||||
|
And I fill in my username with Godwin
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select bed from housing
|
||||||
|
And I fill in housing extra with I have a bad back
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select large from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with I'm coming two months early
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
And my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link
|
||||||
|
And I see Who do you Represent
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
Then I see Thanks for confirming
|
||||||
|
And I see Who do you Represent
|
||||||
|
And my registration is confirmed
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I click on Cool Cats Bikes
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
But my registration is not paid
|
||||||
|
|
||||||
|
Then I should get a Thanks email
|
||||||
|
And in the email I should see pay the registration donation
|
||||||
|
And in the email I should see a pay registration link
|
||||||
|
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And I see we ask that you pay
|
||||||
|
And I see payment amount
|
||||||
|
And I see submit payment
|
||||||
|
|
||||||
|
Then I fill in payment amount with 12.34
|
||||||
|
And press submit payment
|
||||||
|
Then I should see Your order summary
|
||||||
|
|
||||||
|
When I finish paying
|
||||||
|
Then I should see We'll see you in Moncton
|
||||||
|
And my registration is paid
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as eager with second thoughts
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with goodgodwin@hotmail.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Michael
|
||||||
|
And I fill in my lastname with Godwin
|
||||||
|
And I fill in my username with Godwin
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select bed from housing
|
||||||
|
And I fill in housing extra with I have a bad back
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select large from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with I'm coming two months early
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
And my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link
|
||||||
|
And I see Who do you Represent
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
Then I see Thanks for confirming
|
||||||
|
And I see Who do you Represent
|
||||||
|
And my registration is confirmed
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I click on Cool Cats Bikes
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
But my registration is not paid
|
||||||
|
|
||||||
|
Then I should get a Thanks email
|
||||||
|
And in the email I should see pay the registration donation
|
||||||
|
And in the email I should see a pay registration link
|
||||||
|
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And I see we ask that you pay
|
||||||
|
And I see payment amount
|
||||||
|
And I see submit payment
|
||||||
|
|
||||||
|
Then I fill in payment amount with 12.34
|
||||||
|
And press submit payment
|
||||||
|
Then I should see Your order summary
|
||||||
|
|
||||||
|
When I cancel the payment
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And I see we ask that you pay
|
||||||
|
And my registration is not paid
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as workshop host
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with scream@me.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Joe
|
||||||
|
And I fill in my lastname with Smith
|
||||||
|
And I fill in my username with Joey
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select couch from housing
|
||||||
|
And I fill in housing extra with I'm easy
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select Yes, from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select Yes from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with Nope
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
But my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And I should see Who do you Represent
|
||||||
|
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I click on The Bike Bush
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Workshop Information
|
||||||
|
Then I fill in title with How make your shop more Capitalist
|
||||||
|
Then I set info to Lorem Ipsum and Stuff
|
||||||
|
Then I select organization management from stream
|
||||||
|
Then I select presentation from presentation style
|
||||||
|
Then I fill in notes with Down with all the anarchists
|
||||||
|
Then press next
|
||||||
|
|
||||||
|
Then in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
And I should see Thanks for completing your registration
|
||||||
|
And my registration is confirmed
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register with new organization
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with example@example.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Emma
|
||||||
|
And I fill in my lastname with Smith
|
||||||
|
And I fill in my username with Em
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select couch from housing
|
||||||
|
And I fill in housing extra with I'm easy
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select small from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with Nope
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
But my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And I should see Who do you Represent
|
||||||
|
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I check add new org
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
Then I should see Your Organization Information
|
||||||
|
Then I fill in name with The Bike Fridge
|
||||||
|
Then I set info to Lorem Ipsum and Stuff
|
||||||
|
Then I fill in organization email with info@bikefridge.org
|
||||||
|
Then I fill in street with 1044 Mushaboom Road
|
||||||
|
Then I fill in city with Mushaboom
|
||||||
|
Then I select ca from country
|
||||||
|
Then I select ns from territory
|
||||||
|
Then press next
|
||||||
|
|
||||||
|
Then in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
And I should see Thanks for completing your registration
|
||||||
|
And my registration is confirmed
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
And I am a member of The Bike Fridge
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register with new organization in usa
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And I am in San Francisco, California, USA
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with example@example.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Emma
|
||||||
|
And I fill in my lastname with Smith
|
||||||
|
And I fill in my username with Em
|
||||||
|
And I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
And I see Do you require housing?
|
||||||
|
And I select couch from housing
|
||||||
|
And I fill in housing extra with I'm easy
|
||||||
|
|
||||||
|
And I see Do you want to borrow a bike?
|
||||||
|
And I select small from loaner bike
|
||||||
|
|
||||||
|
And I see Would you like to host a workshop?
|
||||||
|
And I select No from workshop host
|
||||||
|
|
||||||
|
And I see Anything else
|
||||||
|
And I fill in other with Nope
|
||||||
|
And I should not be registered for the conference
|
||||||
|
|
||||||
|
And I press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
But my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And I should see Who do you Represent
|
||||||
|
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I check add new org
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
Then I should see Your Organization Information
|
||||||
|
Then I fill in name with The Bike Fridge
|
||||||
|
Then I set info to Lorem Ipsum and Stuff
|
||||||
|
Then I fill in organization email with info@bikefridge.org
|
||||||
|
Then I fill in street with 1044 Mushaboom Road
|
||||||
|
Then I fill in city with Mushaboom
|
||||||
|
Then I select us from country
|
||||||
|
Then I select ny from territory
|
||||||
|
Then press next
|
||||||
|
|
||||||
|
Then in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
And I should see Thanks for completing your registration
|
||||||
|
And my registration is confirmed
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
And I am a member of The Bike Fridge
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Lazy participant
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
And an organization named The Bike Bush exists in Musquodoboit Harbour NS
|
||||||
|
And an organization named Cool Cats Bikes exists in Sackville NB
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with example@example.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I press next
|
||||||
|
But I see please tell us your name
|
||||||
|
|
||||||
|
Then I fill in my firstname with Emma
|
||||||
|
And I press next
|
||||||
|
But I see please tell us your name
|
||||||
|
|
||||||
|
Then I fill in my lastname with Smith
|
||||||
|
And I press next
|
||||||
|
But I see attending the conference or volunteering
|
||||||
|
|
||||||
|
Then I check is_participant
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
Then I select Yes from workshop host
|
||||||
|
And press submit
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
But my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And I should see Who do you Represent
|
||||||
|
|
||||||
|
But my registration is not complete
|
||||||
|
And my registration is not completed
|
||||||
|
|
||||||
|
Then I press next
|
||||||
|
But I see Please select an organization
|
||||||
|
|
||||||
|
Then I click on The Bike Bush
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Workshop Information
|
||||||
|
But press next
|
||||||
|
|
||||||
|
But I should see Please give your workshop a title
|
||||||
|
Then I fill in title with Why do I have to give all this info right now?
|
||||||
|
And press next
|
||||||
|
|
||||||
|
But I should see Please describe your workshop
|
||||||
|
Then I set info to Lorem Ipsum and Stuff
|
||||||
|
|
||||||
|
Then I select organization management from stream
|
||||||
|
And I select presentation from presentation style
|
||||||
|
And press next
|
||||||
|
|
||||||
|
Then I should see Thanks for submitting your registration
|
||||||
|
|
||||||
|
Then in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
And I should see Thanks for completing your registration
|
||||||
|
And my registration is confirmed
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
||||||
|
And I am a member of The Bike Bush
|
||||||
|
And My firstname should be Emma
|
||||||
|
And My lastname should be Smith
|
||||||
|
And My username should be Emma Smith
|
@ -1,13 +1,215 @@
|
|||||||
Given(/^I am on the (.+) page$/) do |page_name|
|
Given(/^I am on the (.+) page$/) do |page_name|
|
||||||
visit path_to(page_name)
|
visit path_to(page_name.to_sym)
|
||||||
end
|
end
|
||||||
|
|
||||||
Then(/^I can read about the current bikebike$/) do
|
Given(/^I am on the (.+) site$/) do |language|
|
||||||
within('#conference-name') { expect(page).to have_text 'Bike!Bike!' }
|
ApplicationController::set_host (get_language_code(language) + '.bikebike.org')
|
||||||
within('#conference-location') { expect(page).to have_text 'Columbus, Ohio' }
|
|
||||||
within('#conference-date') { expect(page).to have_text 'August 30 - September 1' }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
Then(/^I can register for the conference$/) do
|
Given(/^I am in (.+)$/) do |location|
|
||||||
expect(page).to have_link 'Register'
|
ApplicationController::set_location (location)
|
||||||
|
end
|
||||||
|
|
||||||
|
When(/^I go to the (.+) page$/) do |page_name|
|
||||||
|
visit path_to(page_name.to_sym)
|
||||||
|
end
|
||||||
|
|
||||||
|
When(/^(I )?(finish|cancel) (paying|(the )?payment)$/) do |a, action, b, c|
|
||||||
|
visit path_to((action == 'finish' ? 'confirm' : action) + ' payment')
|
||||||
|
end
|
||||||
|
|
||||||
|
Given(/^There is an upcoming conference( in .+)?$/) do |location|
|
||||||
|
@last_conference = FactoryGirl.create(:upcoming_conference)
|
||||||
|
if location
|
||||||
|
@org = create_org(nil, location)
|
||||||
|
@last_conference.organizations << @org
|
||||||
|
@last_conference.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Given(/^an organization( named .+)? exists( in .+)?$/) do |name, location|
|
||||||
|
if location =~ /every country/i
|
||||||
|
Carmen::World.instance.subregions.each { |country|
|
||||||
|
#puts "#{country.code}"
|
||||||
|
|
||||||
|
if country.subregions?
|
||||||
|
country.subregions.each { |region|
|
||||||
|
org = Organization.new(name: rand(36**16).to_s(36), slug: rand(36**16).to_s(36))#create_org#(Forgery::LoremIpsum.sentence)
|
||||||
|
org.locations << Location.new(city: 'City', country: country.code, territory: region.code)
|
||||||
|
org.save!
|
||||||
|
}
|
||||||
|
else
|
||||||
|
org = Organization.new(name: rand(36**16).to_s(36), slug: rand(36**16).to_s(36))#create_org#(Forgery::LoremIpsum.sentence)
|
||||||
|
org.locations << Location.new(city: 'City', country: country.code)
|
||||||
|
org.save!
|
||||||
|
end
|
||||||
|
}
|
||||||
|
else
|
||||||
|
create_org(name ? name.gsub(/^\s*named\s+(.*?)\s*$/, '\1') : nil, location ? location.gsub(/^\s*in\s+(.*?)\s*$/, '\1') : nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Given(/^Registration is (open|closed)$/) do |status|
|
||||||
|
@last_conference.registration_open = (status == 'open')
|
||||||
|
@last_conference.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^I (should )?see (.+)$/) do | a, item |
|
||||||
|
if /(the )?Bike!Bike! logo$/ =~ item
|
||||||
|
expect(page).to have_selector('svg.logo')
|
||||||
|
elsif /(the|a)?\s?(.+) menu item$/ =~ item
|
||||||
|
within('#main-nav') { expect(page).to have_link Regexp.last_match(2) }
|
||||||
|
elsif /(the|a)?\s?(.+) image$/ =~ item
|
||||||
|
expect(page).to have_selector('#'+Regexp.last_match(2)+' img')
|
||||||
|
elsif /(the|a)?\s?(.+) link$/ =~ item
|
||||||
|
expect(page).to have_link Regexp.last_match(2)
|
||||||
|
else
|
||||||
|
expect(page).to have_text item
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
## ======= Forms ======= ##
|
||||||
|
|
||||||
|
Then(/^(I )?click on (.+?)( button| link| which is hidden)?$/) do | a, item, type |
|
||||||
|
item = item.gsub(/^\s*(a|the)\s*(.*)$/, '\2')
|
||||||
|
if type && type.strip == 'button'
|
||||||
|
click_button(item)
|
||||||
|
elsif type && type.strip == 'link'
|
||||||
|
click_link(item)
|
||||||
|
elsif type && type =~ /hidden/
|
||||||
|
find('[id$="' + item.gsub(/\s+/, '_') + '"]', :visible => false).click
|
||||||
|
else
|
||||||
|
page.find_link(item).trigger('click')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^(I )?press (.+)$/) do | a, item |
|
||||||
|
click_link_or_button(locate(item))
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^I (un)?check (.+)$/) do | state, item |
|
||||||
|
if state == 'un'
|
||||||
|
uncheck(locate(item))
|
||||||
|
else
|
||||||
|
check(locate(item))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^I fill in (.+?) with (.+)$/) do | field, value |
|
||||||
|
field = field.gsub(/^\s*(my|the)\s*(.+)$/, '\2')
|
||||||
|
fill_in(locate(field), :with => value)
|
||||||
|
|
||||||
|
if /email/ =~ field && !(/organization/ =~ field)
|
||||||
|
@last_email_entered = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^(my )?(.+)? should (not )?be set to (.+)$/) do | a, field, should, value |
|
||||||
|
field = field.gsub(/^\s*(my|the)\s*(.+)$/, '\2')
|
||||||
|
page.find('[id$="' + field.gsub(/\s+/, '_') + '"]').value.send(should.nil? ? 'should' : 'should_not', eq(value))
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^(my )?(.+)? should (not )?be checked$/) do | a, field, should |
|
||||||
|
field = field.gsub(/^\s*(my|the)\s*(.+)$/, '\2')
|
||||||
|
page.find('[id$="' + field.gsub(/\s+/, '_') + '"]').send(should.nil? ? 'should' : 'should_not', be_checked)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^I set (.+?) to (.+)$/) do | field, value |
|
||||||
|
field = field.gsub(/^\s*(my|the)\s*(.+)$/, '\2')
|
||||||
|
page.find('[id$="' + field.gsub(/\s+/, '_') + '"]', :visible => false).set value
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^(I )wait for (.+?) to appear$/) do | a, field |
|
||||||
|
count = 0
|
||||||
|
element = nil
|
||||||
|
while element.nil? && count < 120
|
||||||
|
begin element = page.find('[id$="' + field.gsub(/\s+/, '_') + '"]'); rescue; end
|
||||||
|
begin element ||= page.find('[id$="' + field.gsub(/\s+/, '_') + '"]', :visible => false); rescue; end
|
||||||
|
sleep(1)
|
||||||
|
count += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^show the page$/) do
|
||||||
|
print page.html
|
||||||
|
save_and_open_page
|
||||||
|
end
|
||||||
|
|
||||||
|
Then(/^I select (.+?) from (.+)$/) do | value, field |
|
||||||
|
select(value, :from => locate(field))
|
||||||
|
end
|
||||||
|
|
||||||
|
## ======= Emails ======= ##
|
||||||
|
|
||||||
|
Then(/^I should not get an email$/) do
|
||||||
|
ActionMailer::Base.deliveries.size.should eq 0
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^I should get an? (.+) email$/) do |subject|
|
||||||
|
@last_email = ActionMailer::Base.deliveries.last
|
||||||
|
if @last_email_entered
|
||||||
|
@last_email.to.should include @last_email_entered
|
||||||
|
end
|
||||||
|
@last_email.subject.should include(subject)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^the email should contain (.+)$/) do |value|
|
||||||
|
@last_email.parts.first.body.raw_source.should include(value)
|
||||||
|
@last_email.parts.last.body.raw_source.should include(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^in the email I should see (.+)$/) do |value|
|
||||||
|
if /(an?|the|my) (.+) link/ =~ value
|
||||||
|
test = path_to Regexp.last_match(2)
|
||||||
|
@last_email.parts.first.body.raw_source.should include(test)
|
||||||
|
@last_email.parts.last.body.raw_source.should include(test)
|
||||||
|
else
|
||||||
|
@last_email.parts.first.body.raw_source.should include(value)
|
||||||
|
@last_email.parts.last.body.raw_source.should include(value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^I should (not )?be registered for the conference$/) do |state|
|
||||||
|
@last_registration = ConferenceRegistration.find_by(:email => @last_email_entered)
|
||||||
|
if state && state.strip == 'not'
|
||||||
|
@last_registration.should be_nil
|
||||||
|
else
|
||||||
|
@last_registration.should_not be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^my registration (should( not)? be|is( not)?) (confirmed|completed?|paid)$/) do |state, x, y, field|
|
||||||
|
ConferenceRegistration.find_by!(:email => @last_email_entered).
|
||||||
|
send(field == 'confirmed' ? 'is_confirmed' : (field == 'paid' ? 'payment_info' : field)).
|
||||||
|
send(state =~ / not/ ? 'should_not' : 'should', be)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^I am( not)? a user$/) do |state|
|
||||||
|
User.find_by(:email => @last_email_entered).
|
||||||
|
send(state =~ / not/ ? 'should_not' : 'should', be)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^I am( not)? a member of (.+)$/) do |state, org_name|
|
||||||
|
user = nil
|
||||||
|
should_be = !(state =~ / not/)
|
||||||
|
org = Organization.find_by(:name => org_name)
|
||||||
|
if should_be
|
||||||
|
org.should be
|
||||||
|
org.users.should be
|
||||||
|
elsif org.nil? || org.users.nil?
|
||||||
|
return
|
||||||
|
end
|
||||||
|
org.users.each { |u|
|
||||||
|
if u.email == @last_email_entered
|
||||||
|
user = u
|
||||||
|
end
|
||||||
|
}
|
||||||
|
user.send(should_be ? 'should' : 'should_not', be)
|
||||||
|
end
|
||||||
|
|
||||||
|
Then (/^My (.+) should(not )? be (.+)$/) do |field, state, value|
|
||||||
|
User.find_by(:email => @last_email_entered).
|
||||||
|
send(field.gsub(/\s/, '_')).
|
||||||
|
send(state =~ / not/ ? 'should_not' : 'should', eq(value))
|
||||||
end
|
end
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
# files.
|
# files.
|
||||||
|
|
||||||
require 'cucumber/rails'
|
require 'cucumber/rails'
|
||||||
|
require 'capybara/poltergeist'
|
||||||
|
|
||||||
# Capybara defaults to CSS3 selectors rather than XPath.
|
# Capybara defaults to CSS3 selectors rather than XPath.
|
||||||
# If you'd prefer to use XPath, just uncomment this line and adjust any
|
# If you'd prefer to use XPath, just uncomment this line and adjust any
|
||||||
@ -31,11 +32,53 @@ ActionController::Base.allow_rescue = false
|
|||||||
# Remove/comment out the lines below if your app doesn't have a database.
|
# Remove/comment out the lines below if your app doesn't have a database.
|
||||||
# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
|
# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
|
||||||
begin
|
begin
|
||||||
DatabaseCleaner.strategy = :transaction
|
DatabaseCleaner.strategy = :truncation
|
||||||
|
#DatabaseCleaner.clean_with(:truncation)
|
||||||
rescue NameError
|
rescue NameError
|
||||||
raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
|
raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_translations = Array.new
|
||||||
|
Carmen::World.instance.subregions.each { |country|
|
||||||
|
add_translations << "world.#{country.code.downcase}.name"
|
||||||
|
if country.subregions?
|
||||||
|
country.subregions.each { |region| add_translations << "world.#{country.code.downcase}.#{region.code.downcase}.name" }
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
I18n::Backend::BikeBike::init_tests!# add_translations
|
||||||
|
|
||||||
|
#at_exit do
|
||||||
|
# I18n::Backend::BikeBike::end_tests!
|
||||||
|
#end
|
||||||
|
|
||||||
|
Before('@javascript') do
|
||||||
|
ActiveRecord::Base.shared_connection = nil
|
||||||
|
ActiveRecord::Base.descendants.each do |model|
|
||||||
|
model.shared_connection = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Before do
|
||||||
|
#DatabaseCleaner.start
|
||||||
|
Translation.connection.execute("INSERT INTO translations (locale, key, value) VALUES('en', 'time.formats.date', '%B %d, %Y');")
|
||||||
|
Translation.connection.execute("INSERT INTO translations (locale, key, value, is_proc) VALUES('en', 'date.month_names', '[\"~\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]', TRUE);")
|
||||||
|
ConferenceType.connection.execute("INSERT INTO conference_types (slug) VALUES ('bikebike'), ('regional'), ('bici-congreso')")
|
||||||
|
WorkshopStream.connection.execute("INSERT INTO workshop_streams (slug) VALUES ('mechanics'), ('leisure'), ('interorganizational_relations'), ('ethics_public_relations'), ('organization_management')")
|
||||||
|
WorkshopPresentationStyle.connection.execute("INSERT INTO workshop_presentation_styles (slug) VALUES ('discussion'), ('panel'), ('presentation'), ('hands-on'), ('other')")
|
||||||
|
#host! 'en.bikebike.org'
|
||||||
|
ApplicationController::set_host 'en.bikebike.org'
|
||||||
|
ApplicationController::set_location nil
|
||||||
|
end
|
||||||
|
|
||||||
|
After do |scenario|
|
||||||
|
save_and_open_page if scenario.failed?
|
||||||
|
end
|
||||||
|
|
||||||
|
#After do
|
||||||
|
# DatabaseCleaner.clean
|
||||||
|
#end
|
||||||
|
|
||||||
# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios.
|
# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios.
|
||||||
# See the DatabaseCleaner documentation for details. Example:
|
# See the DatabaseCleaner documentation for details. Example:
|
||||||
#
|
#
|
||||||
@ -54,5 +97,46 @@ end
|
|||||||
# Possible values are :truncation and :transaction
|
# Possible values are :truncation and :transaction
|
||||||
# The :transaction strategy is faster, but might give you threading problems.
|
# The :transaction strategy is faster, but might give you threading problems.
|
||||||
# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature
|
# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature
|
||||||
Cucumber::Rails::Database.javascript_strategy = :truncation
|
Cucumber::Rails::Database.javascript_strategy = :transaction
|
||||||
|
Capybara.register_driver :poltergeist_debug do |app|
|
||||||
|
Capybara::Poltergeist::Driver.new(app, :timeout => 120, inspector: true)
|
||||||
|
end
|
||||||
|
Capybara.javascript_driver = :poltergeist_debug
|
||||||
|
Geocoder.configure(:timeout => 60)
|
||||||
|
|
||||||
|
def locate(id)
|
||||||
|
page.find('[id$="' + id.gsub(/\s+/, '_') + '"]')[:id]
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_org(name = nil, location = nil)
|
||||||
|
org = FactoryGirl.create(:org)
|
||||||
|
found_location = nil
|
||||||
|
if !location.nil?
|
||||||
|
l = Geocoder.search(location).first
|
||||||
|
begin
|
||||||
|
found_location = Location.new(city: l.city, territory: l.province_code, country: l.country_code, latitude: l.latitude, longitude: l.longitude)
|
||||||
|
rescue; end
|
||||||
|
if found_location.nil?
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if !name.nil?
|
||||||
|
org.name = name
|
||||||
|
org.slug = org.generate_slug(name, found_location)
|
||||||
|
end
|
||||||
|
if !found_location.nil?
|
||||||
|
org.locations << found_location
|
||||||
|
end
|
||||||
|
org.save!
|
||||||
|
org
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_language_code(language)
|
||||||
|
languages = {
|
||||||
|
'english' => 'en',
|
||||||
|
'french' => 'fr',
|
||||||
|
'spanish' => 'es',
|
||||||
|
'german' => 'de'
|
||||||
|
}
|
||||||
|
languages[language.downcase]
|
||||||
|
end
|
||||||
|
22
features/support/factory_girl.rb
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
FactoryGirl.define do
|
||||||
|
factory :upcoming_conference, :class => 'Conference' do
|
||||||
|
title 'My Bike!Bike!'
|
||||||
|
slug 'MyBikeBike'
|
||||||
|
info 'Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.'
|
||||||
|
poster 'poster.jpg'
|
||||||
|
cover 'cover.jpg'
|
||||||
|
registration_open false
|
||||||
|
start_date Date.today - 30.days
|
||||||
|
end_date Date.today - 26.days
|
||||||
|
conference_type_id (ConferenceType.find_by(:slug => 'bikebike') || ConferenceType.create(:slug => 'bikebike')).id
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :org, :class => 'Organization' do
|
||||||
|
name 'My Organization'
|
||||||
|
info 'Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.'
|
||||||
|
avatar 'avatar.jpg'
|
||||||
|
cover 'cover.jpg'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
World(FactoryGirl::Syntax::Methods)
|
@ -1,18 +1,36 @@
|
|||||||
module NavigationHelpers
|
module NavigationHelpers
|
||||||
def path_to(page_name)
|
def path_to(page_name)
|
||||||
case page_name
|
append_root = false
|
||||||
when /^landing$/i
|
case page_name
|
||||||
path = 'root'
|
when /^landing$/i
|
||||||
end
|
path = :root
|
||||||
|
when /^confirmation$/i
|
||||||
|
path = "/conferences/bikebike/#{@last_conference.slug}/register/confirm/#{@last_registration.confirmation_token}"
|
||||||
|
when /^pay registration$/i
|
||||||
|
path = "/conferences/bikebike/#{@last_conference.slug}/register/pay-registration/#{@last_registration.confirmation_token}"
|
||||||
|
when /^confirm payment$/i
|
||||||
|
path = "/conferences/bikebike/#{@last_conference.slug}/register/confirm-payment/#{@last_registration.payment_confirmation_token}"
|
||||||
|
when /^cancel payment$/i
|
||||||
|
path = "/conferences/bikebike/#{@last_conference.slug}/register/cancel-payment/#{@last_registration.confirmation_token}"
|
||||||
|
when /^translation list$/i
|
||||||
|
path = '/translations/'
|
||||||
|
when /^(.+) translations?$/i
|
||||||
|
path = '/translations/' + get_language_code(Regexp.last_match(1))
|
||||||
|
when /^organization list$/i
|
||||||
|
path = '/organizations/'
|
||||||
|
end
|
||||||
|
|
||||||
begin
|
if path.is_a?(Symbol)
|
||||||
self.send((path + '_url').to_sym)
|
begin
|
||||||
rescue Object => e
|
path = self.send((path.to_s + '_url').to_sym).gsub(/^http:\/\/.+?(\/.*)$/, '\1')
|
||||||
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
rescue Object => e
|
||||||
"#{path}_url\n" +
|
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
||||||
"Now, go and add a mapping in #{__FILE__}"
|
"#{path}_url\n" +
|
||||||
end
|
"Now, go and add a mapping in #{__FILE__}"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
path
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
World(NavigationHelpers)
|
World(NavigationHelpers)
|
||||||
|
16
features/translations.feature
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Feature: Translation Pages
|
||||||
|
In order to Translate Bike!Bike!
|
||||||
|
As a visitor
|
||||||
|
|
||||||
|
Scenario: Visit Translation List Page
|
||||||
|
Given I am on the English site
|
||||||
|
And I am on the translation list page
|
||||||
|
Then I see Translations
|
||||||
|
And I see list
|
||||||
|
And I see active
|
||||||
|
And I see inactive
|
||||||
|
|
||||||
|
Scenario: Visit English Translation Page
|
||||||
|
Given I am on the English site
|
||||||
|
And I am on the english translations page
|
||||||
|
Then I see language translations
|
46
features/volunteer-registration.feature
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Feature: Volunteer Registration
|
||||||
|
In order to register to volunteer at the latest Bike!Bike!
|
||||||
|
As a visitor
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Register as volunteer
|
||||||
|
Given There is an upcoming conference in Moncton NB
|
||||||
|
And Registration is open
|
||||||
|
|
||||||
|
When I go to the landing page
|
||||||
|
Then I see a Register Now link
|
||||||
|
And I click on the Register Now link
|
||||||
|
|
||||||
|
And I fill in my email with example@example.com
|
||||||
|
And I press register
|
||||||
|
|
||||||
|
And I fill in my firstname with Francis
|
||||||
|
And I fill in my lastname with Bacon
|
||||||
|
And I fill in my username with Bacon
|
||||||
|
And I check is_volunteer
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
Then I see Contact Information
|
||||||
|
And I fill in address with 1234 Some St.
|
||||||
|
And I fill in phone number with 555-555-5555
|
||||||
|
|
||||||
|
Then I see Do you have housing
|
||||||
|
And I fill in beds with 0
|
||||||
|
And I fill in couch_space with 5
|
||||||
|
And I fill in tents with 2
|
||||||
|
|
||||||
|
Then I see Anything else
|
||||||
|
And I fill in other with So excited!
|
||||||
|
|
||||||
|
And I press next
|
||||||
|
|
||||||
|
Then I should be registered for the conference
|
||||||
|
And my registration should not be confirmed
|
||||||
|
And I should get a confirm email
|
||||||
|
And in the email I should see please confirm your registration
|
||||||
|
And in the email I should see a confirmation link registration
|
||||||
|
|
||||||
|
When I go to the confirmation page
|
||||||
|
Then I should see Thanks for completing your registration
|
||||||
|
And my registration is complete
|
||||||
|
And my registration is completed
|
BIN
public/registration_data/1ehptyshk26pjbe8/ba.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
public/registration_data/2zizzr5nokd1rh7d/Thumbs.db
Normal file
BIN
public/registration_data/2zizzr5nokd1rh7d/bikeagaindoor[1].jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
public/registration_data/9vpeci4qzca7qs3o/Thumbs.db
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
public/registration_data/c1g7e2jsyqrp62rv/Thumbs.db
Normal file
BIN
public/registration_data/c1g7e2jsyqrp62rv/bikeagaindoor[1].jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
public/registration_data/c7evv341mlp3k4ek/Thumbs.db
Normal file
BIN
public/registration_data/c7evv341mlp3k4ek/bikeagaindoor[1].jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
public/registration_data/e0vs4ovunuo2i32i/ba.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
public/registration_data/lqgjjhzaew2klf7y/Thumbs.db
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
public/registration_data/qabyxh5an79d1sf1/Thumbs.db
Normal file
BIN
public/registration_data/qabyxh5an79d1sf1/bikeagaindoor[1].jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
public/registration_data/tlxsjj1ljiqbvoai/lb.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
@ -43,6 +43,7 @@ RSpec.configure do |config|
|
|||||||
config.order = "random"
|
config.order = "random"
|
||||||
|
|
||||||
config.before(:each) do
|
config.before(:each) do
|
||||||
|
fu
|
||||||
Translation.connection.execute("TRUNCATE TABLE translations RESTART IDENTITY;")
|
Translation.connection.execute("TRUNCATE TABLE translations RESTART IDENTITY;")
|
||||||
translations = DevTranslation.connection.select_all("SELECT * FROM translations")
|
translations = DevTranslation.connection.select_all("SELECT * FROM translations")
|
||||||
|
|
||||||
|