Fixed merge conflicts

This commit is contained in:
Godwin 2014-07-18 20:35:15 -06:00
parent 21ec7bb82a
commit 1efe20fe42
41 changed files with 1185 additions and 105 deletions

View File

@ -1,7 +0,0 @@
#!/bin/bash
# The logic to start up your application should be put in this
# script. The application will work only if it binds to
# $OPENSHIFT_INTERNAL_IP:8080
export PATH=$OPENSHIFT_RUNTIME_DIR/bin:$PATH
cd $OPENSHIFT_REPO_DIR
rails server -b $OPENSHIFT_INTERNAL_IP -p $OPENSHIFT_INTERNAL_PORT -d

View File

@ -1,4 +0,0 @@
#!/bin/bash
# The logic to stop your application should be put in this script.
kill -9 `ps -ef | grep "rails server" | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1
exit 0

View File

@ -70,6 +70,6 @@ platforms 'mswin', 'mingw' do
end
group :staging, :production do
gem 'unicorn'
gem 'unicorn' if !(RbConfig::CONFIG['target_os'] =~ /mswin|mingw|cygwin/i)
end
end

398
Gemfile.lock Normal file
View File

@ -0,0 +1,398 @@
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)
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)
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 (1.0.1)
unicode_utils (~> 1.4.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)
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)
pg (0.17.1-x86-mingw32)
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)
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)
unicode_utils (1.4.0)
wdm (0.1.0)
webmock (1.18.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
websocket (1.0.7)
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-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
pg
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

Binary file not shown.

View File

@ -0,0 +1,37 @@
#= require froala_editor.min.js
$ ->
$('[data-editable]').editable({inlineMode: true, blockTags: ["n", "p", "h2", "blockquote", "pre"], buttons: ["formatBlock", "bold", "italic", "underline", "insertOrderedList", "insertUnorderedList", "sep", "createLink", "insertImage", "insertVideo", "html", "undo", "redo"]})
$('[data-editor]').editable({inlineMode: false, blockTags: ["n", "p", "h2", "blockquote", "pre"], buttons: ["formatBlock", "bold", "italic", "underline", "insertOrderedList", "insertUnorderedList", "sep", "createLink", "html", "undo", "redo"]})
$('.field.country-select-field select').change () ->
$country = $(this)
country = $country.val()
$territory = $('.field.subregion-select-field select')
if $territory.data().country == country
$territory.removeClass('can cant').addClass('can')
return
$.post '/location/territories', {country: country},
(json) ->
$territory.html('')
if json && Object.keys(json).length
$.each json, (code, name) ->
$territory.append($('<option>').text(name).attr('value', code))
return
$territory.removeClass('can cant').addClass('can')
$territory.data().country = country
else
$territory.removeClass('can cant').addClass('cant')
return
, 'json'
$('img + input[type="file"]').change () ->
readURL(this);
return
readURL = (input) ->
reader = null
if input.files && input.files[0]
reader = new FileReader()
reader.readAsDataURL input.files[0]
reader.onload = (e) ->
$(input).prev().attr('src', e.target.result)
return

View File

@ -27,7 +27,7 @@
// Libraries
@import "compass";
//@import "font-awesome";
@import "font-awesome";
@import "foundation_and_overrides";
// Local settings (also edit foundation_and_overrides.scss to modify global variables)

View File

@ -40,6 +40,7 @@
//$header-font-family: 'alte_haas_groteskbold', 'Alte Haas Grotesk', sans-serif;//join("Open Sans", $body-font-family);
$header-font-family: 'AlteHaasGroteskBold', sans-serif;//join("Open Sans", $body-font-family);
$header-font-weight: bold;
$icons: FontAwesome;//join("Open Sans", $body-font-family);
// $header-font-style: normal;
// $header-font-color: #222;
// $header-line-height: 1.4;
@ -80,9 +81,9 @@ $body-font-family: 'Source Sans Pro', sans-serif;
$primary-color: $color-1;
$secondary-color: $color-2;
$alert-color: $color-4;
$alert-color: $color-3;
$success-color: $color-2;
$warning-color: $color-3;
$warning-color: $color-4;
$info-color: $color-5;
// We use these to make sure border radius matches unless we want it different.

View File

@ -286,6 +286,116 @@ ul.tags,
}
}
.org-mini-preview {
position: relative;
overflow: auto;
margin: 0;
background-color: $gray;
border: 0.25em solid lighten($black, 33);
&.portrait {
img {
float: left;
max-width: 50%;
}
figcaption {
float: right;
max-width: 50%;
}
}
p {
font-size: 0.9em;
line-height: 1.25em;
}
figcaption {
padding: 0.25em
}
}
.org-list-select {
&.chosen {
display: none;
}
ul {
list-style: none;
margin: 0;
overflow: auto;
height: 25em;
border: 0.25em solid $gray;
}
li {
background-color: lighten($gray, 5);//rgba(225, 225, 225, 0.5);
margin: 0.25em;
&:hover {
background-color: lighten($color-4, 25);//desaturate(lighten($organization-color, 33), 33);
}
&.removable:hover {
background-color: desaturate(lighten($color-3, 16), 16);
}
&.selected {
background-color: desaturate(lighten($organization-color, 33), 33);
}
&.not-found {
display: none;
}
}
figure {
margin: 0;
padding: 0.25em;
overflow: auto;
}
img {
float: left;
margin-right: 1em;
}
h6 {
margin: 0;
}
p {
font-size: 0.8em;
margin: 0;
}
figcaption {
overflow: auto;
}
@include breakpoint(medium) {
&.chosen {
display: block;
}
&.choose {
li.selected {
display: none;
}
}
}
}
#org-filter {
width: 100%;
font-size: 1.25em;
padding: 0.333em;
border: 3px solid $gray;
margin-top: 0.5em;
outline: none !important;
}
@include breakpoint(medium) {
.organizations-index,
.conferences-index {

View File

@ -406,6 +406,7 @@ main {
+ em {
display: block;
color: $color-5;
font-weight: 600;
margin-bottom: 1em;
}
}
@ -428,14 +429,16 @@ main {
figure {
margin: 2em 0 0;
img {
box-shadow: 0 0 2em $black;
}
}
}
}
.page-style-emphasize-banner & {
figure img {
box-shadow: 0 0 2em $black;
}
}
.organizations-index &,
.conferences-index & {
height: 13vw;

View File

@ -49,6 +49,28 @@
color: $article-color;
}
}
&[id*="previous"],
&.less,
&.arrow-l {
&:before {
content: '\f053';
font-family: $icons;
vertical-align: middle;
margin-right: 0.25em;
}
}
&[id*="next"],
&.more,
&.arrow-r {
&:after {
content: '\f054';
font-family: $icons;
vertical-align: middle;
margin-left: 0.25em;
}
}
}
input[type="file"] {
@ -159,9 +181,9 @@ fieldset {
font-size: 1.25em;
}
&.text-area {
&.text-area-field {
label {
top: 1px;
/*top: 1px;
right: 1px;
bottom: 1px;
left: 1px;
@ -173,10 +195,15 @@ fieldset {
background-color: rgba(255, 255, 255, 0.5);
text-align: center;
width: calc(100% - 2px);
height: calc(100% - 2px);
height: calc(100% - 2px);*/
position: static;
background-color: #252528;
margin-top: 1em;
span {
position: relative;
background-color: inherit;
color: $white;
/*position: relative;
top: 50%;
text-align: center;
font-size: 1.25em;
@ -185,10 +212,14 @@ fieldset {
padding: 0 0.5em;
display: inline-block;
border-radius: 0.5em;
box-shadow: 0 0 1em;
box-shadow: 0 0 1em;*/
}
}
.froala-element {
min-height: 10em;
}
textarea:focus + label {
display: none;
}
@ -250,6 +281,8 @@ fieldset {
}
&.check-box-field {
margin-bottom: 0;
div {
float: left;
font-size: 1.75em;
@ -272,6 +305,11 @@ fieldset {
content: '';
}*/
}
input {
margin: 0;
}
label {
position: relative;
margin: 0;
@ -564,3 +602,26 @@ article {
font-size: 1.4rem;
}
}
.error {
position: relative;
padding: 0.5em 1em;
background-color: $warning-color;
&:before {
content: '!';
position: absolute;
font-family: $header-font-family;
background-color: $alert-color;
color: $white;
font-size: 2em;
line-height: 1em;
width: 1em;
text-align: center;
border-radius: 50%;
right: -0.333em;
top: -0.333em;
}
}
p.help {
font-size: 1.1em;
}

View File

@ -115,47 +115,245 @@ class ConferencesController < ApplicationController
next_step = nil
if !session[:registration]
session[:registration] = Hash.new
session[:registration][:path] = Array.new
end
case params['step']
when 'register'
session[:registration][:email] = params[:email]
user = User.find_by(:email => params[:email]) || User.new(:email => params[:email], :role => 'unverified')
registration = ConferenceRegistration.new(:conference_id => @conference.id, :is_attending => 'yes', :is_participant => params[:is_participant], :is_volunteer => params[:is_volunteer])
session[:registration][:user] = user
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 }
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'
next_step = user.organizations.length > 0 ? 'questions' : 'organizations'
session[:registration][:user].firstname = params[:firstname]
session[:registration][:user].firstname = params[:lastname]
if !session[:registration][:user].role == 'unverified'
session[:registration][:user].username = params[:username]
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.'
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]
if !session[:registration][:user][:id]
session[:registration][:user][:username] = params[:username] || (params[:firstname] + ' ' + params[:lastname])
end
if params[: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)"
end
when 'organizations'
session[:registration][:organizations] = Array.new
if params[:org].length > 0
params[:org].each { |org| session[:registration][:organizations] << org }
if params[:add_new_org]
session[:registration][:new_organization] ||= Array.new
session[:registration][:new_organization][0] ||= Hash.new
session[:registration][:new_org_index] = 0
if !session[:registration][:new_organization][0][:country]
my_location = lookup_ip_location
session[:registration][:new_organization][0][:country] = my_location.country_code
session[:registration][:new_organization][0][:territory] = my_location.province_code
session[:registration][:new_organization][0][:city] = my_location.city
end
next_step = 'new_organization'
else
next_step = 'questions'
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'
end
if !params[:organization_email]
message = _'register.new_organization.no_email_error','Please tell us your organization\'s email address. We need it so that we can send out invitaions for upcoming conferences. No spam, we promise, and you\'ll be able to edit your preferences before we start ending out email.'
elsif params[:organization_email].strip.casecmp(session[:registration][:email].strip)
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.'
end
if !params[:name]
message = _'register.new_organization.no_name_error','Please tell us your organization\'s name'
end
i = params[:new_org_index].to_i
session[:registration][:new_organization][i][:country] = params[:organization_country]
session[:registration][:new_organization][i][:territory] = params[:organization_territory]
session[:registration][:new_organization][i][:city] = params[:organization_city]
session[:registration][:new_organization][i][:street] = params[:organization_street]
session[:registration][:new_organization][i][:info] = params[:organization_info]
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
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)
dir = File.join(base_dir, hash_dir)
while File.directory?(dir)
hash_dir = rand(36**16).to_s(36)
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])
end
if params[:add_another_org] && params[:add_another_org].to_sym == :on
next_step = 'new_organization'
if params[:previous]
session[:registration][:new_org_index] = [0, i - 1].max
elsif !error
session[:registration][:new_org_index] = i + 1
session[:registration][:new_organization][i + 1] ||= Hash.new
if !session[:registration][:new_organization][i + 1][:country]
session[:registration][:new_organization][i + 1][:country] = session[:registration][:new_organization][i][:country]
session[:registration][:new_organization][i + 1][:territory] = session[:registration][:new_organization][i][:territory]
session[:registration][:new_organization][i + 1][:city] = session[:registration][:new_organization][i][:city]
end
end
else
if session[:registration][:new_organization][i + 1]
session[:registration][:new_organization] = session[:registration][:new_organization].first(i + 1)
end
next_step = 'questions'
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'
end
when 'volunteer_questions'
session[:registration][:volunteer_questions] = params[:volunteer_questions].deep_symbolize_keys
if session[:registration][:is_participant]
next_step = 'organizations'
else
next_step = 'submit'
end
when 'new_workshop'
i = params[:workshop_index].to_i
session[:registration][:workshop][i][:title] = params[:workshop_title]
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]
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'
end
if !params[:workshop_title]
error = _'registration.register.no_workshop_title_error','Please give your workshop a title'
end
if params[:previous]
session[:registration][:workshop_index] = [0, i - 1].max
elsif params[:add_another_workshop]
next_step = 'new_workshop'
if !error
session[:registration][:workshop] ||= Array.new
session[:registration][:workshop][i + 1] ||= Hash.new
session[:registration][:workshop_index] = i + 1
end
else
if session[:registration][:workshop][i + 1]
session[:registration][:workshop] = session[:registration][:workshop].first(i + 1)
end
next_step = 'submit'
end
when 'submit'
UserMailer.conference_registration_email(@conference, session[:registration]).deliver
session.delete(:registration)
next_step = 'thanks'
when 'cancel'
if params[:yes]
session.delete(:registration)
next_step = 'cancelled'
else
return {error: false, next_step: session[:registration][:path].pop}
end
end
next_step
#if next_step
# redirect_to :action => :register, :step => next_step
#else
# do_404
#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
end
{error: false, next_step: params[:cancel] ? 'cancel' : next_step}
end
def register
set_conference
#template = params['step'] ? "register_#{params['step']}" : 'register'
@register_step = request.post? ? register_submit : 'register'
data = register_submit
@register_step = request.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 params['step'] != true
#session[:last_step] = params['step']
#end
@register_step = template#params['step'] || true
@register_content = render_to_string :partial => template
if session[:registration]
session[:registration][@register_step.to_sym] ||= Hash.new
end
@actions = nil
case @register_step
when 'register'
@actions = :next
when 'primary', 'organizations', 'new_organization', 'new_workshop', 'volunteer_questions'
@actions = [:previous, :cancel, :next]
when 'submit'
@actions = [:previous, :cancel, :submit]
when 'cancel'
@actions = [:no, :yes]
when 'questions'
@actions = [:previous, :cancel, :next]
@housing_options = {
'I will fend for myself thanks' => 'none',
'I will need a real bed' => 'bed',
'A couch or floor space will be fine' => 'couch',
'All I need is a backyard' => 'camp'
}
session[:registration][:questions][:housing] ||= 'couch'
@loaner_bike_options = {
'No' => 'no',
'Yes' => '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
end
if request.xhr?
@register_content = render_to_string :partial => template
render :json => {status: 200, html: @register_content}
else
@register_template = template
render 'show'
end
end

View File

@ -1,6 +1,7 @@
include ApplicationHelper
class PagesController < ApplicationController
protect_from_forgery :except => :location_territories
#skip_before_filter :verify_authenticity_token, only: [:translate]
def home
@ -49,7 +50,10 @@ class PagesController < ApplicationController
def location_territories
#render json: (Carmen:::RegionCollection.new(Carmen::Country.coded(params[:country])) || []).to_json
territories = {}
Carmen::Country.coded(params[:country]).subregions.each { |t| territories[t.code] = t.name }
country = Carmen::Country.coded(params[:country])
if country
country.subregions.each { |t| territories[t.code] = t.name }
end
render json: territories.to_json
end

View File

@ -431,6 +431,14 @@ module ApplicationHelper
_(*a)
end
def lookup_ip
if request.remote_ip == '127.0.0.1'
session['remote_ip'] || (session['remote_ip'] = open("http://checkip.dyndns.org").first.gsub(/^.*\s([\d\.]+).*$/s, '\1').gsub(/[^\.\d]/, ''))
else
request.remote_ip
end
end
def lookup_ip_location
if 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
@ -492,6 +500,11 @@ module ApplicationHelper
subdomain == 'test'
end
def location(location)
territory = Carmen::Country.coded(location.country).subregions.coded(location.territory)
location.city + (territory ? ' ' + territory.name : '') + ', ' + Carmen::Country.coded(location.country).name
end
private
def _form_field(type, name, value, options)
if type == 'check_box'

View File

@ -93,6 +93,7 @@ module BikeBikeFormHelper
end
def country_select_tag(name, value, options={})
#options[:no_wrapper] = true
render_field(name, options = get_options(name, options), super(name, value, options), value)
end
@ -292,7 +293,8 @@ module BikeBikeFormHelper
end
def render_field(type, name, options, html, value = nil)
if (options.has_key?(:no_wrapper) && options[:no_wrapper]) || options['type'] == 'hidden'
options.symbolize_keys!
if (options.has_key?(:no_wrapper) && options[:no_wrapper]) || /country/.match(name.to_s) && /^subregion_select/.match(type.to_s) || options[:type] == 'hidden'
return html
end
@ -306,7 +308,7 @@ module BikeBikeFormHelper
template = template_exists?(type) ? type : 'default'
params[:label_template] = options[:label] === false ? nil : get_label_template(type, options)
params[:label_position] = options[:label] === false ? :none : label_position(type, options)
render(template, params)
end

View File

@ -1,25 +1,31 @@
class UserMailer < ActionMailer::Base
default from: "from@example.com"
default from: "noreply@bikebike.org"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.user_mailer.activation_needed_email.subject
#
def activation_needed_email(email_address)
@greeting = "Hi"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.user_mailer.activation_needed_email.subject
#
def activation_needed_email(email_address)
@greeting = "Hi"
mail to: 'goodgodwin@hotmail.com'
end
mail to: 'goodgodwin@hotmail.com'
end
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.user_mailer.activation_success_email.subject
#
def activation_success_email
@greeting = "Hi"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.user_mailer.activation_success_email.subject
#
def activation_success_email
@greeting = "Hi"
mail to: "to@example.org"
end
mail to: "to@example.org"
end
def conference_registration_email(conference, data)
@data = data
@conference = conference
mail to: data[:email], subject: 'Please confirm your registration for ' + conference.title
end
end

View File

@ -12,6 +12,18 @@ 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
def location
locations.first
end
def longitude
location.longitude
end
def latitude
location.latitude
end
def to_param
slug
end

View File

@ -36,7 +36,7 @@
.columns.medium-4.centered.align-bottom
%div
- if @conference.registration_open
%a.button{href: @conference.url(:register)}
%a.button.arrow-r{href: @conference.url(:register)}
=_'conference.Register_Now'
- if params['controller'] != 'conferences'
%a.button.more{href: @conference.url}

View File

@ -1,4 +1 @@
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :method => :post do
= hidden_field_tag :step, @register_step
= email_field_tag :email
= form_actions :next
= email_field_tag :email, session[:registration][:email]

View File

@ -0,0 +1,3 @@
%h3=_'registration.cancel.title','Cancel Registration?'
.columns.medium-offset-1.end
%p.help=_'registration.cancel.help','If you cancel now, you will lose the infomation you have submitted thus far, but you will be able to restart registration any time while registration is still open.'

View File

@ -0,0 +1,3 @@
%h3=_'registration.cancelled.title','Registration Cancelled'
.columns.medium-offset-1.end
%p.help=_'registration.cancelled.help','Your registration has been cancelled but you can always restart the process while registration is still open.'

View File

@ -0,0 +1,28 @@
- org_index = session[:registration][:new_org_index]
= 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
- session[:registration][:new_organization].each_with_index do |new_organization, index|
- if new_organization[:title]
%li
- if index == org_index && new_organization[:title]
%strong=new_organization[:title]
- else
= new_organization[:title]
%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_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
= text_field_tag :organization_street, session[:registration][:new_organization][org_index][:street], :required => true
= text_field_tag :organization_city, session[:registration][:new_organization][org_index][:city], :required => true
= country_select_tag :organization_country, session[:registration][:new_organization][org_index][:country], :required => true
= subregion_select_tag :organization_territory, session[:registration][:new_organization][org_index][:territory], session[:registration][:new_organization][org_index][:country] || 'US', html: {class: session[:registration][:new_organization][org_index][:country] ? 'can' : 'cant', data: {:country => session[:registration][:new_organization][org_index][:country]}}
.columns.medium-5
= image_field_tag :organization_logo
.columns
= check_box_tag :add_another_org, (org_index <= session[:registration][:new_organization].length - 1)
- content_for :footer_scripts do
= javascript_include_tag 'editor'

View File

@ -0,0 +1,37 @@
- workshop_index = session[:registration][:workshop_index]
= hidden_field_tag :workshop_index, workshop_index
- if session[:registration][:workshop].length > 1
%h3=_'registration.workshop.list.title','Your Workshops'
%ul.columns.medium-10.medium-offset-1
- session[:registration][:workshop].each_with_index do |workshop, index|
- if workshop[:title]
%li
- if index == workshop_index
%strong=workshop[:title]
- else
= workshop[:title]
%h3=_'registration.workshop.title','Workshop Information'
.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'
- streams = Hash.new
- streams[_'workshop_stream.select_one','Select a stream'] = ''
- WorkshopStream.all.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
%h4=_'registration.workshop.styles.title','Presentation Style'
%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|
- 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
- #xx
= check_box_tag :add_another_workshop, "1", (workshop_index < session[:registration][:workshop].length - 1)
- content_for :footer_scripts do
= javascript_include_tag 'editor'

View File

@ -0,0 +1,83 @@
%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.'
.columns.medium-6.medium-push-6
.org-list-select.choose
%h4=_'all_organizations','All Organizations'
%ul
- 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)
- orgs[org.id] = org.id
%li{class: 'available', data: {id: org.id}}
%a{href: '#'}
%figure
= image_tag org.avatar.icon.url
%figcaption
%h6= org.name
%p= location(org.locations[0])
%input#org-filter{placeholder: (_'orgnizations_filter.placeholder','Filter by typing text here...')}
.columns.medium-6.medium-pull-6
.org-list-select.chosen
%h4=_'my_organizations','My Organizations'
%ul
- session[:registration][:organizations].each do |org_id|
- org = Organization.find(org_id.is_a?(Array) ? org_id.first : org_id)
%li.removable
%a{href: '#'}
%figure
= image_tag org.avatar.icon.url
%figcaption
%h6= org.name
%p= location(org.locations[0])
%input{type: 'hidden', name: "org[#{org.id}]", value: "#{org.id}"}
= check_box_tag :add_new_org
= check_box_tag :no_org
- content_for :dom_ready do
:plain
update_orgs();
$('#org-filter').keyup(function(){
var $this=$(this), search = $this.val().toLowerCase(), terms = search.split(/\s+/);
if (search) {
$('.org-list-select.choose li').each(function() {
var $li = $(this), content = $li.find('h6').html().toLowerCase() + '\n' + $li.find('p').html().toLowerCase(), found = true;
for (i = 0; i < terms.length && found; i++) {
found = (content.indexOf(terms[i]) >= 0);
}
$li.removeClass('not-found');
if (!found) {
$li.addClass('not-found');
}
});
} else {
$('.org-list-select.choose li').removeClass('not-found');
}
});
$('.org-list-select').on('click', 'li a', function(e){e.preventDefault();
var $li = $(this).parent().clone();
if ($li.hasClass('selected')) {
$('.org-list-select.chosen li input[value="' + $li.data().id + '"]').parent().remove();
} else if ($li.hasClass('available')) {
$li.attr('class', 'removable').append('<input type="hidden" name="org[' + $li.data().id + ']" value="' + $li.data().id + '" />');
$('.org-list-select.chosen ul').append($li);
} else if ($li.hasClass('removable')) {
$(this).parent().remove();
}
update_orgs();
});
- content_for :scripts do
:plain
function update_orgs() {
$('.field-no-org').toggle($('.org-list-select.chosen li').length <= 0);
$('.org-list-select.choose li.selected').removeClass('selected');
$('.org-list-select.chosen li input').each(function() {
$('.org-list-select.choose li[data-id="' + $(this).val() + '"]').addClass('selected');
});
}

View File

@ -1,14 +1,10 @@
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :class => 'row', :method => :post do
= hidden_field_tag :step, @register_step
- user = session[:registration][:user]
.columns.medium-6= text_field_tag :firstname, user ? (user.firstname || user.username) : nil, :required => true
.columns.medium-6= text_field_tag :lastname, user ? user.lastname : nil, :required => true
.columns.medium-6= text_field_tag :firstname, session[:registration][:user][:firstname], :required => true
.columns.medium-6= text_field_tag :lastname, session[:registration][:user][:lastname], :required => true
- if !session[:registration][:user][:id]
.columns
= text_field_tag :username, user ? user.username : nil, :readonly => (user && user.username)
.columns
%h3
Attending as:
.columns.small-offset-1
= check_box_tag :is_participant
= check_box_tag :is_volunteer
.columns= form_actions :next
= text_field_tag :username, session[:registration][:user][:username]
.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]

View File

@ -0,0 +1,34 @@
%h3=_'registration.questions.title','Conference Participant Information'
.columns.medium-offset-1.end
%h4=_'registration.questions.housing','Do you require housing?'
%p.help=_'registration.questions.housing.help','We will do our best to accommodate everyone but we will be working on a first come, first serve basis. If we cannot accommodate your needs, we will do our best to let you know ahead of time.'
.columns.medium-8.medium-offset-2.end
= select_tag '[questions][housing]', options_for_select(@housing_options, session[:registration][:questions][:housing])
%h5=_'registration.questions.housing_extra.title','Any else we should keep in mind?'
= text_area_tag '[questions][housing_extra]', session[:registration][:questions][:housing_extra], :label => false
.columns.medium-offset-1.end
%h4=_'registration.questions.loaner_bike','Do you want to borrow a bike?'
%p.help=_'registration.questions.loaner_bike.help','Again, we will do our best to find you a suitable bike but it\'s on a first come, first serve basis.'
.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.workshop','Would you ilke to host a workshop?'
%p.help=_'registration.questions.workshop.help','Did you have an idea for a workshop that you\d like to help run? If so, we\'ll ask some follow-up questions on the following page.'
.columns.medium-8.medium-offset-2.end
= select_tag :is_workshop_host, options_for_select({(_'Yes') => 1, (_'No') => 0}, session[:registration][:is_workshop_host] || 0)
.columns.medium-offset-1.end
%h4=_'registration.questions.other','Anything else we should know about your visit?'
.columns.medium-8.medium-offset-2.end
= text_area_tag '[questions][other]', session[:registration][:questions][:other], :label => false

View File

@ -0,0 +1,3 @@
%h3=_'registration.submit.title','Ready to Submit'
.columns.medium-offset-1.end
%p.help=_'registration.submit.help','That\'s all we need to know right now, if you need to make any changes, please press the \'Previous\' button now. Otherwise just click \'Submit\' and you will get a confirmation email. YOU MUST CONFIRM once you get that email in order for us to know that you are coming. This is to confirm that you and your email address are real. We will send you occassional updates afterwards.'

View File

@ -0,0 +1,6 @@
%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'

View File

@ -0,0 +1,31 @@
%h3=_'registration.volunteer_questions.title','Conference Volunteer Information'
.columns.medium-offset-1.end
%h4=_'registration.volunteer_questions.contact_info','Contact Information'
.columns.medium-8.medium-offset-2.end
%p.help=_'registration.volunteer_questions.contact.help','If you are housing guests, they will need your address and phone number, otherwise we will need your address to coordinate cooking. If you have additional concerns, please let us know in the comments below.'
= 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_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
.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
.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
.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
= text_area_tag '[volunteer_questions][other]', session[:registration][:volunteer_questions][:other], :label => false

View File

@ -5,13 +5,22 @@
- description "#{@conference.title} conference in #{location_name} for DIY bicycle collectives, co-ops, and advocacy groups"
= render 'header'
= tabs!
=# tabs!
%article.row
.columns.large-10
- if @register_step
%h2='Register!'
= @register_content.html_safe
- if @actions
= form_tag (@conference.url + '/register/').gsub(/\/\/+/, '/'), :method => :post do
= hidden_field_tag :step, @register_step
- if @error_message
.columns.medium-8.medium-centered
%p.error=@error_message
= render @register_template
.columns= form_actions @actions
- else
= render @register_template
- else
%h2=('About '+@conference.title)
=p @conference, :info

View File

@ -6,19 +6,16 @@
%title= (yield :title) + (content_for?(:title) ? ' | ' : '') + 'Bike!Bike!'
%meta{ name: 'description', content: (yield_or_default :description, 'Bike!Bike! conferences for DIY bicycle collectives, co-ops, and advocacy groups') }
= csrf_meta_tags
= yield :head
/[if lt IE 9]
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
= stylesheet_link_tag '//fonts.googleapis.com/css?family=Source+Sans+Pro:400,700,400italic,700italic', 'application', media: 'all'
%link{ href: asset_path('favicon.ico'), rel: 'shortcut icon', type: 'image/x-icon' }
%link{ href: asset_path('favicon.ico'), rel: 'icon', type: 'image/x-icon' }
%link{ href: asset_path('apple-touch-icon.png'), rel: 'apple-touch-icon' }
%link{ href: asset_path('apple-touch-icon-72x72.png'), rel: 'apple-touch-icon', sizes: '72x72' }
%link{ href: asset_path('apple-touch-icon-114x114.png'), rel: 'apple-touch-icon', sizes: '114x114' }
%link{ href: asset_path('apple-touch-icon-144x144.png'), rel: 'apple-touch-icon', sizes: '144x144' }
= yield :head
=# javascript_include_tag '//use.typekit.net/iqv7hcg.js'
=# javascript_include_tag 'application'
=# javascript_include_tag 'nested_form'
@ -43,15 +40,15 @@
#content=yield
- else
= yield
%footer
= yield :garbage
#footer
.container= render 'shared/footer'
%footer
.container= render 'shared/footer'
= javascript_include_tag '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'
:javascript
window.jQuery||document.write('<script src="/javascripts/jquery.min.js"><\/script>');(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;e=o.createElement(i);r=o.getElementsByTagName(i)[0];e.src='//www.google-analytics.com/analytics.js';r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));ga('create','UA-42449204-1');ga('send','pageview');
#{yield :scripts}
!function(a,b,c,d){d&&a.addEventListener("DOMContentLoaded",function(){$.ajax({url:$("use").first().attr("xlink:href").replace(/^(.*)\#.*$/,"$1"),dataType:"text",success:function(a){$("body").append('<div class="hide">'+a+"</div>"),$("use").each(function(){$(this).attr("xlink:href",function(a,b){return b.replace(/^.*(#.*)$/,"$1")})})}})})}(document,navigator,{},/Trident\/[567]\b/.test(navigator.userAgent));
$(function(){
#{yield :dom_ready}
});
= yield :footer_scripts
window.jQuery||document.write('<script src="/javascripts/jquery.min.js"><\/script>');(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;e=o.createElement(i);r=o.getElementsByTagName(i)[0];e.src='//www.google-analytics.com/analytics.js';r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));ga('create','UA-42449204-1');ga('send','pageview');!function(a,b,c,d){d&&a.addEventListener("DOMContentLoaded",function(){$.ajax({url:$("use").first().attr("xlink:href").replace(/^(.*)\#.*$/,"$1"),dataType:"text",success:function(a){$("body").append('<div class="hide">'+a+"</div>"),$("use").each(function(){$(this).attr("xlink:href",function(a,b){return b.replace(/^.*(#.*)$/,"$1")})})}})})}(document,navigator,{},/Trident\/[567]\b/.test(navigator.userAgent));
- if content_for?(:footer_scripts)
= yield :footer_scripts
- if content_for?(:scripts) || content_for?(:dom_ready)
:javascript
#{content_for?(:scripts) ? "#{yield :scripts}" : ''}#{content_for?(:dom_ready) ? "$(function(){#{yield :dom_ready}});" : ''}

View File

@ -4,5 +4,5 @@
%a.facebook-sign-in.button{href: '/oauth/facebook'}
= _ action.to_s
- else
%button{id: action.to_s, name: action.to_s, type: 'submit'}
%button{id: action.to_s, name: action.to_s, type: 'submit', formnovalidate: ([:cancel, :previous].include? action.to_sym)}
= _ action.to_s

View File

@ -4,7 +4,7 @@
- if @options[:help]
%p.help=_(("form.#{@options[:_controller]}.#{namekey}.help"), :w, 20)
- @label = @label_template ? (render ('layouts/fields/label_' + @label_template)) : nil
= @label_position == :before && @label ? @label : ''
= (@label_position == :before || @label_position == :inside) && @label ? @label : ''
- if @label_position != :inside
%div=@html
= @label_position == :after && @label ? @label : ''

View File

@ -0,0 +1,6 @@
= link_to organization do
%figure.org-mini-preview{:class => (organization.avatar.is_landscape? ? 'landscape' : 'portrait')}
= image_tag organization.avatar.preview.url
%figcaption
%h5= organization.name
%p= location(organization.locations[0])

View File

@ -0,0 +1 @@
= @data.to_json.to_s

View File

@ -37,7 +37,7 @@ module I18n
when 't', 'title'
return (Forgery::LoremIpsum.sentences 1, options).capitalize
end
return nil
return method
end
def self.note(key, behavior = nil, behavior_size = nil)

View File

@ -14,7 +14,7 @@ BikeBike::Application.routes.draw do
#resources :workshops, :param => 'slug'
#get :register, :param => 'step'
#post 'register/next' => 'conferences#register_submit'
# match 'register(/:step)' => 'conferences#register', via: [:get, :post]
match 'register(/:step)' => 'conferences#register', via: [:get, :post]
#patch 'register/step/:step' => 'conferences#register_step'
#resources :registrations, :path => 'registration' do
# get :form, on: :collection

View File

@ -0,0 +1,5 @@
class AddConfirmationTokenToConferenceRegistrations < ActiveRecord::Migration
def change
add_column :conference_registrations, :confirmation_token, :string
end
end

View File

@ -0,0 +1,5 @@
class AddDataToConferenceRegistrations < ActiveRecord::Migration
def change
add_column :conference_registrations, :data, :binary
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140714013645) do
ActiveRecord::Schema.define(version: 20140716002152) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -64,6 +64,8 @@ ActiveRecord::Schema.define(version: 20140714013645) do
t.boolean "is_confirmed"
t.boolean "is_participant"
t.boolean "is_volunteer"
t.string "confirmation_token"
t.binary "data"
end
create_table "conference_types", force: true do |t|

Binary file not shown.