From 1430e505a0f1e184c875c546a1eb249283ecb133 Mon Sep 17 00:00:00 2001 From: Godwin Date: Thu, 24 Jul 2014 00:16:33 -0600 Subject: [PATCH] Paypal Registration --- Gemfile | 3 + Gemfile.lock | 417 ++++++++++++ app/assets/images/Thumbs.db | Bin 239616 -> 254976 bytes app/assets/images/bblogo.png | Bin 0 -> 10233 bytes app/assets/stylesheets/sass/_base.scss | 81 +++ app/assets/stylesheets/sass/_layout.scss | 54 +- app/controllers/application_controller.rb | 23 + app/controllers/conferences_controller.rb | 484 +++++++++++--- app/controllers/organizations_controller.rb | 4 +- app/controllers/pages_controller.rb | 22 +- app/helpers/application_helper.rb | 69 +- app/mailers/user_mailer.rb | 16 +- app/models/conference.rb | 4 +- app/models/location.rb | 5 +- app/models/organization.rb | 30 + app/models/user.rb | 4 +- app/models/workshop.rb | 30 + app/views/conferences/_header.html.haml | 40 +- app/views/conferences/_register.html.haml | 1 + .../_register_already_registered.html.haml | 14 + .../_register_new_organization.html.haml | 15 +- .../_register_new_workshop.html.haml | 17 +- .../_register_organizations.html.haml | 10 +- .../conferences/_register_primary.html.haml | 4 +- .../conferences/_register_questions.html.haml | 24 +- .../conferences/_register_thanks.html.haml | 31 +- .../_register_volunteer_questions.html.haml | 16 +- app/views/conferences/show.html.haml | 7 +- app/views/layouts/application.html.haml | 9 + app/views/layouts/user_mailer.html.haml | 76 +++ app/views/layouts/user_mailer.text.haml | 5 + app/views/pages/404.html.haml | 10 +- .../pages/language_not_enabled.html.haml | 9 + app/views/pages/permission_denied.html.haml | 6 +- app/views/pages/translation_list.html.haml | 6 +- app/views/pages/translations.html.haml | 17 +- ...nce_registration_confirmed_email.html.haml | 10 + ...nce_registration_confirmed_email.text.haml | 9 + .../conference_registration_email.html.haml | 7 + .../conference_registration_email.text.haml | 2 +- config/application.rb | 35 +- config/environments/development.rb | 14 +- config/environments/test.rb | 71 +-- config/initializers/i18n.rb | 71 ++- config/locales/translation-info.yml | 423 ++++++++++++- config/routes.rb | 4 + ...9_add_email_to_conference_registrations.rb | 5 + ...is_complete_to_conference_registrations.rb | 5 + ...d_completed_to_conference_registrations.rb | 5 + ...mation_token_to_conference_registration.rb | 5 + ...payment_info_to_conference_registration.rb | 5 + ...723182548_add_order_to_workshop_streams.rb | 5 + ...d_order_to_workshop_presentation_styles.rb | 5 + db/schema.rb | 9 +- features/landing_page.feature | 29 +- features/organizations.feature | 0 features/registration-two.feature | 0 features/registration.feature | 593 ++++++++++++++++++ features/step_definitions/interface_steps.rb | 216 ++++++- features/support/env.rb | 90 ++- features/support/factory_girl.rb | 22 + features/support/paths.rb | 44 +- features/translations.feature | 16 + features/volunteer-registration.feature | 46 ++ public/maps/Thumbs.db | Bin 27136 -> 27136 bytes .../registration_data/1ehptyshk26pjbe8/ba.png | Bin 0 -> 13847 bytes .../2zizzr5nokd1rh7d/Thumbs.db | Bin 0 -> 11776 bytes .../2zizzr5nokd1rh7d/bikeagaindoor[1].jpg | Bin 0 -> 6262 bytes .../9vpeci4qzca7qs3o/Thumbs.db | Bin 0 -> 25600 bytes .../bikeagaincolourlogo[1].gif | Bin 0 -> 9036 bytes .../c1g7e2jsyqrp62rv/Thumbs.db | Bin 0 -> 11776 bytes .../c1g7e2jsyqrp62rv/bikeagaindoor[1].jpg | Bin 0 -> 6262 bytes .../c7evv341mlp3k4ek/Thumbs.db | Bin 0 -> 11776 bytes .../c7evv341mlp3k4ek/bikeagaindoor[1].jpg | Bin 0 -> 6262 bytes .../registration_data/e0vs4ovunuo2i32i/ba.png | Bin 0 -> 13847 bytes .../lqgjjhzaew2klf7y/Thumbs.db | Bin 0 -> 25600 bytes .../lqgjjhzaew2klf7y/bikeagaincolourlogo.gif | Bin 0 -> 9036 bytes .../qabyxh5an79d1sf1/Thumbs.db | Bin 0 -> 11776 bytes .../qabyxh5an79d1sf1/bikeagaindoor[1].jpg | Bin 0 -> 6262 bytes .../registration_data/tlxsjj1ljiqbvoai/lb.jpg | Bin 0 -> 31087 bytes spec/spec_helper.rb | 1 + 81 files changed, 3013 insertions(+), 297 deletions(-) create mode 100644 Gemfile.lock create mode 100644 app/assets/images/bblogo.png create mode 100644 app/views/conferences/_register_already_registered.html.haml create mode 100644 app/views/layouts/user_mailer.html.haml create mode 100644 app/views/layouts/user_mailer.text.haml create mode 100644 app/views/pages/language_not_enabled.html.haml create mode 100644 app/views/user_mailer/conference_registration_confirmed_email.html.haml create mode 100644 app/views/user_mailer/conference_registration_confirmed_email.text.haml create mode 100644 app/views/user_mailer/conference_registration_email.html.haml create mode 100644 db/migrate/20140719172749_add_email_to_conference_registrations.rb create mode 100644 db/migrate/20140719185914_add_is_complete_to_conference_registrations.rb create mode 100644 db/migrate/20140719204949_add_completed_to_conference_registrations.rb create mode 100644 db/migrate/20140723174550_add_payment_confirmation_token_to_conference_registration.rb create mode 100644 db/migrate/20140723174648_add_payment_info_to_conference_registration.rb create mode 100644 db/migrate/20140723182548_add_order_to_workshop_streams.rb create mode 100644 db/migrate/20140723183557_add_order_to_workshop_presentation_styles.rb create mode 100644 features/organizations.feature create mode 100644 features/registration-two.feature create mode 100644 features/registration.feature create mode 100644 features/support/factory_girl.rb create mode 100644 features/translations.feature create mode 100644 features/volunteer-registration.feature create mode 100644 public/registration_data/1ehptyshk26pjbe8/ba.png create mode 100644 public/registration_data/2zizzr5nokd1rh7d/Thumbs.db create mode 100644 public/registration_data/2zizzr5nokd1rh7d/bikeagaindoor[1].jpg create mode 100644 public/registration_data/9vpeci4qzca7qs3o/Thumbs.db create mode 100644 public/registration_data/9vpeci4qzca7qs3o/bikeagaincolourlogo[1].gif create mode 100644 public/registration_data/c1g7e2jsyqrp62rv/Thumbs.db create mode 100644 public/registration_data/c1g7e2jsyqrp62rv/bikeagaindoor[1].jpg create mode 100644 public/registration_data/c7evv341mlp3k4ek/Thumbs.db create mode 100644 public/registration_data/c7evv341mlp3k4ek/bikeagaindoor[1].jpg create mode 100644 public/registration_data/e0vs4ovunuo2i32i/ba.png create mode 100644 public/registration_data/lqgjjhzaew2klf7y/Thumbs.db create mode 100644 public/registration_data/lqgjjhzaew2klf7y/bikeagaincolourlogo.gif create mode 100644 public/registration_data/qabyxh5an79d1sf1/Thumbs.db create mode 100644 public/registration_data/qabyxh5an79d1sf1/bikeagaindoor[1].jpg create mode 100644 public/registration_data/tlxsjj1ljiqbvoai/lb.jpg diff --git a/Gemfile b/Gemfile index 4615049..4e5c171 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ gem 'oauth2', '~> 0.8.0' gem 'carrierwave' gem 'carrierwave-imageoptimizer' gem 'mini_magick' +gem 'carmen', :path => '../carmen/' if File.directory?('../carmen/') && RbConfig::CONFIG['target_os'] =~ /mswin|mingw|cygwin/i gem 'carmen-rails' gem 'nested_form' gem 'acts_as_list' @@ -30,6 +31,7 @@ gem 'wysiwyg-rails' gem 'rails-assets-cdn' gem 'sitemap_generator' gem 'activerecord-session_store' +gem 'paypal-express' group :development, :test do gem 'rspec' @@ -47,6 +49,7 @@ end group :test do gem 'capybara' + gem 'poltergeist' gem 'guard-rspec' gem 'factory_girl_rails' gem 'coveralls', require: false diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..8afcfcf --- /dev/null +++ b/Gemfile.lock @@ -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 diff --git a/app/assets/images/Thumbs.db b/app/assets/images/Thumbs.db index a712181594d9c4729bb4dba0898baae3dbcccff5..bfe0cefa05f2c4592d77316441397fc856a1170f 100644 GIT binary patch delta 16065 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 diff --git a/app/assets/images/bblogo.png b/app/assets/images/bblogo.png new file mode 100644 index 0000000000000000000000000000000000000000..40f8a20b46d8b97628ef168da28436829b2199d2 GIT binary patch literal 10233 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 literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/sass/_base.scss b/app/assets/stylesheets/sass/_base.scss index 9d28a30..117e8fd 100644 --- a/app/assets/stylesheets/sass/_base.scss +++ b/app/assets/stylesheets/sass/_base.scss @@ -1,4 +1,43 @@ 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 { position: relative; cursor: text; @@ -396,6 +435,48 @@ ul.tags, 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) { .organizations-index, .conferences-index { diff --git a/app/assets/stylesheets/sass/_layout.scss b/app/assets/stylesheets/sass/_layout.scss index c757dda..9e5de4a 100644 --- a/app/assets/stylesheets/sass/_layout.scss +++ b/app/assets/stylesheets/sass/_layout.scss @@ -85,7 +85,7 @@ body { float: left; .logo { - width: auto; + width: 100%; height: 90%;//2em; fill: $primary-color; position: absolute; @@ -236,6 +236,11 @@ body { text-align: center; } + form { + text-align: center; + padding: 2em 0; + } + @include breakpoint(medium) { + #content { padding-top: 0; @@ -333,23 +338,33 @@ main { //} } - .align-bottom > div { - margin-bottom: 3em; - } + //.align-bottom > div { + //margin-bottom: 3em; + //} .button { width: 75%; 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; + white-space: nowrap; @include text-shadow(none); &:hover { - background-color: $article-color; + background-color: $primary-color; color: $white; border-color: transparent; } + + &#register-now { + background-color: rgba(darken($warning-color, 0), 0.33); + margin-top: 0; + + &:hover { + background-color: $warning-color; + } + } } .organizations & { @@ -433,7 +448,8 @@ main { } } - .page-style-emphasize-banner & { + .page-style-emphasize-banner &, + .conferences & { figure img { box-shadow: 0 0 2em $black; } @@ -495,6 +511,10 @@ main { } } + .page-style-article.small-banner & { + min-height: 10em; + } + .page-style-list & { min-height: 10em; height: 30em; @@ -505,6 +525,10 @@ main { font-size: 6vw; } } + + .row .align-bottom.buttons { + height: 14em; + } } @include breakpoint(large) { @@ -526,6 +550,10 @@ main { border-bottom-left-radius: inherit; } + .button { + //margin-top: 20%; + } + .page-style-list & { height: 15em; height: 15vw; @@ -560,6 +588,10 @@ main { .row .align-bottom { height: auto; + + &.buttons { + height: 10em; + } } } } @@ -623,13 +655,15 @@ main { position: absolute; top: 100%; 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; text-align: right; text-shadow: none; @include opacity(0.5); clear: right; z-index: 2; + mix-blend-mode: luminosity; > span { display: none; @@ -1043,3 +1077,7 @@ table { .clearfix { @include clearfix; } + +article.row { + margin-left: 0; +} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1b508e4..b9ba8b9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -14,9 +14,32 @@ class ApplicationController < ActionController::Base before_filter :capture_page_info + @@test_host + @@test_location + def capture_page_info init_vars $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 def do_404 diff --git a/app/controllers/conferences_controller.rb b/app/controllers/conferences_controller.rb index 94a80bd..92d453e 100644 --- a/app/controllers/conferences_controller.rb +++ b/app/controllers/conferences_controller.rb @@ -6,7 +6,6 @@ class ConferencesController < ApplicationController # GET /conferences def index - #puts params @conference_type = nil if params['conference_type'] @conference_type = ConferenceType.find_by!(:slug => params['conference_type']) @@ -111,50 +110,72 @@ class ConferencesController < ApplicationController end def register_submit - #set_conference next_step = nil if !session[:registration] session[:registration] = Hash.new session[:registration][:path] = Array.new 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' session[:registration][:email] = params[:email] - user = User.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]) - session[:registration][:user] = Hash.new - session[:registration][:organizations] = Array.new - session[:registration][:user][:id] = user ? user.id : nil - if user - user.organizations.each { |org| session[:registration][:organizations] << org.id } + registration = ConferenceRegistration.find_by(:email => params[:email]) + if !registration.nil? + session[:registration] = YAML.load(registration.data) + session[:registration][:registration_id] = registration.id + next_step = (registration.completed.blank? && registration.is_participant.present? ? 'organizations' : 'thanks') + else + 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 - 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' - if !params[:firstname] || !params[:lastname] - 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.' + 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." + 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 session[:registration][:user][:firstname] = params[:firstname] - session[:registration][:user][:firstname] = params[:lastname] - session[:registration][:is_volunteer] = params[:is_volunteer] - session[:registration][:is_participant] = params[:is_participant] + session[:registration][:user][:lastname] = params[:lastname] + session[:registration][:is_volunteer] = (params[:is_volunteer] || 'false').to_sym == :true + session[:registration][:is_participant] = (params[:is_participant] || 'false').to_sym == :true 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 - if params[:is_volunteer] + if session[:registration][:is_volunteer] next_step = 'volunteer_questions' - elsif params[:is_participant] - next_step = 'organizations' - else - error = _'registration.register.no_role_error',"Please let us know if you're attending the conference or volunteering (or both)" + elsif session[:registration][:is_participant] + next_step = 'questions' end when 'organizations' - session[:registration][:organizations] = Array.new - if params[:org].length > 0 - params[:org].each { |org| session[:registration][:organizations] << org } + @registration = ConferenceRegistration.find(session[:registration][:registration_id]) + if (params[:org] && params[:org].length > 0) || params[:add_new_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] session[:registration][:new_organization] ||= Array.new @@ -168,28 +189,43 @@ class ConferencesController < ApplicationController end next_step = 'new_organization' 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 - elsif params[:add_new_org] - session[:registration][:questions] ||= Hash.new - next_step = 'questions' else error = _'registration.register.no_organization_error',"Please select an organization or enter a new one" end when 'new_organization' - if !params[:city] - message = _'register.new_organization.no_city_error','Please enter your organization\'s city' - end - if !params[:street] - message = _'register.new_organization.no_street_error','Please enter your organization\'s street address' + if params[:name].blank? + error = _'register.new_organization.no_name_error',"Please tell us your organization's name" 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.' + if params[:organization_email].blank? + 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." 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 - if !params[:name] - message = _'register.new_organization.no_name_error','Please tell us your organization\'s name' + if params[:street].blank? + 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 i = params[:new_org_index].to_i 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][:name] = params[:organization_name] - if params[:organization_logo] - if session[:registration][:new_organization][i][:organization_logo] - FileUtils.rm session[:registration][:new_organization][i][:organization_logo] - end + if params[:logo] && !session[:registration][:new_organization][i][:saved] + begin + if session[:registration][:new_organization][i][:logo] + FileUtils.rm session[:registration][:new_organization][i][:logo] + end + rescue; end base_dir = File.join("public", "registration_data") 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) while File.directory?(dir) - hash_dir = rand(36**16).to_s(36) + hash_dir = rand_hash dir = File.join(base_dir, hash_dir) end FileUtils.mkdir_p(dir) - session[:registration][:new_organization][i][:organization_logo] = File.join("registration_data", hash_dir, params[:organization_logo].original_filename) - FileUtils.cp params[:organization_logo].tempfile.path, File.join("public", session[:registration][:new_organization][i][:organization_logo]) + session[:registration][:new_organization][i][:logo] = File.join("registration_data", hash_dir, params[:logo].original_filename) + FileUtils.cp params[:logo].tempfile.path, File.join("public", session[:registration][:new_organization][i][:logo]) 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' if params[:previous] session[:registration][:new_org_index] = [0, i - 1].max @@ -233,25 +272,37 @@ class ConferencesController < ApplicationController if session[:registration][:new_organization][i + 1] session[:registration][:new_organization] = session[:registration][:new_organization].first(i + 1) 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 when 'questions' session[:registration][:questions] = params[:questions].deep_symbolize_keys - session[:registration][:is_workshop_host] = params[:is_workshop_host].to_i - if !params[:is_workshop_host].to_i.zero? - next_step = 'new_workshop' - session[:registration][:workshop] ||= Array.new - session[:registration][:workshop][0] ||= Hash.new - session[:registration][:workshop_index] = 0 - else - next_step = 'submit' + session[:registration][:is_workshop_host] = !params[:is_workshop_host].to_i.zero? + next_step = 'organizations' + if params[:submit] || params[:next] + if !session[:registration][:organizations] + user = User.find_by(:email => session[:registration][:email]) + session[:registration][:organizations] = Array.new + if user + user.organizations.each { |org| session[:registration][:organizations] << org.id } + end + end + create_registration end when 'volunteer_questions' session[:registration][:volunteer_questions] = params[:volunteer_questions].deep_symbolize_keys if session[:registration][:is_participant] - next_step = 'organizations' + next_step = 'questions' else - next_step = 'submit' + create_registration + next_step = 'thanks' end when 'new_workshop' 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][:stream] = params[:workshop_stream] session[:registration][:workshop][i][:presentation_style] = params[:workshop_presentation_style] + session[:registration][:workshop][i][:notes] = params[:workshop_notes] - if !params[:workshop_info] - 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' + if params[:workshop_title].blank? + error = _'registration.register.no_workshop_title_error','Please give your workshop a title' end - if !params[:workshop_title] - error = _'registration.register.no_workshop_title_error','Please give your workshop a title' + 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] session[:registration][:workshop_index] = [0, i - 1].max elsif params[:add_another_workshop] @@ -281,11 +335,14 @@ class ConferencesController < ApplicationController if session[:registration][:workshop][i + 1] session[:registration][:workshop] = session[:registration][:workshop].first(i + 1) 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 - when 'submit' - UserMailer.conference_registration_email(@conference, session[:registration]).deliver - session.delete(:registration) next_step = 'thanks' when 'cancel' if params[:yes] @@ -294,45 +351,77 @@ class ConferencesController < ApplicationController else return {error: false, next_step: session[:registration][:path].pop} end + when 'already_registered' + send_confirmation + next_step = 'thanks' + when 'pay_now', 'payment-confirmed', 'payment-cancelled' + next_step = 'thanks' end - if params[:previous] - next_step = session[:registration][:path].pop - else - if !params[:cancel] && error - return {error: true, message: error, next_step: params['step']} - end - if session[:registration] && params['step'] - session[:registration][:path] << params['step'] - end + session.delete(:registration_step) + #if params[:previous] + # next_step = session[:registration][:path].pop + #else + if !params[:cancel] && error + return {error: true, message: error, next_step: params['step']} + 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} end def register + is_post = request.post? || session[:registration_step] set_conference + + if !@conference.registration_open + do_404 + return + end + 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 template = (@register_step == 'register' ? '' : 'register_') + @register_step + if !File.exists?(Rails.root.join("app", "views", params[:controller], "_#{template}.html.haml")) do_404 return end + if session[:registration] session[:registration][@register_step.to_sym] ||= Hash.new end @actions = nil + @multipart = false case @register_step - when 'register' + when 'register', 'organizations', 'new_organization', 'new_workshop', 'volunteer_questions' @actions = :next - when 'primary', 'organizations', 'new_organization', 'new_workshop', 'volunteer_questions' - @actions = [:previous, :cancel, :next] + if @register_step == 'new_organization' + @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' - @actions = [:previous, :cancel, :submit] + @actions = [:cancel, :submit] when 'cancel' @actions = [:no, :yes] + when 'already_registered' + @registration = ConferenceRegistration.find_by(:email => session[:registration][:email]) + if !@registration.complete + @actions = :resend_confirmation_email + end when 'questions' - @actions = [:previous, :cancel, :next] + @actions = [:cancel, :submit] @housing_options = { 'I will fend for myself thanks' => 'none', 'I will need a real bed' => 'bed', @@ -342,13 +431,17 @@ class ConferencesController < ApplicationController session[:registration][:questions][:housing] ||= 'couch' @loaner_bike_options = { 'No' => 'no', - 'Yes' => 'medium', + 'Yes, an average size should do' => 'medium', 'Yes but a small one please' => 'small', 'Yes but a large one please' => 'large' } session[:registration][:questions][:loaner_bike] ||= 'medium' - session[:registration][:questions][:diet] ||= Hash.new + #session[:registration][:questions][:diet] ||= Hash.new end + + #puts ' ------yyyy----------------- ' + #puts @register_step + if request.xhr? @register_content = render_to_string :partial => template render :json => {status: 200, html: @register_content} @@ -358,6 +451,94 @@ class ConferencesController < ApplicationController 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 set_conference data = params @@ -456,4 +637,133 @@ class ConferencesController < ApplicationController 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 diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index f42f643..cfc3a04 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -22,8 +22,8 @@ class OrganizationsController < ApplicationController if !@organizations.has_key?(country.name) @organizations[country.name] = Hash.new end - territory = country.subregions.coded(location.territory) - territory_name = territory ? territory.name : 0 + territory = country.subregions? ? country.subregions.coded(location.territory) : nil + territory_name = territory.nil? ? 0 : territory.name if !@organizations[country.name].has_key?(territory_name) @organizations[country.name][territory_name] = Hash.new end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 204a1b1..66f0c5a 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -1,12 +1,12 @@ include ApplicationHelper class PagesController < ApplicationController - protect_from_forgery :except => :location_territories + protect_from_forgery :except => :location_territories #skip_before_filter :verify_authenticity_token, only: [:translate] def home - @conferences = Conference.all - @conference = Conference.find(:first, :order => "start_date DESC") + #@conferences = Conference.all + @conference = Conference.order("start_date DESC").first end def resources @@ -51,23 +51,23 @@ class PagesController < ApplicationController #render json: (Carmen:::RegionCollection.new(Carmen::Country.coded(params[:country])) || []).to_json territories = {} country = Carmen::Country.coded(params[:country]) - if country - country.subregions.each { |t| territories[t.code] = t.name } - end + if country + country.subregions.each { |t| territories[t.code] = t.name } + end render json: territories.to_json end def translations - if !current_user - raise ActiveRecord::PremissionDenied - end + #if !current_user + # raise ActiveRecord::PremissionDenied + #end @lang = params[:lang] - @translations = I18n.backend.get_translation_info + @translations = is_test? ? {} : I18n.backend.get_translation_info I18n.config.enforce_available_locales = false end def translation_list - if !current_user + if !current_user && is_production? raise ActiveRecord::PremissionDenied end total = 0 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 18954d1..78bd97e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -9,6 +9,8 @@ module ApplicationHelper @@banner_image = nil @@has_content = true @@front_page = false + @@body_class = nil + @@test_location = nil def init_vars @@keyQueue = nil @@ -20,6 +22,7 @@ module ApplicationHelper @@banner_image = nil @@has_content = true @@front_page = false + @@body_class = nil end def this_is_the_front_page @@ -100,6 +103,11 @@ module ApplicationHelper content_for(:dom_ready, &block) end + def body_class(c) + @@body_class ||= Array.new + @@body_class << (c.is_a?(Array) ? c.join(' ') : c) + end + def page_style(style) classes = ['page-style-' + style.to_s] #if @@no_banner @@ -114,6 +122,9 @@ module ApplicationHelper if @@banner_image classes << 'has-banner-image' end + if @@body_class + classes << @@body_class.join(' ') + end if params[:controller] classes << params[:controller] @@ -440,7 +451,9 @@ module ApplicationHelper end 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 else request.location @@ -492,6 +505,10 @@ module ApplicationHelper Rails.env == 'production' end + def is_test? + Rails.env == 'test' + end + def subdomain request.env['SERVER_NAME'].gsub(/^(\w+)\..*$/, '\1') end @@ -505,6 +522,56 @@ module ApplicationHelper location.city + (territory ? ' ' + territory.name : '') + ', ' + Carmen::Country.coded(location.country).name 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 def _form_field(type, name, value, options) if type == 'check_box' diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 47350e6..a9b0c0f 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -1,5 +1,5 @@ class UserMailer < ActionMailer::Base - default from: "noreply@bikebike.org" + default from: "Bike!Bike! " # Subject can be set in your I18n file at config/locales/en.yml # with the following lookup: @@ -23,9 +23,19 @@ class UserMailer < ActionMailer::Base mail to: "to@example.org" 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 @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 diff --git a/app/models/conference.rb b/app/models/conference.rb index aa36b85..f86ec46 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -7,8 +7,8 @@ class Conference < ActiveRecord::Base has_many :conference_host_organizations, :dependent => :destroy has_many :organizations, :through => :conference_host_organizations - 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 :conference_registration_form_fields, :order => 'position ASC', :dependent => :destroy#, :class_name => '::ConferenceRegistrationFormField' + #has_many :registration_form_fields, :through => :conference_registration_form_fields has_many :workshops diff --git a/app/models/location.rb b/app/models/location.rb index 9e85760..990e902 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -1,9 +1,10 @@ class Location < ActiveRecord::Base #attr_accessible :title, :country, :territory, :city, :street, :postal_code, :latitude, :longitude - has_many :locations_organization - has_many :organizations, :through => :locations_organization + has_many :locations_organization + has_many :organizations, :through => :locations_organization geocoded_by :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? } diff --git a/app/models/organization.rb b/app/models/organization.rb index ae08189..24c2b5f 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -11,6 +11,7 @@ class Organization < ActiveRecord::Base 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 + before_create :make_slug def location locations.first @@ -28,4 +29,33 @@ class Organization < ActiveRecord::Base slug 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 diff --git a/app/models/user.rb b/app/models/user.rb index 10b80c4..83ec6de 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,8 +3,8 @@ class User < ActiveRecord::Base config.authentications_class = Authentication end - validates :password, presence: true, confirmation: true, length: { minimum: 3 }, unless: ("id?" || "password_confirmation?") - validates :password_confirmation, presence: true, unless: ("id?" || "password?") + #validates :password, presence: true, confirmation: true, length: { minimum: 3 }, unless: ("id?" || "password_confirmation?") + #validates :password_confirmation, presence: true, unless: ("id?" || "password?") validates :email, uniqueness: true diff --git a/app/models/workshop.rb b/app/models/workshop.rb index eaf8846..3e20500 100644 --- a/app/models/workshop.rb +++ b/app/models/workshop.rb @@ -1,7 +1,37 @@ class Workshop < ActiveRecord::Base 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 slug 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 diff --git a/app/views/conferences/_header.html.haml b/app/views/conferences/_header.html.haml index 559323e..773373b 100644 --- a/app/views/conferences/_header.html.haml +++ b/app/views/conferences/_header.html.haml @@ -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 +- small_banner = (params['controller'] == 'conferences' && params['action'] != 'show') +- if small_banner + - body_class('small-banner') - page_style (params['controller'] == 'conferences' ? 'article' : 'emphasize-banner') - content_for :banner do .row - .columns.small-12.banner - %figure - %img{src: @conference.poster.full.url} - .columns.medium-8.align-bottom + - if !small_banner + .columns.small-12.banner + %figure + %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 %div %h1 @@ -33,11 +37,31 @@ = info.html_safe - else %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 - - if @conference.registration_open - %a.button.arrow-r{href: @conference.url(:register)} - =_'conference.Register_Now' - if params['controller'] != 'conferences' %a.button.more{href: @conference.url} =_'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'); + } + }); \ No newline at end of file diff --git a/app/views/conferences/_register.html.haml b/app/views/conferences/_register.html.haml index 478bac0..0fe6984 100644 --- a/app/views/conferences/_register.html.haml +++ b/app/views/conferences/_register.html.haml @@ -1 +1,2 @@ = email_field_tag :email, session[:registration][:email] + diff --git a/app/views/conferences/_register_already_registered.html.haml b/app/views/conferences/_register_already_registered.html.haml new file mode 100644 index 0000000..c81fade --- /dev/null +++ b/app/views/conferences/_register_already_registered.html.haml @@ -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.' \ No newline at end of file diff --git a/app/views/conferences/_register_new_organization.html.haml b/app/views/conferences/_register_new_organization.html.haml index fa8597d..50fef70 100644 --- a/app/views/conferences/_register_new_organization.html.haml +++ b/app/views/conferences/_register_new_organization.html.haml @@ -2,16 +2,17 @@ = hidden_field_tag :new_org_index, org_index - if session[:registration][:new_organization].length > 1 %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| - - if new_organization[:title] + - if new_organization[:name] %li - - if index == org_index && new_organization[:title] - %strong=new_organization[:title] + - if index == org_index && new_organization[:name] + %strong=new_organization[:name] - else - = new_organization[:title] + = new_organization[:name] %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-7 = 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 = 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 - = image_field_tag :organization_logo + = image_field_tag :logo .columns = check_box_tag :add_another_org, (org_index <= session[:registration][:new_organization].length - 1) diff --git a/app/views/conferences/_register_new_workshop.html.haml b/app/views/conferences/_register_new_workshop.html.haml index 8377b92..3df839b 100644 --- a/app/views/conferences/_register_new_workshop.html.haml +++ b/app/views/conferences/_register_new_workshop.html.haml @@ -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_area_tag :workshop_info, session[:registration][:workshop][workshop_index][:info], :required => true, :data => {:editor => ""} .columns.medium-5.medium-offset-1 - %h4=_'registration.workshop.streams.title','Stream' - %p.help=_'registration.workshop.streams.help','Select the stream that best categorizes your workshop' + %h4=_'registration.workshop.streams.title','Themes' + %p.help=_'registration.workshop.streams.help','Select the theme that best categorizes your workshop' - streams = Hash.new - - streams[_'workshop_stream.select_one','Select a stream'] = '' - - WorkshopStream.all.each do |stream| + - streams[_'workshop_stream.select_one','Select a theme'] = '' + - WorkshopStream.order('"order" ASC').each do |stream| - streams[_'workshop_stream.' + stream.slug] = stream.slug = select_tag :workshop_stream, options_for_select(streams, session[:registration][:workshop][workshop_index][:stream] || '') .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' - styles = Hash.new - 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 = 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 - - #xx = check_box_tag :add_another_workshop, "1", (workshop_index < session[:registration][:workshop].length - 1) - content_for :footer_scripts do -= javascript_include_tag 'editor' \ No newline at end of file + = javascript_include_tag 'editor' \ No newline at end of file diff --git a/app/views/conferences/_register_organizations.html.haml b/app/views/conferences/_register_organizations.html.haml index f91f2e2..c51fbe2 100644 --- a/app/views/conferences/_register_organizations.html.haml +++ b/app/views/conferences/_register_organizations.html.haml @@ -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 =_'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.' @@ -8,8 +16,6 @@ - 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} - orgs = Hash.new - -# orgs = Organization.joins(:locations_organization).where('locations_organizations.location_id' => lids) - -# orgs.each do |org| - lids.each do |lid| - org = Organization.joins(:locations_organization).where('locations_organizations.location_id' => lid).first - if org && !orgs.has_key?(org.id) diff --git a/app/views/conferences/_register_primary.html.haml b/app/views/conferences/_register_primary.html.haml index ad7bfa5..b71bea8 100644 --- a/app/views/conferences/_register_primary.html.haml +++ b/app/views/conferences/_register_primary.html.haml @@ -6,5 +6,5 @@ .columns %h3=_'registration.primary.role_title','Attending as:' .columns.small-offset-1 - = check_box_tag :is_participant, session[:registration][:is_participant] - = check_box_tag :is_volunteer, session[:registration][:is_volunteer] + = check_box_tag :is_participant, 'true', session[:registration][:is_participant] + = check_box_tag :is_volunteer, 'true', session[:registration][:is_volunteer] diff --git a/app/views/conferences/_register_questions.html.haml b/app/views/conferences/_register_questions.html.haml index ff09518..2bbc073 100644 --- a/app/views/conferences/_register_questions.html.haml +++ b/app/views/conferences/_register_questions.html.haml @@ -13,19 +13,19 @@ .columns.medium-8.medium-offset-2.end = 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 - %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 - %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.' + %h4=_'registration.questions.workshop','Would you like 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 later on.' .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) .columns.medium-offset-1.end diff --git a/app/views/conferences/_register_thanks.html.haml b/app/views/conferences/_register_thanks.html.haml index ec0392a..fa066a7 100644 --- a/app/views/conferences/_register_thanks.html.haml +++ b/app/views/conferences/_register_thanks.html.haml @@ -1,6 +1,25 @@ -%h3=_'registration.thanks.title','Thanks for submitting your registration' -.columns.medium-offset-1.end - %h4=_'registration.thanks.remember_to_confirm','Remember to confirm your registration upon receiving the confirmation email' - %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' +- if @registration && @registration.complete + - city = @conference.organizations.first.locations.first.city + %h3=_'registration.thanks.complete.title','Thanks for completing your registration' + .columns + - if !@registration.is_participant + %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' diff --git a/app/views/conferences/_register_volunteer_questions.html.haml b/app/views/conferences/_register_volunteer_questions.html.haml index 31f4a1b..20e817c 100644 --- a/app/views/conferences/_register_volunteer_questions.html.haml +++ b/app/views/conferences/_register_volunteer_questions.html.haml @@ -6,25 +6,31 @@ = text_field_tag '[volunteer_questions][address]', session[:registration][:volunteer_questions][:address] = 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 - %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 - = 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 %h4=_'registration.volunteer_questions.has_housing','Do you have housing to offer for out of town attendees?' .columns.medium-offset-2.medium-5 %h5=_'registration.volunteer_questions.beds','Spare Beds:' .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 %h5=_'registration.volunteer_questions.couch_space','Number you can accomodate on couches/floor space:' .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 %h5=_'registration.volunteer_questions.tents','Estimated number of tests you\'d be willing to have in your yard:' .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 %h4=_'registration.volunteer_questions.other','Anything else you\'d like to tell us?' .columns.medium-8.medium-offset-2.end diff --git a/app/views/conferences/show.html.haml b/app/views/conferences/show.html.haml index 0031c5a..d6dc6da 100644 --- a/app/views/conferences/show.html.haml +++ b/app/views/conferences/show.html.haml @@ -4,15 +4,12 @@ - title @conference.title - description "#{@conference.title} conference in #{location_name} for DIY bicycle collectives, co-ops, and advocacy groups" = render 'header' - -=# tabs! - %article.row .columns.large-10 - if @register_step - %h2='Register!' + %h2='Conference Registration' - 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 - if @error_message .columns.medium-8.medium-centered diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index e578ca1..d47d859 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -36,6 +36,15 @@ - if content_for?(:side_bar) %aside#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? #content=yield - else diff --git a/app/views/layouts/user_mailer.html.haml b/app/views/layouts/user_mailer.html.haml new file mode 100644 index 0000000..156ebb3 --- /dev/null +++ b/app/views/layouts/user_mailer.html.haml @@ -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] + + /[if gte mso 9] + + %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! diff --git a/app/views/layouts/user_mailer.text.haml b/app/views/layouts/user_mailer.text.haml new file mode 100644 index 0000000..abd1c3f --- /dev/null +++ b/app/views/layouts/user_mailer.text.haml @@ -0,0 +1,5 @@ +='========== Bike!Bike! ==========' + += yield + +="===== #{@url} ======" diff --git a/app/views/pages/404.html.haml b/app/views/pages/404.html.haml index a7b2f44..2297acc 100644 --- a/app/views/pages/404.html.haml +++ b/app/views/pages/404.html.haml @@ -1 +1,9 @@ -404!d \ No newline at end of file +- 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 \ No newline at end of file diff --git a/app/views/pages/language_not_enabled.html.haml b/app/views/pages/language_not_enabled.html.haml new file mode 100644 index 0000000..aadb298 --- /dev/null +++ b/app/views/pages/language_not_enabled.html.haml @@ -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 \ No newline at end of file diff --git a/app/views/pages/permission_denied.html.haml b/app/views/pages/permission_denied.html.haml index ad367c9..c3b87c8 100644 --- a/app/views/pages/permission_denied.html.haml +++ b/app/views/pages/permission_denied.html.haml @@ -1,9 +1,9 @@ -- page_title = _'error.title.Permission_Denied' +- page_title = _'error.403.page_title.Permission_Denied' - title page_title - banner_title page_title .row %h1 - ='This page is inaccessible to you' + =_'error.403.title','This page is inaccessible to you' %p - =_'error.desc.permission_denied', :p \ No newline at end of file + =_'error.403.description', :p \ No newline at end of file diff --git a/app/views/pages/translation_list.html.haml b/app/views/pages/translation_list.html.haml index 7383245..720e7b4 100644 --- a/app/views/pages/translation_list.html.haml +++ b/app/views/pages/translation_list.html.haml @@ -12,11 +12,11 @@ - if code && @completeness.has_key?(code.to_s) %li.text-center - completeness = @completeness[code.to_s] - - 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)} + -# percent = @total_translations ? ((completeness / @total_translations.to_f) * 100).to_i : 0 + %a{:href => "/translations/#{code}/", :class => (completeness > 99 ? 'complete' : completeness > 67 ? 'needs-work' : nil)} %h3=_"languages.#{code}" .completeness - = "#{completeness} / #{@total_translations} (#{percent}%)" + = "#{completeness} / #{@total_translations} (#{completeness}%)" %h2= _ 'languages.inactive' %ul.languages.inactive.small-block-grid-1.medium-block-grid-3.large-block-grid-4.grid.links - @language_codes.each do |code| diff --git a/app/views/pages/translations.html.haml b/app/views/pages/translations.html.haml index 3d2eed0..25142a3 100644 --- a/app/views/pages/translations.html.haml +++ b/app/views/pages/translations.html.haml @@ -11,10 +11,10 @@ %th.key=_'translations.Pages' %th.key=_'translations.Value' - @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 - - cached = (translation['languages'] && translation['languages'].include?(@lang)) - - vars = translation.has_key?('vars') && translation['vars'].size() > 0 ? translation['vars'] : nil + - cached = (translation && translation['languages'] && translation['languages'].include?(@lang)) + - 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| - key = k + (pluralization ? ".#{pluralization.to_s}" : '') %tr{:class => current_translation ? 'exists' : 'not-exists', :data => {:key => key}} @@ -28,9 +28,10 @@ %li=v %td.pages %ul - - translation['pages'].each do |page| - %li - %a{:href => page}=page + - if translation + - translation['pages'].each do |page| + %li + %a{:href => page}=page %td.value.primary - if current_translation = current_translation @@ -43,5 +44,5 @@ - unless current_translation %a{:href => '#', :class => 'auto-translate button small'}='Auto' --# content_for :footer_scripts -= javascript_include_tag 'translations' +- content_for :footer_scripts do + = javascript_include_tag 'translations' diff --git a/app/views/user_mailer/conference_registration_confirmed_email.html.haml b/app/views/user_mailer/conference_registration_confirmed_email.html.haml new file mode 100644 index 0000000..a49389f --- /dev/null +++ b/app/views/user_mailer/conference_registration_confirmed_email.html.haml @@ -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})/, '\1').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." \ No newline at end of file diff --git a/app/views/user_mailer/conference_registration_confirmed_email.text.haml b/app/views/user_mailer/conference_registration_confirmed_email.text.haml new file mode 100644 index 0000000..50ac6ae --- /dev/null +++ b/app/views/user_mailer/conference_registration_confirmed_email.text.haml @@ -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." diff --git a/app/views/user_mailer/conference_registration_email.html.haml b/app/views/user_mailer/conference_registration_email.html.haml new file mode 100644 index 0000000..ce85782 --- /dev/null +++ b/app/views/user_mailer/conference_registration_email.html.haml @@ -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!" \ No newline at end of file diff --git a/app/views/user_mailer/conference_registration_email.text.haml b/app/views/user_mailer/conference_registration_email.text.haml index 088d8c0..2b95786 100644 --- a/app/views/user_mailer/conference_registration_email.text.haml +++ b/app/views/user_mailer/conference_registration_email.text.haml @@ -1 +1 @@ -= @data.to_json.to_s \ No newline at end of file +=_('register.email.registration.please_confirm',"Hi #{@data[:user][:username]}, please confirm your registration for #{@conference.title}", vars: {:username => @data[:user][:username]}) + ": #{@confirmation_url}" \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index 7d3fcf6..b8c5ba2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -13,24 +13,25 @@ ENV['JPEGOPTIM_BIN'] = 'jpegoptim' ENV['OPTIPNG_BIN'] = 'optipng' module BikeBike - class Application < Rails::Application - # Settings in config/environments/* take precedence over those specified here. - # Application configuration should go into files in config/initializers - # -- all .rb files in that directory are automatically loaded. + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- 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. - # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - # config.time_zone = 'Central Time (US & Canada)' + # 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. + # config.time_zone = 'Central Time (US & Canada)' - # 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.default_locale = :en #:de - config.i18n.enforce_available_locales = false - # config.action_controller.default_url_options = { :trailing_slash => true } - #config.middleware.swap 'Rack::MethodOverride', 'Rack::MethodOverrideWithParams' - #config.i18n.exception_handler = I18n::MissingTranslationExceptionHandler.new - #require '/app/helpers/bike_bike_form_helper' - #ActionView::Base.default_form_builder - #config.action_view.default_form_builder = 'BikeBikeFormHelper::BikeBikeFormBuilder' + # 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.default_locale = :en #:de + config.i18n.enforce_available_locales = false + self.paths['config/database'] = Rails.root.parent.join("secure/database.yml").to_s + # config.action_controller.default_url_options = { :trailing_slash => true } + #config.middleware.swap 'Rack::MethodOverride', 'Rack::MethodOverrideWithParams' + #config.i18n.exception_handler = I18n::MissingTranslationExceptionHandler.new + #require '/app/helpers/bike_bike_form_helper' + #ActionView::Base.default_form_builder + #config.action_view.default_form_builder = 'BikeBikeFormHelper::BikeBikeFormBuilder' end end diff --git a/config/environments/development.rb b/config/environments/development.rb index 714523b..471e16b 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -45,13 +45,15 @@ BikeBike::Application.configure do } config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_deliveries = true - #config.force_ssl = true + #config.force_ssl = true #config.action_mailer.default_charset = 'utf-8' - #Carmen.i18n_backend.locale_paths = '' - #puts "CARMEN\t" + Carmen.i18n_backend.locale_paths + #Carmen.i18n_backend.locale_paths = '' + #puts "CARMEN\t" + Carmen.i18n_backend.locale_paths - #PerfTools::CpuProfiler.start('/tmp/dev_prof') - config.serve_static_assets = true - #config.assets.precompile = false + #PerfTools::CpuProfiler.start('/tmp/dev_prof') + config.serve_static_assets = true + #config.assets.precompile = false + Paypal.sandbox! + #Paypal.sandbox = false end diff --git a/config/environments/test.rb b/config/environments/test.rb index 6af352a..9fafaee 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,37 +1,38 @@ BikeBike::Application.configure do - # Settings specified here will take precedence over those in config/application.rb. - - # The test environment is used exclusively to run your application's - # 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 - # and recreated between test runs. Don't rely on the data there! - config.cache_classes = true - - # 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 - # preloads Rails for running tests, you may have to set it to true. - config.eager_load = false - - # Configure static asset server for tests with Cache-Control for performance. - config.serve_static_assets = true - config.static_cache_control = "public, max-age=3600" - - # Show full error reports and disable caching. - config.consider_all_requests_local = true - config.action_controller.perform_caching = false - - # Raise exceptions instead of rendering exception templates. - config.action_dispatch.show_exceptions = false - - # Disable request forgery protection in test environment. - config.action_controller.allow_forgery_protection = false - - # Tell Action Mailer not to deliver emails to the real world. - # The :test delivery method accumulates sent emails in the - # ActionMailer::Base.deliveries array. - config.action_mailer.delivery_method = :test - config.action_mailer.default_url_options = { host: 'localhost' } - - # Print deprecation notices to the stderr. - config.active_support.deprecation = :stderr + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # 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 + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # 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 + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static asset server for tests with Cache-Control for performance. + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + config.action_mailer.default_url_options = { host: 'localhost' } + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + Paypal.sandbox! end diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index e5fd9df..e14cff9 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -48,7 +48,8 @@ module I18n end return self.lorem_ipsum(behavior, behavior_size) 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 def call(exception, locale, key, options) @@ -68,6 +69,21 @@ module I18n @@translation_cache_file = 'config/locales/.translation-cache.yml' @@pluralization_rules_file = 'config/locales/pluralization-rules.yml' @@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) @@needs_translation ||= Array.new @@ -90,12 +106,9 @@ module I18n end def initialize - if Rails.env.test? || !File.exist?(@@translation_cache_file) + if !File.exist?(@@translation_cache_file) File.open(@@translation_cache_file, 'w+') end - if Rails.env.test? - File.open(@@translations_file, 'w+') - end @@translation_cache = YAML.load(File.read(@@translation_cache_file)) || Hash.new super end @@ -105,8 +118,6 @@ module I18n YAML.load_file(@@translations_file) || {} rescue Exception => e # sometimes concurrency issues cause an exception during testing - puts e.class - x sleep(1/2.0) get_translation_info() end @@ -121,6 +132,30 @@ module I18n YAML.load_file(@@pluralization_rules_file).keys 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) total = 0 complete = 0 @@ -128,7 +163,11 @@ module I18n total += 1 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 def request_translation(key, vars, options) @@ -142,10 +181,26 @@ module I18n return result 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 def lookup(locale, key, scope = [], options = {}) 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) result = @@translation_cache[locale.to_s][key.to_s] end diff --git a/config/locales/translation-info.yml b/config/locales/translation-info.yml index db60049..1653a8a 100644 --- a/config/locales/translation-info.yml +++ b/config/locales/translation-info.yml @@ -1,31 +1,430 @@ --- -nola_2013.about: +world.ca.ns.name: + languages: + - en + pages: + - "/" + - "/conferences/:conference_type/:conference_slug/register(/:step)" + data: + - '{"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: + - "/" + 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: + languages: + - de + - en + pages: + - "/" + - "/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: + languages: + - en + - de + pages: + - "/" + - "/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: + 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: [] pages: - - / + - "/" + - "/conferences/:conference_type/:conference_slug/register(/:step)" data: [] -home.its_awesome: +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: [] pages: - - / + - "/conferences/:conference_type/:conference_slug/register(/:step)" data: [] -Conferences: +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: [] -Organizations: +registration.cancel.help: languages: [] pages: - - / + - "/conferences/:conference_type/:conference_slug/register(/:step)" data: [] -Resources: +'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: [] -Sign_In: +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: [] diff --git a/config/routes.rb b/config/routes.rb index b35a0c9..29add61 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,6 +15,10 @@ BikeBike::Application.routes.draw do #get :register, :param => 'step' #post 'register/next' => 'conferences#register_submit' 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' #resources :registrations, :path => 'registration' do # get :form, on: :collection diff --git a/db/migrate/20140719172749_add_email_to_conference_registrations.rb b/db/migrate/20140719172749_add_email_to_conference_registrations.rb new file mode 100644 index 0000000..45f7cea --- /dev/null +++ b/db/migrate/20140719172749_add_email_to_conference_registrations.rb @@ -0,0 +1,5 @@ +class AddEmailToConferenceRegistrations < ActiveRecord::Migration + def change + add_column :conference_registrations, :email, :string + end +end diff --git a/db/migrate/20140719185914_add_is_complete_to_conference_registrations.rb b/db/migrate/20140719185914_add_is_complete_to_conference_registrations.rb new file mode 100644 index 0000000..a591bd9 --- /dev/null +++ b/db/migrate/20140719185914_add_is_complete_to_conference_registrations.rb @@ -0,0 +1,5 @@ +class AddIsCompleteToConferenceRegistrations < ActiveRecord::Migration + def change + add_column :conference_registrations, :complete, :boolean + end +end diff --git a/db/migrate/20140719204949_add_completed_to_conference_registrations.rb b/db/migrate/20140719204949_add_completed_to_conference_registrations.rb new file mode 100644 index 0000000..948736c --- /dev/null +++ b/db/migrate/20140719204949_add_completed_to_conference_registrations.rb @@ -0,0 +1,5 @@ +class AddCompletedToConferenceRegistrations < ActiveRecord::Migration + def change + add_column :conference_registrations, :completed, :boolean + end +end diff --git a/db/migrate/20140723174550_add_payment_confirmation_token_to_conference_registration.rb b/db/migrate/20140723174550_add_payment_confirmation_token_to_conference_registration.rb new file mode 100644 index 0000000..2e03699 --- /dev/null +++ b/db/migrate/20140723174550_add_payment_confirmation_token_to_conference_registration.rb @@ -0,0 +1,5 @@ +class AddPaymentConfirmationTokenToConferenceRegistration < ActiveRecord::Migration + def change + add_column :conference_registrations, :payment_confirmation_token, :string + end +end diff --git a/db/migrate/20140723174648_add_payment_info_to_conference_registration.rb b/db/migrate/20140723174648_add_payment_info_to_conference_registration.rb new file mode 100644 index 0000000..b97ec97 --- /dev/null +++ b/db/migrate/20140723174648_add_payment_info_to_conference_registration.rb @@ -0,0 +1,5 @@ +class AddPaymentInfoToConferenceRegistration < ActiveRecord::Migration + def change + add_column :conference_registrations, :payment_info, :string + end +end diff --git a/db/migrate/20140723182548_add_order_to_workshop_streams.rb b/db/migrate/20140723182548_add_order_to_workshop_streams.rb new file mode 100644 index 0000000..3b8238b --- /dev/null +++ b/db/migrate/20140723182548_add_order_to_workshop_streams.rb @@ -0,0 +1,5 @@ +class AddOrderToWorkshopStreams < ActiveRecord::Migration + def change + add_column :workshop_streams, :order, :integer + end +end diff --git a/db/migrate/20140723183557_add_order_to_workshop_presentation_styles.rb b/db/migrate/20140723183557_add_order_to_workshop_presentation_styles.rb new file mode 100644 index 0000000..b78e4bf --- /dev/null +++ b/db/migrate/20140723183557_add_order_to_workshop_presentation_styles.rb @@ -0,0 +1,5 @@ +class AddOrderToWorkshopPresentationStyles < ActiveRecord::Migration + def change + add_column :workshop_presentation_styles, :order, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 50797cc..cc812bc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # 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 enable_extension "plpgsql" @@ -66,6 +66,11 @@ ActiveRecord::Schema.define(version: 20140716002152) do t.boolean "is_volunteer" t.string "confirmation_token" t.binary "data" + t.string "email" + t.boolean "complete" + t.boolean "completed" + t.string "payment_confirmation_token" + t.string "payment_info" end create_table "conference_types", force: true do |t| @@ -267,6 +272,7 @@ ActiveRecord::Schema.define(version: 20140716002152) do t.string "info" t.datetime "created_at" t.datetime "updated_at" + t.integer "order" end create_table "workshop_requested_resources", force: true do |t| @@ -291,6 +297,7 @@ ActiveRecord::Schema.define(version: 20140716002152) do t.string "info" t.datetime "created_at" t.datetime "updated_at" + t.integer "order" end create_table "workshops", force: true do |t| diff --git a/features/landing_page.feature b/features/landing_page.feature index 88185ee..8ee7b64 100644 --- a/features/landing_page.feature +++ b/features/landing_page.feature @@ -1,9 +1,24 @@ Feature: Landing Page - As a person interested in bikebike - I want to find out about the current bikebike - In order to attend the conference + In order to learn about Bike!Bike! + As a visitor - Scenario: Read landing page content - Given I am on the landing page - Then I can read about the current bikebike - And I can register for the conference \ No newline at end of file + Scenario: See a more info link + Given There is an upcoming conference in Halifax NS + 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 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 diff --git a/features/organizations.feature b/features/organizations.feature new file mode 100644 index 0000000..e69de29 diff --git a/features/registration-two.feature b/features/registration-two.feature new file mode 100644 index 0000000..e69de29 diff --git a/features/registration.feature b/features/registration.feature new file mode 100644 index 0000000..d4d5a28 --- /dev/null +++ b/features/registration.feature @@ -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 diff --git a/features/step_definitions/interface_steps.rb b/features/step_definitions/interface_steps.rb index 2e97ad6..072c24b 100644 --- a/features/step_definitions/interface_steps.rb +++ b/features/step_definitions/interface_steps.rb @@ -1,13 +1,215 @@ Given(/^I am on the (.+) page$/) do |page_name| - visit path_to(page_name) + visit path_to(page_name.to_sym) end -Then(/^I can read about the current bikebike$/) do - within('#conference-name') { expect(page).to have_text 'Bike!Bike!' } - within('#conference-location') { expect(page).to have_text 'Columbus, Ohio' } - within('#conference-date') { expect(page).to have_text 'August 30 - September 1' } +Given(/^I am on the (.+) site$/) do |language| + ApplicationController::set_host (get_language_code(language) + '.bikebike.org') end -Then(/^I can register for the conference$/) do - expect(page).to have_link 'Register' +Given(/^I am in (.+)$/) do |location| + 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 diff --git a/features/support/env.rb b/features/support/env.rb index 64ddf61..f3f308d 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -5,6 +5,7 @@ # files. require 'cucumber/rails' +require 'capybara/poltergeist' # Capybara defaults to CSS3 selectors rather than XPath. # 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. # For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. begin - DatabaseCleaner.strategy = :transaction + DatabaseCleaner.strategy = :truncation + #DatabaseCleaner.clean_with(:truncation) 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 +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. # See the DatabaseCleaner documentation for details. Example: # @@ -54,5 +97,46 @@ end # Possible values are :truncation and :transaction # 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 -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 diff --git a/features/support/factory_girl.rb b/features/support/factory_girl.rb new file mode 100644 index 0000000..3951634 --- /dev/null +++ b/features/support/factory_girl.rb @@ -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) \ No newline at end of file diff --git a/features/support/paths.rb b/features/support/paths.rb index b8adec2..f0591f1 100644 --- a/features/support/paths.rb +++ b/features/support/paths.rb @@ -1,18 +1,36 @@ module NavigationHelpers - def path_to(page_name) - case page_name - when /^landing$/i - path = 'root' - end + def path_to(page_name) + append_root = false + case page_name + when /^landing$/i + 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 - self.send((path + '_url').to_sym) - rescue Object => e - raise "Can't find mapping from \"#{page_name}\" to a path.\n" + - "#{path}_url\n" + - "Now, go and add a mapping in #{__FILE__}" - end - end + if path.is_a?(Symbol) + begin + path = self.send((path.to_s + '_url').to_sym).gsub(/^http:\/\/.+?(\/.*)$/, '\1') + rescue Object => e + raise "Can't find mapping from \"#{page_name}\" to a path.\n" + + "#{path}_url\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end + path + end end World(NavigationHelpers) diff --git a/features/translations.feature b/features/translations.feature new file mode 100644 index 0000000..5c84218 --- /dev/null +++ b/features/translations.feature @@ -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 diff --git a/features/volunteer-registration.feature b/features/volunteer-registration.feature new file mode 100644 index 0000000..6690693 --- /dev/null +++ b/features/volunteer-registration.feature @@ -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 diff --git a/public/maps/Thumbs.db b/public/maps/Thumbs.db index f45eec370fc4cdd897301f781ca6915ddbdd4e54..8ea6334888b9dc8d37fcea7b04787e44ba2eb3f1 100644 GIT binary patch delta 41 qcmZp;!q{+yaYGIZo5F9C|Dww_7qQG@W?=w=%>o>M^r0+^4~76RBn-L$ delta 41 qcmZp;!q{+yaYGIZ8$-C8+{SsEi&$ncv-}5w%>o>M^r0+^4~77Bx)ZYi diff --git a/public/registration_data/1ehptyshk26pjbe8/ba.png b/public/registration_data/1ehptyshk26pjbe8/ba.png new file mode 100644 index 0000000000000000000000000000000000000000..2640c3cbf65ff5eca90fa993bb06a8e0ee08cfba GIT binary patch literal 13847 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/2zizzr5nokd1rh7d/Thumbs.db b/public/registration_data/2zizzr5nokd1rh7d/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..88453876a1acc1487146c7e801f7812a7fcd594a GIT binary patch literal 11776 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 M@AyAG{~4YBCrZWtdjJ3c literal 0 HcmV?d00001 diff --git a/public/registration_data/2zizzr5nokd1rh7d/bikeagaindoor[1].jpg b/public/registration_data/2zizzr5nokd1rh7d/bikeagaindoor[1].jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4369ffa4ac9f3bfdb9df1ee41b7f4dcdab4d347 GIT binary patch literal 6262 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/9vpeci4qzca7qs3o/Thumbs.db b/public/registration_data/9vpeci4qzca7qs3o/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..152b7cb99163e5896bd346e4e24e3e7ce5b2e735 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/c1g7e2jsyqrp62rv/Thumbs.db b/public/registration_data/c1g7e2jsyqrp62rv/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..7a30df863a7d1819b4d2107124ca17c1d0dbbc66 GIT binary patch literal 11776 zcmeHtc~}$Kwr@F)Ev#jK$|h7cqoRt6 z8Y=(mU4MP!zpno`ufPR>g#O(CegLe1VDugWM4}e_kC!dLioeDD->~7IbU%1Ou{Zx| z+mgS>3nRb;Fa?O{^(f#C90HD@HBaCmV20KYqcu~sZiL?dS~&MzxT3# zwfuKnfq!OyZ&AK&cS+`;R zV%f0q&)fQcyZ!ayAFqoqS+acP%Jr+)Z&|;7i|U3A8&nrB8&v<=ZR3CFC9i;utAPrj zV%d`2z|xINmTg>uGyqyC9bJLW_HPqLpO-FMzGCI7)oa$SL%&e@J(?|+EnB*L*@_j* z(JZhe7X2JpzH!B-U59>Lx!K-x)$Z%6Mn9)KS-s~(>1(wM?bCY?dxiY6X6+XBts2|* z?bp`P)iX9RH9K334+^5g-p693wrcN9U)m?w-%ReM7?| zqkO^G*Kgx9v*NjViBu+ESk!9?uA*V5&Sc3ISG$J{l^sh<^M>tzbW>= z_38uGFI$2dZ`now3%ovEaoJbAQ-e9-kTv|SQyQ+#AE@(305y*Ur(X<9p|n10cn1an z)K96?O=pAwx>})!W1eF&1PDMbwcxC!a09M!KKw?7K60Ebbv~)hB|L7FR75*Fnf86# zGCcMn+%@7Hmk^+a00Cnqp^aI$Iq#CMl{PBvidw+Fk|@@i_VZ1V)P~ZVK58}tSE(B~ z5yhkc-Yg~;0iy6l*`yRlCRRH`#FMp^Jl$-)cd&)(hydk#CC~qY09Wqi!F!udhopR$_~N4{b7(W`A5$-I zt@viyQm_t}-kyqkxU=#=%WR&;sf7(up>Fgak5SvRn9`v0l0<7)EM{AU5-f(l3U0IC)-?UptKY#U7J57sE zb3OseRFf~tA`}A_YG54(zQt0yM@}`=or8bKexN9g9mB(FC7nYib&(OF&3mc_3STtw z-G$;w1Yqi?$Z~$i-W7pzoEmUDa5kR~#E3W`C0yN`n670HTWUT70s@qEA6J>}j!SePXL@gY%wi49B0#CQ%iR)VlFr2L z2W#b&D^^!I)y2wzMBaE08X=K|qN!}-MlPK+-HDf$6GY!PKz83>mrbzm!~OXpN}|^_ zN?%&O1_G>8(ZIpOINlo3$i0Y=E)~fGtdM-MSV|_f+Sd;-TC3nL4O)%(% zo!;}*+4H)hYO71jr((Q%8&Rfa6*L>kn&(i@&serEI}k9=tSC2FpLe7wYa;@5sKhPY zDm(j5vo-XQf6KvwHV6U6%(ZTZ2L8ea8FU0V;Xg{&=5oO|*21G;){&}7F4QNq+W}3{u6mbghU* z@OpWrnuy`U(m_utIJ5Awr>cV*>}=`7ooz;kyIh!chq8iE$!L)m3#>Vn&xlh-U?>!? zfK;^H<182r=iAd)`8C<;J;+jqo^Bh>!AW}%;BM~I{tYg1pha4|K6x57%R2-Z9_J*L zWKHkE?Q-6R&6XyeO?Xeg*S(iplg6}{GUqh|b5eszz9lubJM8lXz5xVQujBjfy++M@ zsftg|*g9nh;ZS6>=p$-SduLMsCy!Jy}rN zm&Mw*9TslpR@jxr@=3$AF0t#IJDL^b)ix+ZVNIHSG=^uKB4a|+Df5#WSO)%pm)N_n z%ZRNs!DMfz*~ycAPSgo*)$Bt6%P};7DL!juiN`9P6i#o2ZxP^k3f%i4l&i6Kc1G;T zsqi4MmBx{FvlS2K<=k-nvub8SFSrL=gLXuK|55+0w%|m-R@BKKK!7DB znLZa4Z^P{C#r&W`GEvmi^ig6w{Me=q0nQKoIh?}gTbdr>!6V(K`*02p0RrRDFhA8E znDobmZMK#Y-jGXsn&~Mv)c3qJ@(kSNN*YX-Qbn^nY`UMiJW|&dFM=E6IRZp0P(8k2l|OTpMhIYklP5xeulQ!=rD&4yX8rpMjpuv&@gNSNd83V zsrv&z`;@!3tWZFlBEblt2n!ZFku0j@YpKv@FVyw)jbc6T3y9^1!JgGvS-e7i(I#!H zQPD@6^&PuUsjfO6!&ADeiicf$oga6v+&e$J8||Z0Lh{=jYztm67u=)BRtYMa9R%)g zgQuiqmjdVyF2R3WF_bU4+Y@+2(bcnuB5{pQ``Nk+V&W-?>du-*`eUqiWeopU(yx0-&SoxfV>7CMhXh^LWVCx*=xfE{d3?Z zc4ZMk(eg=V8Cz-7NSxi=*#kect76sKZF{}2iT|@Cc=^J30x!YMz zX<(W1Bz{@pz4+q22td$AjqgK!auJ>925OPN<*PLf=2ymd5c-Ut4SiO+mFQ z>YOZlv>)&qik%&(dyMEUY$?@l-5q-7WtVKX3TJQEYIq`cTzaJY@o7SmH7iVK7VJMc zeB9!lLz>14;(Ke3X5jb{kuQ0K(2+f1W>;l1c8A?hE1wl&o6+w>6(k zRw-!aW>P0Kpgqjo>z0AFcZ=)I%h)eMBDCDz@i_IC z-2F7ESS{o5B%y9l`)o%WN$=HrN<=u{_(#=mn!J?oPXw%=?Y8h;nS_p#*M6aT$_^FT zYMS-M-X`H5Xv8vhCox8fsSGbSeO*iK{U#(8e4At$RklD=B4yVTOpefC{SZMkhXB6W zn{1&xZ?T9Q!eGS(5Hv9|oO0!Zkq@0Vk<>oZC&T7j4_7*NIQk+$71iUm_a<&b={wWH zp6%G?;qAUn%35PkhUyNb)+JmHqSmsEL&&ZAiu`W-ad$f+%f6jier$D#k87CUc2RLi zPX;Oaz!&UP7Nf+yyrqh*#4f10mshx+?nxdr8}x@L29l$iYF<>E90qZy69MwCjA~@l z9((0%NvzSi0Pn*s+zjD}W1itFGLZDSV-@F-^q_yw0kVW4P7*DkMeE!cK^s7lG2a+pN3C$n#qEM&zgD!r`|IB8u> zpUcn3tHc^)fq*N`kWpLTc@=og7`^J2MS5GH2z_meJzaV2q0`7q1ZYUigK!H7z&)Ew z*h;Lk?an*ndozb9g7~mr$^86W-uYV=k4*ElUdioBsqrrgyU38Ul6-wFPjM^Lz8W(@EG);1r%FxRlAfnQ~;L7Lrk;u-b6E}ItWmcChD(t+k8 zSK4+L6)209SvH6(xhMfwDN$DbDtSO({7#=Tg8DAb=<;v-{hZskvq>2O*aQJWq1w0U zm^4iD5Ra&LLGL|+dYf>8D`srS?`C0C?4K|Y6mO8ELHC1ph6{6o#pmmieb zJ$xfY8HGI#=3JJ?d~N$^qQ=sF6V~y~74}WHMu3~`m`v4zZ7qZlI{Wq_YFpG-_;R(` zFm!^pys++BACFjv^BB94+V?KOwcJ#YA_ZUh>+HVVHAxQPp_=!)6ukO97#yUeF^PlV zcW$LlJf}`LmLs5p5|`>j5fYMe<;Piz6EhmkuZ_OqUMY`H8`47Qi?FFBl}xk2`bdbxKt}F zs(8bsbjG8nt7mRLv?ux#LyF2)-hOT-h=xYnu11e?lv=bEUPJ(z@{tmE_aLjJi zHlxA6blrP`0L7p*z>6Sfx+tTQ^jd$rJf_9Jx6rh*GwCeDn#jRGI%AmJR5Vdo^M-s1 zKN=9!%`ao4s^*^&%gRmh%qg~$sV}#1N8VF5T>G=)5+`!wl%vfnn+jHU21X$`HJ9C`&V1 zQW=jMR1Yd-w}W*sWLNgNCFui8`UU}J!nUwAu5kB;C|fvnt;8>mpvYl&EH(g>fq|4n zcsJ|EZteS`Hu=5$PsQszk2m0fOSgqqgkEo`8JwzIBn*Xu%h5-|Q#$`5dEZvYcO+%R zzog}}q}!(p6BEa|o++%gS-OscCP}%m?InY0{hrgeXx_8(Xbn0BzU}yf!c3Br(>{r1 z!CF$6LMy%8awDxwI!0AtewW`Bh!3q3>T{uVn)w#SyP)%@C5|Zdsb)>2E>bGimQO@x zHmi=3Rddg0wo*UrwfqkSPh@hjs@uS42G2YZWyWxa3T8sglhacBp$0doTy#e^0i55eI1k;8L6KJ=hBIifF~|*rw3Sl z^UHrd(qD`Ke{?HObDX z+HF?-e8KQ4sN(<_Uuc(uuXjtHk7mvAX)lK+I@wQf@GtwY(0-fNvG9V2t@+A@d=*G< ze>pVnyO3GP0FQr?y53V1TQIGgZaGNl9pIMF>Gjy*iFdG0+I46E-T!y$PzUO@H}4)i ze7&xPwoX>3YCG(geTS4W6^sV9J>k49jQaeWo7HVMhpwc5XK9sG+&((nML$fRDM0`f z2mu)kU4&w;s27S5*WIc=fHo&Q5YVMJ0S{-`K5+Y(_|{ z0++=vncV*2@y?89N4dKx$Wt?o+mwITkgGL2hT$N<(s=sr*agl&dF+&)t~$y!aZoDD z=t;t3o%85wuxU{BT;c0;&k*3@SIhyp?KuZKV-Q4##)s?Ik;eSVSCrzUEP4zP(>oXL zh5$uAL@1{~c{BmGL}_wZz}$yaEdKpOj{+at2JP2U#I$ijZKGqlldz-c{1 z=_^YW*SZx2NU4uz-st(~ z5k!T0Jp9-Z_7)P;m&*{^Az3oF1>Vh@~pQ&cMy z6w;@Q4LP;!rOkrp{Dj~}D%s%b^X@!iEw$36ruT$MFJGTnG5XmuaNlxD89xq-W*e+! z6KewA^X2gIx6t#7K7k-Z8_oTeFt7SXRRlXi3uSOowLA4~#2^@ANgQ%vPoK5tk;I2; z4eJPsu70xt8h=pl*~^E054>t{JfoO^h9U0@%8mzi$D&|~82ZYZTS3bvAFkJ$zJInC zH#7jZwN%dKB@Z%43s+eSYkN3a+d3y%wLk92BRdw?B+4W04s+XTz6>T7a$WDhLf6hs@_ARSgH3dyzE~&M zH4=Nry@(fmTVAl>!|3y`GSBO0Mk%Z1)P&7SQ@^dVe@;;tdfyy(Ur4oqK2JQGHgGk53x8U~%VM(dxBU6wowqy zMP!6eWK;YuSJuYHRnn||{&Uae0nNiTaOcb>H*kH19vc>oF9a`n+t%k;!rXcx1ID3z zQxl`s?e^dsmhQNB&?3S2MKSa>ov~>ZZ^h;FK)4z-|^;@)(wc*d9{0mMo!MiNmUqq5?%=%39?_qC0^Z%yYIV3w^&?g!V z7Sr`;3X?{&)_`7P1+LVkaTSUxj!bcqSi|SD-bGzYXEwS>D>`{Id`p|#2YGIdpNdUT zRMtK&eI4ALRmTM*ox!R2IcvKwD3hB5)zpac2@K5fxHT^)+}$|V&`Cu@%g_4CSGRo! zTsG$`(|nd4YZ9S;)f0y9Ndv}6iIi`eIK~I8 z=ZZ>O@J!N3LB{(uLMU7r?8>kZ**}P38PVT&>AQa;L2WHn0%QIK@ba^JtdJs_v}&HZ zEw&Ey?|t7x6!y+R=>pN(NSO z66gM)IQyjfg5u7sjdDZ%log#QJH6=$Jl?_uzo_LGOhnPSxqeUA7@wKVP2!OYZyr4^ zbaz!0a)_Z1eD1f*j+dNQ$$5~kU@6coXy7QC$dl7QT%T$3_Isn}F*>3W(<}Rx#O&4p z>-O`Mp$PCYcO6TX=ll@*oP||J`*_SWxXu;x22ui&+)w)6kzgAI2r$Cp>$fx?Bpqa5 zwF22iHn0QQC~UJaZYa_;rGmk6BhX)3KN^s^1wX1l#{Il$l^jOoL|cr?Ra(LEB-E=$ ziYXf>)UUf+B;6gTTIq-Fl?QA%^ajrf-RfB&w5DKr&|f<5TvwewqV7QqwlRw|cFfTc z8*RZ_M3_XJDfrwUQ_9(n0JReyCkhx{u5w}ipliLktEUx8RjCB-Sj=?*L3ww5mGqtfFGzvazoC+ZOEvHNo= z+fLGdK>%q>yN$uQ*u0aBfbM~s;=$W#UI_ua6ug1_#)7sw$PJv{eDX|aRGs6YN>_oP z_H@R)C{5GpIOj7qf@DXg7?28F^nMjo_7h*jU1to6{VJa&&*#4`kk_WAzN5^Fmw_W) z>HD#DzV`i64%Xj494oZJ!fcO(Af?Gzm2UZkP8qDxgMyvQ+-Y;dh!Ncg0aV7LG2YGd zM9NRqqy>N8f?5>ePKtvaoeS}xta_gSUF8yQ9vzS{Nk&g0u1X17UvAE2x8tz!LsyS5(Z+mh~?qj752IzDmKs8y|1D`uQ8z^|@ zH}a)JwnvX5-8^_;!g6nA*PJ5Z@`c1Y7Ykman6TlkT6qEIySJGSD2E=S48REienDqI zd^wsKX0QTt#Wv)f2a3Gj;`O}k4r+uPQkMNOaOv}RwIop?nl-wLpSxH^hrV!oZx)$q z!cwl-Qhl2CyfWTtkGW$|9rdGfr@GQE)f(m6i63~KjIO-Az2$4XYcEgG7mZEWPiT#{?#y`XD*_z!XEOU-av%s2k@pb8K-^@_081 zJ=BP%9jDB9QJI$x=gbeyWPI;^FwN8Y0e^L^y@WD9lSBEAesAluC84W$W zVe@ah5x}vtk{tPa&9TZI$(`eQEkz;f$%-mp^K4PK7hBOdKw&uU%is_Vt*3^c2g(WI zjdDD5xQCY$NTb93wmb4kOXE|Gx8F3j|L|)X0$ebEN7Nfxd(PRl#_;LBL+r6Eos!x+ z8>3b87||7*PE)Im=C-~ly5bodkhs48FW8v{og#hZ`WMP8o!uLCtINS*oSBxiG2$io zoho5CWFRVMvg&vfacfsFb|NoI>$be(63WC;r_-T*)jWi94RY5M`W`(BDZ_3U#!3so zo~L>b=j@3uDH-n*)IPplpPqh*vwZf6dD*fVDMKf>en+pa712FvJo;#W|5@C!(88lA zJv#R%k=ovF1)AQBLw`^}fM6R`u%s_&MB@}>n?pnQ`ULN69|8h$|BYY1$Noj1pL|z` zHU0Y_3p6D{YhL6s!5`qgEMccmKQQDc^Wbr?b)1Gqrj^=);o-)DQq_$mudP%srh`cD Nf5-pn`OoO|KLLp91x5e> literal 0 HcmV?d00001 diff --git a/public/registration_data/c1g7e2jsyqrp62rv/bikeagaindoor[1].jpg b/public/registration_data/c1g7e2jsyqrp62rv/bikeagaindoor[1].jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4369ffa4ac9f3bfdb9df1ee41b7f4dcdab4d347 GIT binary patch literal 6262 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/c7evv341mlp3k4ek/Thumbs.db b/public/registration_data/c7evv341mlp3k4ek/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..3b6832024aab434ce33ddebd12d09460c4f4ab4e GIT binary patch literal 11776 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 KFFyZU75_U}-3Gn@ literal 0 HcmV?d00001 diff --git a/public/registration_data/c7evv341mlp3k4ek/bikeagaindoor[1].jpg b/public/registration_data/c7evv341mlp3k4ek/bikeagaindoor[1].jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4369ffa4ac9f3bfdb9df1ee41b7f4dcdab4d347 GIT binary patch literal 6262 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/e0vs4ovunuo2i32i/ba.png b/public/registration_data/e0vs4ovunuo2i32i/ba.png new file mode 100644 index 0000000000000000000000000000000000000000..2640c3cbf65ff5eca90fa993bb06a8e0ee08cfba GIT binary patch literal 13847 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/lqgjjhzaew2klf7y/Thumbs.db b/public/registration_data/lqgjjhzaew2klf7y/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..7c75e216a7bcc5bf71e6e659c69f1e95857f79c7 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/lqgjjhzaew2klf7y/bikeagaincolourlogo.gif b/public/registration_data/lqgjjhzaew2klf7y/bikeagaincolourlogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..254951c7cc36bef0d7e5e738e0c890bdcb005523 GIT binary patch literal 9036 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/qabyxh5an79d1sf1/Thumbs.db b/public/registration_data/qabyxh5an79d1sf1/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..04608e0942bf5225d623bdd07275e5265bbb2351 GIT binary patch literal 11776 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 J=YOl>e+LS^295v# literal 0 HcmV?d00001 diff --git a/public/registration_data/qabyxh5an79d1sf1/bikeagaindoor[1].jpg b/public/registration_data/qabyxh5an79d1sf1/bikeagaindoor[1].jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4369ffa4ac9f3bfdb9df1ee41b7f4dcdab4d347 GIT binary patch literal 6262 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 literal 0 HcmV?d00001 diff --git a/public/registration_data/tlxsjj1ljiqbvoai/lb.jpg b/public/registration_data/tlxsjj1ljiqbvoai/lb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af70161e05b9f06d361b58bc4693c0d67c5ba40f GIT binary patch literal 31087 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

+5s73I+4P^ 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 literal 0 HcmV?d00001 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b69aa9b..b33f4c6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -43,6 +43,7 @@ RSpec.configure do |config| config.order = "random" config.before(:each) do + fu Translation.connection.execute("TRUNCATE TABLE translations RESTART IDENTITY;") translations = DevTranslation.connection.select_all("SELECT * FROM translations")