Browse Source

Schedules!

development
Godwin 9 years ago
parent
commit
bc80c09938
  1. 50
      Gemfile.lock
  2. 246
      app/assets/stylesheets/_application.scss
  3. 2
      app/assets/stylesheets/_settings.scss
  4. 17
      app/controllers/application_controller.rb
  5. 270
      app/controllers/conferences_controller.rb
  6. 2
      app/helpers/application_helper.rb
  7. 146
      app/helpers/schedule_helper.rb
  8. 19
      app/models/event.rb
  9. 2
      app/models/event_location.rb
  10. 13
      app/models/workshop.rb
  11. 28
      app/views/application/home.html.haml
  12. 23
      app/views/event_locations/edit.html.haml
  13. 29
      app/views/events/edit.html.haml
  14. 36
      app/views/schedule/_programme.html.haml
  15. 77
      app/views/schedule/edit.html.haml
  16. 28
      app/views/schedule/show.html.haml
  17. 58
      app/views/workshops/_show.html.haml
  18. 57
      app/views/workshops/show.html.haml
  19. 2
      config/locales/data/html_records/Be-the-first-to-like-a-workshop--.html
  20. 7
      config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-1.html
  21. 7
      config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2.html
  22. 7
      config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1.html
  23. 2
      config/locales/data/html_records/Broadcast-message--.html
  24. 1
      config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-1.html
  25. 1
      config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-2.html
  26. 1
      config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-3.html
  27. 10
      config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast.html
  28. 2
      config/locales/data/html_records/Create-workshop--.html
  29. 3
      config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-1.html
  30. 3
      config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-2.html
  31. 3
      config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-3.html
  32. 3
      config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1.html
  33. 2
      config/locales/data/html_records/Edit-a-conference--.html
  34. 1
      config/locales/data/html_records/Edit-a-conference--conferences.MyBikeBike.edit.html
  35. 2
      config/locales/data/html_records/Like-a-workshop--.html
  36. 7
      config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1-1.html
  37. 7
      config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1-2.html
  38. 7
      config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1.html
  39. 2
      config/locales/data/html_records/Request-to-facilitate-a-workshop---1.html
  40. 2
      config/locales/data/html_records/Request-to-facilitate-a-workshop--.html
  41. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1.html
  42. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2.html
  43. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3.html
  44. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4.html
  45. 10
      config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.facilitate.html
  46. 5
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1.html
  47. 5
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2.html
  48. 5
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3.html
  49. 5
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4.html
  50. 5
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5.html
  51. 2
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.facilitate.html
  52. 7
      config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.html
  53. 10
      config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request.html
  54. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved-1.html
  55. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved-2.html
  56. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved.html
  57. 4
      config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_denied.html
  58. 2
      config/locales/data/html_records/See-a-more-info-link--.html
  59. 2
      config/locales/data/html_records/See-a-register-link--.html
  60. 4
      config/locales/data/html_records/Start-registration-from-landing-page--.html
  61. 4
      config/locales/data/html_records/Start-registration-from-landing-page--Start-registration-from-landing-page--conferences.MyBikeBike.register-1.html
  62. 2
      config/locales/data/html_records/Start-registration-from-landing-page--Start-registration-from-landing-page--conferences.MyBikeBike.register-3.html
  63. 4
      config/locales/data/html_records/Start-registration-from-landing-page--conferences.MyBikeBike.register-3.html
  64. 4
      config/locales/data/html_records/Start-registration-from-landing-page--email_confirmation.html
  65. 2
      config/locales/data/html_records/Start-registration-from-landing-page--registration_confirmation.html
  66. 248
      config/locales/data/html_records/View-published-schedule--.html
  67. 2
      config/locales/data/html_records/View-stats--.html
  68. 1
      config/locales/data/html_records/View-stats--conferences.MyBikeBike.stats.html
  69. 2
      config/locales/data/html_records/View-stats--conferences.MyBikeBike.stats.xls.html
  70. 186
      config/locales/data/translation-info.yml
  71. 2
      config/locales/en.yml
  72. 2
      config/locales/es.yml
  73. 66
      config/routes.rb
  74. 14
      db/migrate/20150920233402_create_event_locations.rb
  75. 5
      db/migrate/20150920233710_add_event_location_id_to_workshops.rb
  76. 5
      db/migrate/20150920233755_add_event_location_id_to_events.rb
  77. 5
      db/migrate/20150925000217_add_type_to_events.rb
  78. 5
      db/migrate/20150927010559_add_day_parts_to_conferences.rb
  79. 4
      db/schema.rb
  80. 26
      features/schedule.feature
  81. 24
      features/step_definitions/interface_steps.rb
  82. 49
      features/support/location_cache.yml

50
Gemfile.lock

@ -162,11 +162,11 @@ GEM
daemons (1.2.3)
database_cleaner (1.5.0)
debug_inspector (0.0.2)
delayed_job (4.0.6)
delayed_job (4.1.1)
activesupport (>= 3.0, < 5.0)
delayed_job_active_record (4.0.3)
activerecord (>= 3.0, < 5.0)
delayed_job (>= 3.0, < 4.1)
delayed_job_active_record (4.1.0)
activerecord (>= 3.0, < 5)
delayed_job (>= 3.0, < 5)
diff-lcs (1.2.5)
diffy (3.0.7)
docile (1.1.5)
@ -189,16 +189,16 @@ GEM
railties (>= 3.2, < 5.0)
forgery (0.6.0)
formatador (0.2.5)
gdk_pixbuf2 (3.0.3)
glib2 (= 3.0.3)
gdk_pixbuf2 (3.0.3-x86-mingw32)
glib2 (= 3.0.3)
gdk_pixbuf2 (3.0.5)
glib2 (= 3.0.5)
gdk_pixbuf2 (3.0.5-x86-mingw32)
glib2 (= 3.0.5)
geocoder (1.2.11)
gherkin3 (3.1.1)
git-version-bump (0.15.1)
glib2 (3.0.3)
glib2 (3.0.5)
pkg-config
glib2 (3.0.3-x86-mingw32)
glib2 (3.0.5-x86-mingw32)
cairo (>= 1.12.8)
pkg-config
globalid (0.3.6)
@ -225,7 +225,7 @@ GEM
haml (>= 4.0.6, < 5.0)
html2haml (>= 1.0.1)
railties (>= 4.0.1)
highline (1.7.5)
highline (1.7.7)
html2haml (2.0.0)
erubis (~> 2.7.0)
haml (~> 4.0.0)
@ -266,7 +266,7 @@ GEM
mime-types (2.6.2)
mini_magick (4.3.3)
mini_portile (0.6.2)
minitest (5.8.0)
minitest (5.8.1)
mocha (1.1.0)
metaclass (~> 0.0.1)
multi_json (1.11.2)
@ -278,7 +278,7 @@ GEM
net-ssh (>= 2.6.5)
net-sftp (2.1.2)
net-ssh (>= 2.6.5)
net-ssh (2.9.2)
net-ssh (3.0.1)
net-ssh-gateway (1.2.0)
net-ssh (>= 2.6.5)
netrc (0.10.3)
@ -296,9 +296,9 @@ GEM
jwt (~> 0.1.4)
multi_json (~> 1.0)
rack (~> 1.2)
pango (3.0.3-x86-mingw32)
pango (3.0.5-x86-mingw32)
cairo (>= 1.14.0)
glib2 (= 3.0.3)
glib2 (= 3.0.5)
paper_trail (3.0.8)
activerecord (>= 3.0, < 5.0)
activesupport (>= 3.0, < 5.0)
@ -314,11 +314,11 @@ GEM
cliver (~> 0.3.1)
multi_json (~> 1.0)
websocket-driver (>= 0.2.0)
pry (0.10.1)
pry (0.10.2)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
pry (0.10.1-x86-mingw32)
pry (0.10.2-x86-mingw32)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
@ -397,13 +397,13 @@ GEM
rspec-mocks (~> 3.3.0)
rspec-support (~> 3.3.0)
rspec-support (3.3.0)
rsvg2 (3.0.3)
rsvg2 (3.0.5)
cairo (>= 1.12.8)
gdk_pixbuf2 (= 3.0.3)
rsvg2 (3.0.3-x86-mingw32)
gdk_pixbuf2 (= 3.0.5)
rsvg2 (3.0.5-x86-mingw32)
cairo (>= 1.12.8)
gdk_pixbuf2 (= 3.0.3)
pango (>= 3.0.3)
gdk_pixbuf2 (= 3.0.5)
pango (>= 3.0.5)
ruby_parser (3.7.1)
sexp_processor (~> 4.1)
rubyzip (1.1.7)
@ -411,7 +411,7 @@ GEM
capistrano (~> 2.15.4)
safe_yaml (1.0.4)
sass (3.4.18)
sass-json-vars (0.3.2)
sass-json-vars (0.3.3)
sass (>= 3.1)
sass-rails (5.0.4)
railties (>= 4.0.0, < 5.0)
@ -438,8 +438,8 @@ GEM
bcrypt (~> 3.1)
oauth (~> 0.4, >= 0.4.4)
oauth2 (>= 0.8.0)
sprockets (3.3.4)
rack (~> 1.0)
sprockets (3.3.5)
rack (> 1, < 3)
sprockets-rails (2.3.3)
actionpack (>= 3.0)
activesupport (>= 3.0)

246
app/assets/stylesheets/_application.scss

@ -88,7 +88,6 @@ button,
&.register {
background-color: $colour-4;
//@include _(text-shadow, 0 0 0.15em rgba(0, 0, 0, 0.5));
}
form.logout & {
@ -102,6 +101,10 @@ button,
#main &.delete {
background-color: $colour-4;
}
#main &.secondary {
background-color: $colour-1;
}
}
a.button {
@ -505,12 +508,16 @@ input {
padding: 0 0.25em;
font-weight: normal;
@include font-family(secondary);
@include _(text-stroke, 0.5px #000)
@include _(text-stroke, 0.5px #000);
}
.date-labels {
float: left;
}
.date-field {
overflow: auto;
}
}
form {
@ -530,6 +537,10 @@ form {
vertical-align: middle;
}
&.left {
text-align: left;
}
&.right {
text-align: right;
@ -1940,3 +1951,234 @@ html[data-lingua-franca-example="html"] {
float: left;
}
}
.conferences-edit_schedule {
#main {
.location {
padding-top: 0.25em;
}
.errors {
padding: 0.25em;
background-color: $colour-2;
color: $white;
@include _(text-stroke, 0.5px #000);
}
.conflict-score {
padding: 0.25em;
background-color: $colour-3;
color: #333;
}
.all-workshops, .all-events {
list-style: none;
padding: 0;
li {
margin: 0.5em;
padding: 0.5em;
border: 1px solid #CCC;
background-color: lighten($colour-1, 35);
@include default-box-shadow(top, 2);
&.error {
outline: 0.2em solid $colour-2;
outline-offset: -0.2em;
}
}
h3 {
margin: 0;
}
.workshop-interest {
color: #888;
text-align: left;
margin: 0.25em 0;
}
.error-description {
background-color: $colour-2;
color: $white;
padding: 0.5em;
margin-top: 0.5em;
}
.warnings {
background-color: $colour-3;
color: #333;
padding: 0.5em;
margin-top: 0.5em;
list-style: none;
li {
padding: 0;
margin: 0;
background-color: transparent;
@include _(box-shadow, none);
}
}
}
.day_parts {
list-style: none;
h4 {
display: inline-block;
min-width: 12.5em;
margin: 0.25em 0;
}
select, .select {
float: right;
min-width: 5em;
}
.select {
padding-left: 0.25em;
}
}
.actions {
margin: 2em;
}
.unsaved {
@include font-family(secondary);
background-color: lighten($colour-3, 25);
margin: 0 5em 2em;
padding: 0.5em;
}
.all-events {
li {
background-color: lighten($colour-5, 35);
&.meal {
background-color: lighten($colour-3, 25);
}
}
h3 {
margin-bottom: 0.5em;
}
}
}
}
.programme {
.schedule {
width: auto;
margin: 0;
min-width: 100%;
@include _(box-shadow, none);
table-layout: fixed;
border-spacing: 0.25em;
border-collapse: separate;
td {
position: relative;
vertical-align: middle;
.title {
text-align: center;
@include font-family(secondary);
color: #666;
}
&.previewable {
cursor: pointer;
&:hover {
@include default-box-shadow(top, 2);
}
}
&.workshop {
background-color: lighten($colour-1, 35);
border: 0.25em solid $colour-1;
.preview {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
@include after {
display: none;
}
}
}
&.event {
background-color: lighten($colour-5, 35);
border: 0.25em solid $colour-5;
}
&.meal {
background-color: lighten($colour-3, 25);
border: 0.25em solid $colour-3;
}
&.not-interested {
opacity: 0.5;
}
.info {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1000;
background-color: $white;
text-align: left;
overflow-y: auto;
@include _(transition, transform 250ms ease-in-out);
@include _(transform-origin, center bottom);
@include _(transform, rotate(180deg) translate3d(0, 0, 0));
.close {
float: right;
font-size: 2em;
@include before {
content: '×';
padding: 0 0.5em;
}
@include after {
display: none;
}
}
h2 {
margin-bottom: 0.5em;
}
}
&:target .info {
@include _(transform, rotate(0) translate3d(0, 0, 0));
}
}
}
.programme-day {
margin-top: 2em;
}
.programme-day-part {
overflow-x: auto;
}
}
.select-field {
line-height: 1.75em;
select {
display: block;
width: 100%;
height: 2.1em;
font-family: inherit;
font-size: 1.5em;
padding: 0.25em;
@include default-box-shadow(top, 1.5, false);
}
}

2
app/assets/stylesheets/_settings.scss

@ -7,7 +7,7 @@ $sidebar-width: rems(19);
// $colour-5: #8EA604;
$colour-1: #00ADEF; // blue
$colour-2: #DD57EF; // pink
$colour-2: #EF57B4; // #DD57EF; // pink
$colour-3: #E6C74B; // yellow
$colour-4: #D89E59; // orange
$colour-5: #02CA9E; // green

17
app/controllers/application_controller.rb

@ -4,6 +4,8 @@ module ActiveRecord
end
class ApplicationController < LinguaFrancaApplicationController
include ScheduleHelper
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception, :except => [:do_confirm]
@ -35,6 +37,21 @@ class ApplicationController < LinguaFrancaApplicationController
super
end
def home
@workshops = Workshop.where(:conference_id => @conference.id)
if @conference.workshop_schedule_published
@events = Event.where(:conference_id => @conference.id)
schedule = get_schedule_data
@schedule = schedule[:schedule]
@locations = Hash.new
EventLocation.where(:conference_id => @conference.id).each do |l|
@locations[l.id.to_s] = l
end
@day_parts = @conference.day_parts ? JSON.parse(@conference.day_parts) : {:morning => 0, :afternoon => 13, :evening => 18}
end
end
def policy
@is_policy_page = true
end

270
app/controllers/conferences_controller.rb

@ -2,6 +2,8 @@ require 'geocoder/calculations'
require 'rest_client'
class ConferencesController < ApplicationController
include ScheduleHelper
before_action :set_conference, only: [:show, :edit, :update, :destroy, :registrations]
before_filter :authenticate, only: [:registrations]
@ -890,8 +892,8 @@ class ConferencesController < ApplicationController
can_edit = workshop.can_edit?(current_user)
do_403 unless can_edit || workshop.can_translate?(current_user, I18n.locale)
workshop.title = params[:title]
workshop.info = params[:info]
workshop.title = params[:title]
workshop.info = params[:info]
if can_edit
# dont allow translators to edit these fields
@ -1033,6 +1035,269 @@ class ConferencesController < ApplicationController
return redirect_to view_workshop_url(@this_conference.slug, params[:workshop_id])
end
def schedule
set_conference
do_404 unless @this_conference.workshop_schedule_published || @this_conference.host?(current_user)
@events = Event.where(:conference_id => @this_conference.id)
@locations = EventLocation.where(:conference_id => @this_conference.id)
render 'schedule/show'
end
def edit_schedule
set_conference
set_conference_registration
do_404 unless @this_conference.host?(current_user)
@workshops = Workshop.where(:conference_id => @this_conference.id)
@events = Event.where(:conference_id => @this_conference.id)
if session[:workshops]
(0...@workshops.count).each do |i|
id = @workshops[i].id
w = session[:workshops][id.to_s]
if w
@workshops[i].start_time = w[:start_time]
@workshops[i].end_time = w[:end_time]
@workshops[i].event_location_id = w[:event_location_id]
end
end
end
if session[:events]
(0...@events.count).each do |i|
id = @events[i].id
w = session[:events][id.to_s]
if w
@events[i].start_time = w[:start_time]
@events[i].end_time = w[:end_time]
@events[i].event_location_id = w[:event_location_id]
end
end
end
@locations = EventLocation.where(:conference_id => @this_conference.id)
@location_hash = Hash.new
@locations.each do |l|
@location_hash[l.id.to_s] = l
end
@days = Array.new
start_day = @this_conference.start_date.strftime('%u').to_i
end_day = start_day + ((@this_conference.end_date - @this_conference.start_date) / 86400)
(start_day..end_day).each do |i|
@days << [(@this_conference.start_date + (i - start_day).days).strftime('%a'), ((i + 1) - start_day)]
end
@hours = Array.new
(0..48).each do |i|
hour = (Date.today + (i / 2.0).hours).strftime('%R')
@hours << hour
end
@event_durations = [['30 mins', 30], ['1 hour', 60], ['1.5 hours', 90], ['2 hours', 120], ['2.5 hours', 150]]
@workshop_durations = [['1 hour', 60], ['1.5 hours', 90], ['2 hours', 120]]
schedule_data = get_schedule_data
@schedule = schedule_data[:schedule]
@errors = schedule_data[:errors]
@warnings = schedule_data[:warnings]
@conflict_score = schedule_data[:conflict_score]
@error_count = schedule_data[:error_count]
if session[:day_parts]
@day_parts = JSON.parse(session[:day_parts])
elsif @this_conference.day_parts
@day_parts = JSON.parse(@this_conference.day_parts)
else
@day_parts = {:morning => 0, :afternoon => 13, :evening => 18}
end
@saved = session[:workshops].nil?
render 'schedule/edit'
end
def save_schedule
set_conference
do_404 unless @this_conference.host?(current_user)
@days = Array.new
start_day = @this_conference.start_date.strftime('%u').to_i
end_day = start_day + ((@this_conference.end_date - @this_conference.start_date) / 86400)
(start_day..end_day).each do |i|
@days << [(@this_conference.start_date + (i - start_day).days).strftime('%a'), i]
end
@workshops = Workshop.where(:conference_id => @this_conference.id)
@events = Event.where(:conference_id => @this_conference.id)
@locations = EventLocation.where(:conference_id => @this_conference.id)
do_save = (params[:button] == 'save' || params[:button] == 'publish')
session[:workshops] = do_save ? nil : Hash.new
session[:events] = do_save ? nil : Hash.new
session[:day_parts] = do_save ? nil : Hash.new
(0...@workshops.count).each do |i|
id = @workshops[i].id.to_s
if params[:workshop_day][id].present? && params[:workshop_hour][id].present? && params[:workshop_duration][id].present?
date = @this_conference.start_date + (params[:workshop_day][id].to_i - 1).days
h = params[:workshop_hour][id].split(':')
date = date.change({hour: h.first, minute: h.last})
@workshops[i].start_time = date
@workshops[i].end_time = date + (params[:workshop_duration][id].to_i).minutes
else
@workshops[i].start_time = nil
@workshops[i].end_time = nil
end
@workshops[i].event_location_id = params[:workshop_location][id]
if do_save
@workshops[i].save
else
session[:workshops][id] = {
:start_time => @workshops[i].start_time,
:end_time => @workshops[i].end_time,
:end_time => @workshops[i].end_time,
:event_location_id => @workshops[i].event_location_id
}
end
end
(0...@events.count).each do |i|
id = @events[i].id.to_s
if params[:event_day][id].present? && params[:event_hour][id].present? && params[:event_duration][id].present?
date = @this_conference.start_date + (params[:event_day][id].to_i - 1).days
h = params[:event_hour][id].split(':')
date = date.change({hour: h.first, minute: h.last})
@events[i].start_time = date
@events[i].end_time = date + (params[:event_duration][id].to_i).minutes
else
@events[i].start_time = nil
@events[i].end_time = nil
end
@events[i].event_location_id = params[:event_location][id]
if do_save
@events[i].save
else
session[:events][id] = {
:start_time => @events[i].start_time,
:end_time => @events[i].end_time,
:end_time => @events[i].end_time,
:event_location_id => @events[i].event_location_id
}
end
end
if params[:day_parts]
day_parts = {:morning => 0}
params[:day_parts].each do |part, h|
h = h.split(':')
day_parts[part.to_sym] = h[0].to_f + (h[1].to_i > 0 ? 0.5 : 0)
end
if do_save
@this_conference.day_parts = day_parts.to_json
else
session[:day_parts] = day_parts.to_json
end
end
save_conference = do_save
if params[:button] == 'publish'
@this_conference.workshop_schedule_published = true
save_conference = true
elsif params[:button] == 'unpublish'
@this_conference.workshop_schedule_published = false
save_conference = true
end
if save_conference
@this_conference.save
end
redirect_to edit_schedule_url(@this_conference.slug)
end
def add_event
set_conference
set_conference_registration
do_404 unless @this_conference.host?(current_user)
render 'events/edit'
end
def edit_event
set_conference
set_conference_registration
do_404 unless @this_conference.host?(current_user)
@event = Event.find(params[:id])
do_403 unless @event.conference_id == @this_conference.id
render 'events/edit'
end
def save_event
set_conference
do_404 unless @this_conference.host?(current_user)
if params[:event_id]
event = Event.find(params[:event_id])
do_403 unless event.conference_id == @this_conference.id
else
event = Event.new(:conference_id => @this_conference.id)
end
event.title = params[:title]
event.info = params[:info]
event.event_type = params[:event_type]
event.save
return redirect_to schedule_url(@this_conference.slug)
end
def add_location
set_conference
set_conference_registration
do_404 unless @this_conference.host?(current_user)
render 'event_locations/edit'
end
def edit_location
set_conference
set_conference_registration
do_404 unless @this_conference.host?(current_user)
@location = EventLocation.find(params[:id])
do_403 unless @location.conference_id == @this_conference.id
@amenities = JSON.parse(@location.amenities || '[]').map &:to_sym
render 'event_locations/edit'
end
def save_location
set_conference
do_404 unless @this_conference.host?(current_user)
if params[:location_id]
location = EventLocation.find(params[:location_id])
do_403 unless location.conference_id == @this_conference.id
else
location = EventLocation.new(:conference_id => @this_conference.id)
end
location.title = params[:title]
location.address = params[:address]
location.amenities = (params[:needs] || {}).keys.to_json
location.save
return redirect_to schedule_url(@this_conference.slug)
end
# DELETE /conferences/1
#def destroy
# @conference.destroy
@ -1053,6 +1318,7 @@ class ConferencesController < ApplicationController
register_path(@this_conference.slug) => 'registration.Registration',
workshops_path(@this_conference.slug) => 'registration.Workshops'
}
@submenu[schedule_path(@this_conference.slug)] = 'registration.Schedule' if @this_conference.workshop_schedule_published || @is_host
if @is_host
@submenu[edit_conference_path(@this_conference.slug)] = 'registration.Edit'
@submenu[stats_path(@this_conference.slug)] = 'registration.Stats'

2
app/helpers/application_helper.rb

@ -1,6 +1,8 @@
require 'redcarpet'
module ApplicationHelper
include ScheduleHelper
@@keyQueue = nil
@@translationsOnThisPage = nil
@@lastTranslation = nil

146
app/helpers/schedule_helper.rb

@ -0,0 +1,146 @@
module ScheduleHelper
def get_schedule_data
schedule = Hash.new
workshop_errors = Hash.new
workshop_warnings = Hash.new
all_events = (@workshops + @events)
conflicts = 0
errors = 0
(0...all_events.count).each do |i|
w = all_events[i]
if w.start_time.present? && w.end_time.present? && w.event_location_id.present?
type = w.is_a?(Workshop) ? :workshop : :event
hour = w.start_time.strftime('%H').to_i
hour += 0.5 if w.start_time.strftime('%M').to_i > 15
end_hour = w.end_time.strftime('%H').to_i
end_hour += 0.5 if w.end_time.strftime('%M').to_i > 15
day = w.conference_day
schedule[day] ||= Hash.new
schedule[day][:locations] ||= Hash.new
schedule[day][:locations][w.event_location_id] ||= Hash.new
conflict = nil
(hour...end_hour).step(0.5).each do |h|
h = h.to_i if h == h.to_i
if !conflict && schedule[day][:locations][w.event_location_id][h].present?
conflict = schedule[day][:locations][w.event_location_id][h]
end
end
if conflict.present?
w_conflict = get_workshop(conflict, @workshops, @events)
workshop_errors[(w_conflict.is_a?(Workshop) ? 'w' : 'e') + w_conflict.id.to_s] = "Time conflict with &ldquo;<strong>#{w_conflict.title}</strong>&rdquo;".html_safe
workshop_errors[(w.is_a?(Workshop) ? 'w' : 'e') + w.id.to_s] = "Time conflict with &ldquo;<strong>#{w.title}</strong>&rdquo;".html_safe
errors += 1 if workshop_errors[(w_conflict.is_a?(Workshop) ? 'w' : 'e') + w_conflict.id.to_s].nil?
else
schedule[day][:start_time] = hour if schedule[day][:start_time].nil? || hour < schedule[day][:start_time]
schedule[day][:end_time] = end_hour if schedule[day][:end_time].nil? || end_hour > schedule[day][:end_time]
schedule[day][:locations][w.event_location_id][hour] = {
:span => w.duration / 60.0,
:type => w.is_a?(Event) ? w.event_type : :workshop
}
schedule[day][:locations][w.event_location_id][hour][:workshop] = i if type == :workshop
schedule[day][:locations][w.event_location_id][hour][:event] = (i - @workshops.count) if type == :event
end
else
workshop_warnings["w#{w.id}"] ||= Array.new
workshop_warnings["w#{w.id}"] << (w.is_a?(Workshop) ? "This workshop is not scheduled" : "This event is not scheduled")
end
end
schedule.each do |day, day_data|
day_data[:locations].each do |location1, location_data1|
location_data1.each do |time1, data1|
day_data[:locations].each do |location2, location_data2|
location_data2.each do |time2, data2|
if data1[:workshop].present?
if data2[:workshop].present?
unless location1 == location2 && time1 == time2
if workshop_errors[data1[:workshop]].nil?
w1 = @workshops[data1[:workshop]]
w2 = @workshops[data2[:workshop]]
if time1 == time2
w1.workshop_facilitators.each do |f|
u = User.find(f.user_id)
if w2.active_facilitator?(u)
errors += 1 if workshop_errors[(w2.is_a?(Workshop) ? 'w' : 'e') + w2.id.to_s].nil?
workshop_errors["w#{w1.id}"] = "This workshop shares facilitators with &ldquo;<strong>#{w2.title}</strong>&rdquo;".html_safe
end
end
connection ||= ActiveRecord::Base.connection
common_interest_count = connection.select_value("SELECT COUNT(w1.user_id) FROM workshop_interests AS w1 JOIN workshop_interests AS w2 ON w2.user_id=w1.user_id WHERE w1.workshop_id=#{w1.id} AND w2.workshop_id=#{w2.id}")
common_interest_count = common_interest_count ? common_interest_count.to_i : 0
if common_interest_count > 0
conflicts += common_interest_count
workshop_warnings["w#{w1.id}"] ||= Array.new
workshop_warnings["w#{w1.id}"] << "<strong>#{common_interest_count}</strong> people are also interested in &ldquo;<strong>#{w2.title}</strong>&rdquo;".html_safe
end
end
end
end
end
end
end
end
end
end
end
{
:schedule => schedule.sort,
:errors => workshop_errors,
:warnings => workshop_warnings,
:conflict_score => conflicts,
:error_count => errors
}
end
def get_workshop(workshop, workshops, events)
workshop[:workshop] ? workshops[workshop[:workshop]] : (events[workshop[:event]] || :event)
end
def workshop_classes(workshop, show_interest)
classes = [workshop.is_a?(Workshop) ? :workshop : workshop.event_type]
if show_interest && workshop.is_a?(Workshop) && current_user && WorkshopInterest.where(:user_id => current_user.id)
if workshop.interested?(current_user) || workshop.facilitator?(current_user)
classes << 'interested'
else
classes << 'not-interested'
end
end
return classes
end
def schedule_start_and_end_times(day_part, day_parts, day_schedule)
start_time = [day_parts[day_parts.keys[day_part]], day_schedule[:start_time]].max
end_time = [day_parts[day_parts.keys[day_part + 1]] || 24, day_schedule[:end_time]].min
min_time = nil
max_time = nil
day_schedule[:locations].each do |location, location_schedule|
location_schedule.each do |hour, workshop|
t_start = hour
t_end = hour + workshop[:span]
if t_start >= start_time && t_end <= end_time
min_time = [min_time || 24, t_start].min
max_time = [max_time || 0, t_end].max
end
end
end
return nil unless min_time.present? && max_time.present?
[min_time || 0, max_time || 24]
end
end

19
app/models/event.rb

@ -1,2 +1,17 @@
class Event < ActiveRecord::Base
end
class Event < ActiveRecord::Base
belongs_to :conference
def conference_day
return nil unless start_time.present? && end_time.present?
start_day = conference.start_date.change(hour: 0, minute: 0, second: 0)
w_start_day = start_time.change(hour: 0, minute: 0, second: 0)
return (((w_start_day - start_day) / 86400) + 1).to_i
end
def duration
return nil unless start_time.present? && end_time.present?
((end_time - start_time) / 60).to_i
end
end

2
app/models/event_location.rb

@ -0,0 +1,2 @@
class EventLocation < ActiveRecord::Base
end

13
app/models/workshop.rb

@ -87,6 +87,19 @@ class Workshop < ActiveRecord::Base
(user.can_translate? && lang.to_sym != locale.to_sym) || can_edit?(user)
end
def conference_day
return nil unless start_time.present? && end_time.present?
start_day = conference.start_date.change(hour: 0, minute: 0, second: 0)
w_start_day = start_time.change(hour: 0, minute: 0, second: 0)
return (((w_start_day - start_day) / 86400) + 1).to_i
end
def duration
return nil unless start_time.present? && end_time.present?
((end_time - start_time) / 60).to_i
end
private
def make_slug
if !self.slug

28
app/views/application/home.html.haml

@ -4,16 +4,20 @@
%article
%h2=_!@conference.title
=@conference.info.html_safe
%h3=_'articles.workshops.headings.Proposed_Workshops'
%p=_'articles.workshops.paragraphs.Proposed_Workshops', "Would you like to facilitate your own workshop? Simply register and visit the workshops page. If you have already registered you can access the page by restarting the registration process."
- if @conference.workshops
%ul.workshop-list
- @conference.workshops.sort_by{|w| w.title}.each do |w|
%li
%h4=w.title
.workshop-interest
- if w.interested?(current_user)
=_'articles.workshops.info.you_are_interested_count', "You and #{w.interested_count - 1} others are interested in this workshop", :vars => {:count => (w.interested_count - 1)}
- elsif w.interested_count > 0
=_'articles.workshops.info.interested_count', "#{w.interested_count} people are interested in this workshop", :vars => {:count => w.interested_count}
.workshop-description=markdown w.info
- if @schedule
%h3=_'articles.workshops.headings.Schedule'
= render 'schedule/programme', :schedule => @schedule, :conference => @conference, :workshops => @workshops, :events => @events, :locations => @locations, :show_interest => true, :day_parts => @day_parts, :show_previews => true
- else
%h3=_'articles.workshops.headings.Proposed_Workshops'
%p=_'articles.workshops.paragraphs.Proposed_Workshops', "Would you like to facilitate your own workshop? Simply register and visit the workshops page. If you have already registered you can access the page by restarting the registration process."
%ul.workshop-list
- @conference.workshops.sort_by{|w| w.title}.each do |w|
%li
%h4=w.title
.workshop-interest
- if w.interested?(current_user)
=_'articles.workshops.info.you_are_interested_count', "You and #{w.interested_count - 1} others are interested in this workshop", :vars => {:count => (w.interested_count - 1)}
- elsif w.interested_count > 0
=_'articles.workshops.info.interested_count', "#{w.interested_count} people are interested in this workshop", :vars => {:count => w.interested_count}
.workshop-description=markdown w.info

23
app/views/event_locations/edit.html.haml

@ -0,0 +1,23 @@
= render 'conferences/page_header', :page_key => (@location ? 'Edit_Location' : 'New_Location')
%article
= form_tag save_location_path(@this_conference.slug), class: 'composition' do
= row do
= columns(medium: 12) do
= (hidden_field_tag :location_id, @location.id) if @location
.text-field.input-field.big
= label_tag :title
= text_field_tag :title, @location ? @location.title : nil, :required => true
= row do
= columns(medium: 6) do
.text-area-field.input-field
= label_tag :address
= text_area_tag :address, @location ? @location.address : nil, :required => true
= columns(medium: 6) do
%h3=_'articles.locations.headings.amenities'
- [:sound, :projector, :tools].each do |need|
.single-check-box-field.input-field
= label_tag "needs_#{need}" do
= check_box_tag "needs[#{need}]", 1, @location && @amenities.include?(need)
= _"workshop.options.needs.#{need}"
.actions
= button_tag :save, :value => :save

29
app/views/events/edit.html.haml

@ -1,7 +1,22 @@
%h1 Editing event
= render 'form'
= link_to 'Show', @event
\|
= link_to 'Back', events_path
= render 'conferences/page_header', :page_key => (@event ? 'Edit_Event' : 'New_Event')
%article
= form_tag save_event_path(@this_conference.slug), class: 'composition' do
= row do
= columns(medium: 9) do
= (hidden_field_tag :event_id, @event.id) if @event
.text-field.input-field.big
= label_tag :title
= text_field_tag :title, @event ? @event.title : nil, :required => true
= columns(medium: 3) do
.select-field.input-field
= label_tag :event_type do
= select_tag :event_type, options_for_select([:event, :meal], @event ? @event.event_type : nil), :include_blank => true
=_'forms.labels.generic.event_type'
= row do
= columns(medium: 12) do
.text-area-field.input-field
= label_tag :info
= text_area_tag :info, @event ? @event.info : nil, :required => true
= columns(medium: 12) do
.actions.right
= button_tag :save, :value => :save

36
app/views/schedule/_programme.html.haml

@ -0,0 +1,36 @@
.programme
- schedule.each do |day, day_schedule|
.programme-day
%h2=I18n.l(conference.start_date + (day - 1).days, :format => "%A")
- (0...day_parts.length).each do |day_part|
.programme-day-part
- times = schedule_start_and_end_times(day_part, day_parts, day_schedule)
- if times.present?
%h3=_"articles.headings.schedule.day_parts.#{day_parts.keys[day_part].to_s}" if day_parts.length > 1
%table.schedule
%tr
%th
- (times.first...times.last).step(0.5).each do |t|
- t = t.to_i if t == t.to_i
%th=I18n.l(Date.today + t.hours, :format => :short)
- day_schedule[:locations].each do |location, location_schedule|
%tr
%th=locations[location.to_s].title
- skip = 0
- (times.first...times.last).step(0.5).each do |t|
- t = t.to_i if t == t.to_i
- if location_schedule[t].present?
- workshop = location_schedule[t]
- w = get_workshop(workshop, workshops, events)
%td{:class => workshop_classes(w, show_interest) + [show_previews && workshop[:type] == :workshop ? 'previewable' : nil], :colspan => (workshop[:span] * 2), :id => "workshop-#{w.id}"}
.title= w.title
- if show_previews && workshop[:type] == :workshop
.info
%a.close{href: "#!"}
= render 'workshops/show', :workshop => w, :preview => true
%a{class: 'preview', href: "#workshop-#{w.id}"}
- skip = workshop[:span] - 0.5
- elsif skip > 0
- skip -= 0.5
- else
%td.empty

77
app/views/schedule/edit.html.haml

@ -0,0 +1,77 @@
= render 'conferences/page_header', :page_key => 'Edit_Schedule'
%article
= form_tag save_schedule_path(@this_conference.slug), class: 'composition' do
= row do
= columns(medium: 12) do
= render 'schedule/programme', :schedule => @schedule, :conference => @this_conference, :workshops => @workshops, :events => @events, :locations => @location_hash, :show_interest => false, :day_parts => @day_parts, :show_previews => false
= row do
= columns(medium: 12) do
- if @error_count && @error_count > 0
%h3.errors
=_'errors.schedule.errors',"Errors:"
= @error_count
- if @conflict_score && @conflict_score > 0
%h3.conflict-score
=_'errors.schedule.conflict_score',"Interest Conflicts:"
= @conflict_score
= row do
= columns(medium: 12) do
= (hidden_field_tag :location_id, @location.id) if @location
.actions
- if @this_conference.workshop_schedule_published
= button_tag :Unpublish, :value => :unpublish, :class => 'delete'
- elsif @error_count < 1
= button_tag :Publish, :value => :publish
= button_tag :Preview, :value => :preview, :class => 'secondary'
- unless @this_conference.workshop_schedule_published && @error_count > 0
= button_tag :save, :value => :save
- unless @saved
.unsaved=_'errors.schedule.unsaved','Your changes will not be saved until you press Save or Publish'
= row do
= columns(medium: 6) do
%h2=_"articles.headings.schedule.day_parts.Workshops"
%ul.all-workshops
- @workshops.each do |i|
- error = @errors["w#{i.id}"]
- warnings = @warnings["w#{i.id}"]
%li{class: error.present? ? :error : nil}
%h3=i.title
.workshop-interest=_'articles.workshops.info.interested_count', "#{i.interested_count} people are interested in this workshop", :vars => {:count => i.interested_count}
.time
= select_tag "workshop_day[#{i.id}]", options_for_select(@days, i.conference_day), :include_blank => true
= select_tag "workshop_hour[#{i.id}]", options_for_select(@hours, i.start_time ? i.start_time.strftime('%R') : nil), :include_blank => true
= select_tag "workshop_duration[#{i.id}]", options_for_select(@workshop_durations, i.duration || 60)
.location
= select_tag "workshop_location[#{i.id}]", options_from_collection_for_select(@locations, :id, :title, i.event_location_id), :include_blank => true
- if warnings
%ul.warnings
- warnings.each do |warning|
%li=warning
- if error
.error-description=error
= columns(medium: 6) do
%h2=_"articles.headings.schedule.day_parts.Events"
%ul.all-events
- @events.each do |i|
- error = @errors["e#{i.id}"]
%li{:class => [i.event_type, error.present? ? :error : nil]}
%h3=i.title
.time
= select_tag "event_day[#{i.id}]", options_for_select(@days, i.conference_day)
= select_tag "event_hour[#{i.id}]", options_for_select(@hours, i.start_time ? i.start_time.strftime('%R') : '12:00')
= select_tag "event_duration[#{i.id}]", options_for_select(@event_durations, i.duration || 60)
.location
= select_tag "event_location[#{i.id}]", options_from_collection_for_select(@locations, :id, :title, i.event_location_id), :include_blank => true
- if error
.error-description=error
%h2=_"articles.headings.schedule.day_parts.Day_Parts"
%ul.day_parts
- [:morning, :afternoon, :evening].each do |day_part|
%li
%h4
=_"articles.headings.schedule.day_parts.#{day_part.to_s}"
- h = (Date.today + @day_parts[day_part.to_s].to_f.hours).strftime('%R')
- if day_part == :morning
.select=h
- else
= select_tag "day_parts[#{day_part.to_s}]", options_for_select(@hours, h)

28
app/views/schedule/show.html.haml

@ -0,0 +1,28 @@
= render 'conferences/page_header', :page_key => 'Schedule'
%article
- if @this_conference.host?(current_user)
= row do
= columns(medium: 12) do
.actions.left
= link_to (_'actions.schedule.edit','Edit Schedule'), edit_schedule_path(@this_conference.slug), class: [:button]
= row do
= columns(medium: 6) do
%h2=_'articles.schedule.headings.Events'
- if @events
%ul
- @events.each do |event|
%li
%h3=_!event.title
= link_to (_'actions.events.edit','Edit'), edit_event_path(@this_conference.slug, event.id), class: [:button, :modify]
.actions.left
= link_to (_'actions.events.create','Add Event'), add_event_path(@this_conference.slug), class: [:button, :modify]
= columns(medium: 6) do
%h2=_'articles.schedule.headings.Locations'
- if @locations
%ul
- @locations.each do |location|
%li
%h3=_!location.title
= link_to (_'actions.locations.edit','Edit'), edit_location_path(@this_conference.slug, location.id), class: [:button, :modify]
.actions.left
= link_to (_'actions.schedule.edit','Add Location'), add_location_path(@this_conference.slug), class: [:button, :modify]

58
app/views/workshops/_show.html.haml

@ -0,0 +1,58 @@
= row do
= columns(medium: 12) do
%h2=_!workshop.title
.workshop-interest
- if workshop.interested?(current_user)
=_'articles.workshops.info.you_are_interested_count', "You and #{workshop.interested_count - 1} others are interested in this workshop", :vars => {:count => (workshop.interested_count - 1)}
- else
=_'articles.workshops.info.interested_count', "#{workshop.interested_count} people are interested in this workshop", :vars => {:count => workshop.interested_count}
- if !preview && workshop.can_show_interest?(current_user)
= form_tag toggle_workshop_interest_path(workshop.conference.slug, workshop.id) do
= button_tag (workshop.interested?(current_user) ? :remove_interest : :show_interest), :value => :toggle_interest, :class => (workshop.interested?(current_user) ? 'delete' : 'add')
=markdown _!(workshop.info) || ''
- if !preview && logged_in? && current_user.can_translate?
.actions
- I18n.backend.enabled_locales.each do |locale|
= (link_to (_'actions.workshops.Translate', "Translate into #{language_name(locale)}", :vars => {:language => language_name(locale)}), edit_workshop_url(workshop.conference.slug, workshop.id, url_params(locale)), :class => 'button translate') if workshop.can_translate?(current_user, locale)
= columns(medium: 6) do
%h3=_'articles.workshops.headings.facilitators'
.facilitators
- workshop.workshop_facilitators.each do |f|
- u = User.find(f.user_id)
- if logged_in? && (workshop.public_facilitator?(u) || f.user_id == current_user.id || workshop.active_facilitator?(current_user))
.facilitator
.name=_!(u.firstname || u.username || u.email)
.role
=_"roles.workshops.facilitator.#{workshop.role(u).to_s}"
- if !preview && f.role.to_sym == :requested && workshop.active_facilitator?(current_user)
=(link_to (_'actions.workshops.Approve'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'approve'), :class => 'button modify')
=(link_to (_'actions.workshops.Deny'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'deny'), :class => 'button delete')
- elsif !preview && (f.user_id == current_user.id && f.role.to_sym != :creator) || (!workshop.conference.registered?(u) && workshop.active_facilitator?(current_user))
=(link_to (_'actions.workshops.Remove'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), :class => 'button delete')
- if !preview
.actions
=(link_to (_'actions.workshops.Facilitate'), facilitate_workshop_path(workshop.conference.slug, workshop.id), :class => 'button modify') if !workshop.facilitator?(current_user)
- if workshop.active_facilitator?(current_user)
= form_tag workshop_add_facilitator_path(workshop.conference.slug, workshop.id), :class => 'add-facilitator' do
%h4='Add a facilitator'
.email-field.input-field
= email_field_tag :email, nil, required: true
= label_tag :email
= button_tag :add
- if workshop.languages
= columns(medium: 6) do
%h3=_'articles.workshops.headings.languages','Workshop Language'
%p= _!((JSON.parse(workshop.languages || '[]').map { |x| _"languages.#{x}" }).join(', ').to_s.html_safe)
- if workshop.theme
= columns(medium: 6) do
%h3=_'articles.workshops.headings.theme','Theme'
%p= [:race_gender, :mechanics, :funding, :organization, :community].include?((workshop.theme || '').to_sym) ? (_"workshop.options.theme.#{workshop.theme}") : workshop.theme
- if workshop.active_facilitator?(current_user) || workshop.conference.host?(current_user)
- if workshop.needs
= columns(medium: 6) do
%h3=_'articles.workshops.headings.needs','What do you need?'
%p= _!((JSON.parse(workshop.needs || '[]').map { |x| _"workshop.options.needs.#{x}" }).join(', ').to_s.html_safe)
- if workshop.notes
= columns(medium: 12) do
%h3=_'articles.workshops.headings.notes','Notes'
=markdown _!(workshop.notes)

57
app/views/workshops/show.html.haml

@ -1,62 +1,7 @@
= render 'conferences/page_header', :page_key => 'View_Workshop'
%article
= render 'workshops/show', :workshop => @workshop, :preview => false
= row do
= columns(medium: 12) do
%h2=_!@workshop.title
.workshop-interest
- if @workshop.interested?(current_user)
=_'articles.workshops.info.you_are_interested_count', "You and #{@workshop.interested_count - 1} others are interested in this workshop", :vars => {:count => (@workshop.interested_count - 1)}
- else
=_'articles.workshops.info.interested_count', "#{@workshop.interested_count} people are interested in this workshop", :vars => {:count => @workshop.interested_count}
- if @workshop.can_show_interest?(current_user)
= form_tag toggle_workshop_interest_path(@this_conference.slug, @workshop.id) do
= button_tag (@workshop.interested?(current_user) ? :remove_interest : :show_interest), :value => :toggle_interest, :class => (@workshop.interested?(current_user) ? 'delete' : 'add')
=markdown _!(@workshop.info) || ''
- if current_user.can_translate?
.actions
- I18n.backend.enabled_locales.each do |locale|
= (link_to (_'actions.workshops.Translate', "Translate into #{language_name(locale)}", :vars => {:language => language_name(locale)}), edit_workshop_url(@this_conference.slug, @workshop.id, url_params(locale)), :class => 'button translate') if @workshop.can_translate?(current_user, locale)
= columns(medium: 6) do
%h3=_'articles.workshops.headings.facilitators'
.facilitators
- @workshop.workshop_facilitators.each do |f|
- u = User.find(f.user_id)
- if @workshop.public_facilitator?(u) || f.user_id == current_user.id || @workshop.active_facilitator?(current_user)
.facilitator
.name=_!(u.firstname || u.username || u.email)
.role
=_"roles.workshops.facilitator.#{@workshop.role(u).to_s}"
- if f.role.to_sym == :requested && @workshop.active_facilitator?(current_user)
=(link_to (_'actions.workshops.Approve'), approve_facilitate_workshop_request_path(@this_conference.slug, @workshop.id, f.user_id, 'approve'), :class => 'button modify')
=(link_to (_'actions.workshops.Deny'), approve_facilitate_workshop_request_path(@this_conference.slug, @workshop.id, f.user_id, 'deny'), :class => 'button delete')
- elsif (f.user_id == current_user.id && f.role.to_sym != :creator) || (!@this_conference.registered?(u) && @workshop.active_facilitator?(current_user))
=(link_to (_'actions.workshops.Remove'), approve_facilitate_workshop_request_path(@this_conference.slug, @workshop.id, f.user_id, 'remove'), :class => 'button delete')
.actions
=(link_to (_'actions.workshops.Facilitate'), facilitate_workshop_path(@this_conference.slug, @workshop.id), :class => 'button modify') if !@workshop.facilitator?(current_user)
- if @workshop.active_facilitator?(current_user)
= form_tag workshop_add_facilitator_path(@this_conference.slug, @workshop.id), :class => 'add-facilitator' do
%h4='Add a facilitator'
.email-field.input-field
= email_field_tag :email, nil, required: true
= label_tag :email
= button_tag :add
- if @workshop.languages
= columns(medium: 6) do
%h3=_'articles.workshops.headings.languages','Workshop Language'
%p= _!((JSON.parse(@workshop.languages || '[]').map { |x| _"languages.#{x}" }).join(', ').to_s.html_safe)
- if @workshop.theme
= columns(medium: 6) do
%h3=_'articles.workshops.headings.theme','Theme'
%p= [:race_gender, :mechanics, :funding, :organization, :community].include?((@workshop.theme || '').to_sym) ? (_"workshop.options.theme.#{@workshop.theme}") : @workshop.theme
- if @workshop.active_facilitator?(current_user) || @this_conference.host?(current_user)
- if @workshop.needs
= columns(medium: 6) do
%h3=_'articles.workshops.headings.needs','What do you need?'
%p= _!((JSON.parse(@workshop.needs || '[]').map { |x| _"workshop.options.needs.#{x}" }).join(', ').to_s.html_safe)
- if @workshop.notes
= columns(medium: 12) do
%h3=_'articles.workshops.headings.notes','Notes'
=markdown _!(@workshop.notes)
= columns(medium: 12) do
.actions.right
= (link_to (_'actions.workshops.Edit'), edit_workshop_path(@this_conference.slug, @workshop.id), :class => 'button modify') if @workshop.can_edit?(current_user)

2
config/locales/data/html_records/Be-the-first-to-like-a-workshop--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Guadalajara, Jalisco, Mexico</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

7
config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-1.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Mauris Enim Leo, Rhoncus Sed, Vestibulum Sit Amet, Cursus Id, Turpis</h2>
<div class="row"><div class="columns medium-12"><h2>Sed Accumsan Felis</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.you_are_interested_count" data-i18n-needs-translation="0">You are interested in this workshop</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam. Suspendisse potenti.</p>
<p>Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

7
config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Mauris Enim Leo, Rhoncus Sed, Vestibulum Sit Amet, Cursus Id, Turpis</h2>
<div class="row"><div class="columns medium-12"><h2>Sed Accumsan Felis</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam. Suspendisse potenti.</p>
<p>Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

7
config/locales/data/html_records/Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Mauris Enim Leo, Rhoncus Sed, Vestibulum Sit Amet, Cursus Id, Turpis</h2>
<div class="row"><div class="columns medium-12"><h2>Sed Accumsan Felis</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam. Suspendisse potenti.</p>
<p>Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

2
config/locales/data/html_records/Broadcast-message--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">San Marcos, Texas</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

1
config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-1.html

@ -47,6 +47,7 @@
<div class="row"><div class="columns medium-12"><nav class="sub-menu">
<a href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Registration" data-i18n-needs-translation="0">Registration</span></a>
<a href="/conferences/MyBikeBike/workshops/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Workshops" data-i18n-needs-translation="0">Workshops</span></a>
<a href="/conferences/MyBikeBike/schedule/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Schedule" data-i18n-needs-translation="1">Schedule</span></a>
<a href="/conferences/MyBikeBike/edit/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Edit" data-i18n-needs-translation="0">Edit Conference</span></a>
<a href="/conferences/MyBikeBike/stats/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Stats" data-i18n-needs-translation="0">Stats</span></a>
<a href="/conferences/MyBikeBike/broadcast/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Broadcast" data-i18n-needs-translation="0">Broadcast</span></a>

1
config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-2.html

@ -47,6 +47,7 @@
<div class="row"><div class="columns medium-12"><nav class="sub-menu">
<a href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Registration" data-i18n-needs-translation="0">Registration</span></a>
<a href="/conferences/MyBikeBike/workshops/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Workshops" data-i18n-needs-translation="0">Workshops</span></a>
<a href="/conferences/MyBikeBike/schedule/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Schedule" data-i18n-needs-translation="1">Schedule</span></a>
<a href="/conferences/MyBikeBike/edit/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Edit" data-i18n-needs-translation="0">Edit Conference</span></a>
<a href="/conferences/MyBikeBike/stats/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Stats" data-i18n-needs-translation="0">Stats</span></a>
<a href="/conferences/MyBikeBike/broadcast/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Broadcast" data-i18n-needs-translation="0">Broadcast</span></a>

1
config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast-3.html

@ -47,6 +47,7 @@
<div class="row"><div class="columns medium-12"><nav class="sub-menu">
<a href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Registration" data-i18n-needs-translation="0">Registration</span></a>
<a href="/conferences/MyBikeBike/workshops/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Workshops" data-i18n-needs-translation="0">Workshops</span></a>
<a href="/conferences/MyBikeBike/schedule/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Schedule" data-i18n-needs-translation="1">Schedule</span></a>
<a href="/conferences/MyBikeBike/edit/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Edit" data-i18n-needs-translation="0">Edit Conference</span></a>
<a href="/conferences/MyBikeBike/stats/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Stats" data-i18n-needs-translation="0">Stats</span></a>
<a href="/conferences/MyBikeBike/broadcast/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Broadcast" data-i18n-needs-translation="0">Broadcast</span></a>

10
config/locales/data/html_records/Broadcast-message--conferences.MyBikeBike.broadcast.html

@ -77,12 +77,8 @@
<td>
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' style='text-align: center' valign='top'>
<img class='image_fix' src='http://127.0.0.1:55795'>
</td>
</tr>
<tr>
<td colspan='2' valign='top'>
<td colspan='2' valign='top'><p>Lorem Ipsum</p>
</td>
</tr>
<tr>
@ -93,7 +89,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

2
config/locales/data/html_records/Create-workshop--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">San Marcos, Texas</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

3
config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-1.html

@ -84,7 +84,8 @@
<p></p>
</div><div class="columns medium-12"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.notes" data-i18n-needs-translation="0">Notes</span></h3>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

3
config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-2.html

@ -84,7 +84,8 @@
<p></p>
</div><div class="columns medium-12"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.notes" data-i18n-needs-translation="0">Notes</span></h3>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

3
config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1-3.html

@ -84,7 +84,8 @@
<p></p>
</div><div class="columns medium-12"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.notes" data-i18n-needs-translation="0">Notes</span></h3>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

3
config/locales/data/html_records/Create-workshop--conferences.MyBikeBike.workshops.1.html

@ -84,7 +84,8 @@
<p></p>
</div><div class="columns medium-12"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.notes" data-i18n-needs-translation="0">Notes</span></h3>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

2
config/locales/data/html_records/Edit-a-conference--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Portland, Oregon</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

1
config/locales/data/html_records/Edit-a-conference--conferences.MyBikeBike.edit.html

@ -47,6 +47,7 @@
<div class="row"><div class="columns medium-12"><nav class="sub-menu">
<a href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Registration" data-i18n-needs-translation="0">Registration</span></a>
<a href="/conferences/MyBikeBike/workshops/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Workshops" data-i18n-needs-translation="0">Workshops</span></a>
<a href="/conferences/MyBikeBike/schedule/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Schedule" data-i18n-needs-translation="1">Schedule</span></a>
<a href="/conferences/MyBikeBike/edit/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Edit" data-i18n-needs-translation="0">Edit Conference</span></a>
<a href="/conferences/MyBikeBike/stats/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Stats" data-i18n-needs-translation="0">Stats</span></a>
<a href="/conferences/MyBikeBike/broadcast/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Broadcast" data-i18n-needs-translation="0">Broadcast</span></a>

2
config/locales/data/html_records/Like-a-workshop--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Guadalajara, Jalisco, Mexico</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

7
config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1-1.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Duis At Velit Eu Est Congue Elementum</h2>
<div class="row"><div class="columns medium-12"><h2>Etiam Justo</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.you_are_interested_count" data-i18n-needs-translation="0">You and&nbsp;4&nbsp;others are interested in this workshop</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Fusce consequat. Nulla nisl. Nunc nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

7
config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1-2.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Duis At Velit Eu Est Congue Elementum</h2>
<div class="row"><div class="columns medium-12"><h2>Etiam Justo</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">4&nbsp;people are interested in this workshop</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Fusce consequat. Nulla nisl. Nunc nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

7
config/locales/data/html_records/Like-a-workshop--conferences.MyBikeBike.workshops.1.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Duis At Velit Eu Est Congue Elementum</h2>
<div class="row"><div class="columns medium-12"><h2>Etiam Justo</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">4&nbsp;people are interested in this workshop</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Fusce consequat. Nulla nisl. Nunc nisl.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

2
config/locales/data/html_records/Request-to-facilitate-a-workshop---1.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Guadalajara, Jalisco, Mexico</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

2
config/locales/data/html_records/Request-to-facilitate-a-workshop--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Guadalajara, Jalisco, Mexico</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_denied" data-i18n-needs-translation="0">Your request to become a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a> has been denied. If you think this was in error, you may contact the current facilitators by making another request to facilitate.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_denied" data-i18n-needs-translation="0">Your request to become a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a> has been denied. If you think this was in error, you may contact the current facilitators by making another request to facilitate.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

10
config/locales/data/html_records/Request-to-facilitate-a-workshop--Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.facilitate.html

@ -3,7 +3,7 @@
<head>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
<meta content='width=device-width, initial-scale=1.0' name='viewport'>
<title>&lt;span class=&quot;translated-content&quot; data-i18n-key=&quot;email.subject.workshop_facilitator_request&quot; data-i18n-needs-translation=&quot;0&quot;&gt;Request to facilitate Suspendisse Potenti from John Doe&lt;/span&gt;</title>
<title>&lt;span class=&quot;translated-content&quot; data-i18n-key=&quot;email.subject.workshop_facilitator_request&quot; data-i18n-needs-translation=&quot;0&quot;&gt;Request to facilitate In Eleifend Quam A Odio from John Doe&lt;/span&gt;</title>
<style>
#outlook a {padding:0;}
body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}
@ -70,19 +70,19 @@
}
}
</style>
<meta name="email-from" content='somebody@bikebike.org'/><meta name="email-to" content='et@bikebike.org'/></head>
<meta name="email-from" content='somebody@bikebike.org'/><meta name="email-to" content='donec@bikebike.org'/></head>
<body>
<table border='0' cellpadding='0' cellspacing='0' id='backgroundTable'>
<tr>
<td>
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_message" data-i18n-needs-translation="0">John Doe has requested to help facilitate Suspendisse Potenti:</span></p>
<td colspan='2' valign='top'><p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_message" data-i18n-needs-translation="0">John Doe has requested to help facilitate In Eleifend Quam A Odio:</span></p>
<blockquote><p>Please let me join</p>
</blockquote>
<p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_instructions" data-i18n-needs-translation="0">You can approve or deny this request on your workshop page:</span>
<a href='http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1'>http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1</a>
<a href='http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1'>http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1</a>
</p>
<p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_reply_instructions" data-i18n-needs-translation="0">You can also reply directly to this email to ask follow-up questions.</span></p>
</td>
@ -95,7 +95,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

5
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1.html

@ -55,7 +55,7 @@
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Phasellus in felis. Donec semper sapien a libero. Nam dui.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -100,7 +100,8 @@
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

5
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2.html

@ -55,7 +55,7 @@
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Phasellus in felis. Donec semper sapien a libero. Nam dui.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -98,7 +98,8 @@
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

5
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3.html

@ -55,7 +55,7 @@
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Phasellus in felis. Donec semper sapien a libero. Nam dui.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -90,7 +90,8 @@
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

5
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4.html

@ -55,7 +55,7 @@
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Phasellus in felis. Donec semper sapien a libero. Nam dui.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -96,7 +96,8 @@
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

5
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5.html

@ -55,7 +55,7 @@
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
<p>Phasellus in felis. Donec semper sapien a libero. Nam dui.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -103,7 +103,8 @@
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/edit/"><span class="translated-content" data-i18n-key="actions.workshops.Edit" data-i18n-needs-translation="0">Edit</span></a>
<a class="button delete" href="/conferences/MyBikeBike/workshops/1/delete/"><span class="translated-content" data-i18n-key="actions.workshops.Delete" data-i18n-needs-translation="0">Delete Workshop</span></a>
</div>

2
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.facilitate.html

@ -53,7 +53,7 @@
<article>
<div class="row"><form class="composition" action="/conferences/MyBikeBike/workshops/1/facilitate_request/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
<input type="hidden" name="workshop_id" id="workshop_id" value="1">
<div class="columns medium-12"><h2><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitate" data-i18n-needs-translation="0">Request to Facilitate ‘Suspendisse Potenti</span></h2>
<div class="columns medium-12"><h2><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitate" data-i18n-needs-translation="0">Request to Facilitate ‘In Eleifend Quam A Odio</span></h2>
<span class="translated-contentblock" data-i18n-key="articles.workshops.paragraphs.facilitate_request" data-i18n-needs-translation="0"><p>Please tell the current workshop facilitators who you are, why you want to help facilitate the workshop, and how you think you will help make the workshop better. All of the current facilitators will be emailed and they may ask more questions before approving or denying your request. Please note that this will reveal your email address to the facilitators.</p>
</span>
<div class="text-area-field input-field">

7
config/locales/data/html_records/Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1.html

@ -51,7 +51,7 @@
</div></div><div id="content">
<article>
<div class="row"><div class="columns medium-12"><h2>Suspendisse Potenti</h2>
<div class="row"><div class="columns medium-12"><h2>In Eleifend Quam A Odio</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
<form action="/conferences/MyBikeBike/workshops/1/toggle-interest/" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓">
@ -59,7 +59,7 @@
</form>
</div>
<p>Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit. Vivamus vel nulla eget eros elementum pellentesque.</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus. Praesent lectus.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
@ -67,7 +67,8 @@
<a class="button modify" href="/conferences/MyBikeBike/workshops/1/facilitate/"><span class="translated-content" data-i18n-key="actions.workshops.Facilitate" data-i18n-needs-translation="0">Make a facilitation request</span></a>
</div>
</div>
</div><div class="columns medium-12"><div class="actions right">
</div></div>
<div class="row"><div class="columns medium-12"><div class="actions right">
</div>

10
config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request.html

@ -3,7 +3,7 @@
<head>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
<meta content='width=device-width, initial-scale=1.0' name='viewport'>
<title>&lt;span class=&quot;translated-content&quot; data-i18n-key=&quot;email.subject.workshop_facilitator_request&quot; data-i18n-needs-translation=&quot;0&quot;&gt;Request to facilitate Suspendisse Potenti from John Doe&lt;/span&gt;</title>
<title>&lt;span class=&quot;translated-content&quot; data-i18n-key=&quot;email.subject.workshop_facilitator_request&quot; data-i18n-needs-translation=&quot;0&quot;&gt;Request to facilitate In Eleifend Quam A Odio from John Doe&lt;/span&gt;</title>
<style>
#outlook a {padding:0;}
body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}
@ -70,19 +70,19 @@
}
}
</style>
<meta name="email-from" content='somebody@bikebike.org'/><meta name="email-to" content='et@bikebike.org'/></head>
<meta name="email-from" content='somebody@bikebike.org'/><meta name="email-to" content='donec@bikebike.org'/></head>
<body>
<table border='0' cellpadding='0' cellspacing='0' id='backgroundTable'>
<tr>
<td>
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_message" data-i18n-needs-translation="0">John Doe has requested to help facilitate Suspendisse Potenti:</span></p>
<td colspan='2' valign='top'><p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_message" data-i18n-needs-translation="0">John Doe has requested to help facilitate In Eleifend Quam A Odio:</span></p>
<blockquote><p>Please let me join</p>
</blockquote>
<p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_instructions" data-i18n-needs-translation="0">You can approve or deny this request on your workshop page:</span>
<a href='http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1'>http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1</a>
<a href='http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1'>http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1</a>
</p>
<p><span class="translated-content" data-i18n-key="email.workshop.paragraph.request_reply_instructions" data-i18n-needs-translation="0">You can also reply directly to this email to ask follow-up questions.</span></p>
</td>
@ -95,7 +95,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved-1.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved-2.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_approved.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_approved" data-i18n-needs-translation="0">You have been added as a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a>.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Request-to-facilitate-a-workshop--workshop_facilitator_request_denied.html

@ -78,7 +78,7 @@
<table align='center' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td colspan='2' valign='top'><p>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_denied" data-i18n-needs-translation="0">Your request to become a facilitator of <a href="http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a> has been denied. If you think this was in error, you may contact the current facilitators by making another request to facilitate.</span>
<span class="translated-content" data-i18n-key="email.workshop.paragraph.request_denied" data-i18n-needs-translation="0">Your request to become a facilitator of <a href="http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My Awesome Workshop</a> has been denied. If you think this was in error, you may contact the current facilitators by making another request to facilitate.</span>
</p>
</td>
</tr>
@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

2
config/locales/data/html_records/See-a-more-info-link--.html

@ -50,7 +50,7 @@
<div class="details">
<h3 class="primary">Halifax, Nova Scotia</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

2
config/locales/data/html_records/See-a-register-link--.html

@ -41,7 +41,7 @@
<div class="details">
<h3 class="primary">Sackville, New Brunswick</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

4
config/locales/data/html_records/Start-registration-from-landing-page--.html

@ -41,7 +41,7 @@
<div class="details">
<h3 class="primary">Halifax, Nova Scotia</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>
@ -62,7 +62,7 @@ Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.
<h4>My Awesome Workshop</h4>
<div class="workshop-interest">
</div>
<div class="workshop-description"><p>Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo. Pellentesque viverra pede ac diam. Cras pellentesque volutpat dui.</p>
<div class="workshop-description"><p>Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis. Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci. Mauris lacinia sapien quis libero.</p>
</div>
</li>
</ul>

4
config/locales/data/html_records/Start-registration-from-landing-page--Start-registration-from-landing-page--conferences.MyBikeBike.register-1.html

@ -81,7 +81,7 @@
<p>
<h3>
<b>
<a href='/confirm/d4cc113a01e984988ee58162a6a3ffdfb300b72a68d93734d5171979cc8dba13'><span class="translated-content" data-i18n-key="email.confirmation.link.please_confirm" data-i18n-needs-translation="0">Confirm now</span></a>
<a href='/confirm/f71e511f84fb17a545ecafaa120ef590c3e5ec99738b603cd76de195b95e41eb'><span class="translated-content" data-i18n-key="email.confirmation.link.please_confirm" data-i18n-needs-translation="0">Confirm now</span></a>
</b>
</h3>
</p>
@ -95,7 +95,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

2
config/locales/data/html_records/Start-registration-from-landing-page--Start-registration-from-landing-page--conferences.MyBikeBike.register-3.html

@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

4
config/locales/data/html_records/Start-registration-from-landing-page--conferences.MyBikeBike.register-3.html

@ -67,8 +67,8 @@
<label for="departure"><span class="translated-content" data-i18n-key="forms.labels.generic.departure" data-i18n-needs-translation="0">Departure date</span></label>
</div>
<div class="date-field input-field">
<input type="datetime-local" name="arrival" id="arrival" value="2015-08-22T00:00:00">
<input type="datetime-local" name="departure" id="departure" value="2015-08-26T00:00:00">
<input type="datetime-local" name="arrival" id="arrival" value="2015-08-27T00:00:00">
<input type="datetime-local" name="departure" id="departure" value="2015-08-31T00:00:00">
</div>
</div>
<h3><span class="translated-content" data-i18n-key="articles.conference_registration.headings.languages" data-i18n-needs-translation="0">Which languages do you speak?</span></h3>

4
config/locales/data/html_records/Start-registration-from-landing-page--email_confirmation.html

@ -81,7 +81,7 @@
<p>
<h3>
<b>
<a href='/confirm/d4cc113a01e984988ee58162a6a3ffdfb300b72a68d93734d5171979cc8dba13'><span class="translated-content" data-i18n-key="email.confirmation.link.please_confirm" data-i18n-needs-translation="0">Confirm now</span></a>
<a href='/confirm/f71e511f84fb17a545ecafaa120ef590c3e5ec99738b603cd76de195b95e41eb'><span class="translated-content" data-i18n-key="email.confirmation.link.please_confirm" data-i18n-needs-translation="0">Confirm now</span></a>
</b>
</h3>
</p>
@ -95,7 +95,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

2
config/locales/data/html_records/Start-registration-from-landing-page--registration_confirmation.html

@ -90,7 +90,7 @@
<img class='image_fix' src='/assets/bblogo-paypal'>
</td>
<td style='width: 50%; text-align: left'>
<a href='http://127.0.0.1:55795'>&copy; Bike!Bike! 2015</a>
<a href='http://127.0.0.1:57139'>&copy; Bike!Bike! 2015</a>
</td>
</tr>
<tr>

248
config/locales/data/html_records/View-published-schedule--.html

@ -0,0 +1,248 @@
<!DOCTYPE html><html lang="en"><head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" name="viewport">
<title>Bike!Bike!</title>
<meta content="Bike!Bike! A conference for bike collectives, co-ops, non-profit DIY bike shops" name="description">
<link href="/assets/application/safari-7.css" rel="stylesheet" media="all" type="text/css"><link href="/assets/web-fonts/safari-7.css" rel="stylesheet" media="all" type="text/css">
<link href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon">
<link href="/assets/favicon.ico" rel="icon" type="image/x-icon">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/apple-touch-icon-72x72.png" rel="apple-touch-icon" sizes="72x72">
<link href="/apple-touch-icon-114x114.png" rel="apple-touch-icon" sizes="114x114">
<link href="/apple-touch-icon-144x144.png" rel="apple-touch-icon" sizes="144x144">
</head>
<body class="home">
<nav>
<div id="main-nav">
<div class="inner-nav">
<a class="logo" href="/"><img src="/assets/bb-icon-logo.png" class="sprite icons bb-icon-logo">
<img src="/assets/bb-icon-logo-text.png" class="sprite icons bb-icon-logo-text">
</a><div class="nav">
<a class="current" href="/"><span>My Bike!Bike!</span></a>
<a href="/about/"><span><span class="translated-content" data-i18n-key="page_titles.About_BikeBike" data-i18n-needs-translation="0">About Bike!Bike!</span></span></a>
<a href="/policy/"><span><span class="translated-content" data-i18n-key="page_titles.Safe_Space_Policy" data-i18n-needs-translation="0">Safer Space Agreement</span></span></a>
</div>
<div class="actions">
<a class="button register" href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="conference.actions.Register" data-i18n-needs-translation="0">Register</span>
</a></div>
</div>
</div>
</nav>
<main id="main">
<header id="banner">
<div id="header-title">
<div class="cover" style="background-image: url(/assets/default_cover.jpg)"></div>
<div class="title">
<h2 class="background">2015!</h2>
<div class="details">
<h3 class="primary">Boise, Idaho</h3>
<div class="secondary">
August 27 – 31, 2015
</div>
</div>
</div>
</div>
<figure>
<img src="/assets/default_poster.jpg">
</figure>
</header>
<div id="content">
<article>
<h2>My Bike!Bike!</h2>
Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.
<h3><span class="translated-content" data-i18n-key="articles.workshops.headings.Schedule" data-i18n-needs-translation="1">Schedule</span></h3>
<div class="programme">
<div class="programme-day">
<h2>Friday</h2>
<div class="programme-day-part">
<h3><span class="translated-content" data-i18n-key="articles.headings.schedule.day_parts.morning" data-i18n-needs-translation="1">morning</span></h3>
<table class="schedule">
<tbody><tr>
<th></th>
<th> 9:00am</th>
<th> 9:30am</th>
<th>10:00am</th>
</tr>
<tr>
<th>The Shop</th>
<td class="workshop previewable" colspan="3.0" id="workshop-1">
<div class="title">Bikes and Beers</div>
<div class="info">
<a class="close" href="#!"></a>
<div class="row"><div class="columns medium-12"><h2>Bikes and Beers</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Sed sagittis. Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci. Nullam molestie nibh in lectus.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
</div>
</div></div>
</div>
<a class="preview" href="#workshop-1"></a>
</td>
</tr>
</tbody></table>
</div>
<div class="programme-day-part">
<h3><span class="translated-content" data-i18n-key="articles.headings.schedule.day_parts.afternoon" data-i18n-needs-translation="1">afternoon</span></h3>
<table class="schedule">
<tbody><tr>
<th></th>
<th> 2:00pm</th>
<th> 2:30pm</th>
<th> 3:00pm</th>
</tr>
<tr>
<th>The Shop</th>
<td class="workshop previewable" colspan="3.0" id="workshop-3">
<div class="title">Advocacy Now!</div>
<div class="info">
<a class="close" href="#!"></a>
<div class="row"><div class="columns medium-12"><h2>Advocacy Now!</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>In hac habitasse platea dictumst. Etiam faucibus cursus urna. Ut tellus.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
</div>
</div></div>
</div>
<a class="preview" href="#workshop-3"></a>
</td>
</tr>
</tbody></table>
</div>
<div class="programme-day-part">
<h3><span class="translated-content" data-i18n-key="articles.headings.schedule.day_parts.evening" data-i18n-needs-translation="1">evening</span></h3>
<table class="schedule">
<tbody><tr>
<th></th>
<th> 9:00pm</th>
<th> 9:30pm</th>
<th>10:00pm</th>
</tr>
<tr>
<th>The Shop</th>
<td class="workshop previewable" colspan="3.0" id="workshop-4">
<div class="title">Public Outreach</div>
<div class="info">
<a class="close" href="#!"></a>
<div class="row"><div class="columns medium-12"><h2>Public Outreach</h2>
<div class="workshop-interest">
<span class="translated-content" data-i18n-key="articles.workshops.info.interested_count" data-i18n-needs-translation="0">No one is interested in this workshop yet</span>
</div>
<p>Duis bibendum. Morbi non quam nec dui luctus rutrum. Nulla tellus.</p>
</div><div class="columns medium-6"><h3><span class="translated-content" data-i18n-key="articles.workshops.headings.facilitators" data-i18n-needs-translation="0">Facilitators</span></h3>
<div class="facilitators">
</div>
</div></div>
</div>
<a class="preview" href="#workshop-4"></a>
</td>
</tr>
</tbody></table>
</div>
</div>
</div>
</article>
</div>
</main>
<div id="footer">
<footer><div class="github">
<img src="/assets/bb-icon-github.png" class="sprite icons bb-icon-github">
<a href="https://github.com/bikebike/BikeBike/issues" target="_blank">
<span class="translated-content" data-i18n-key="links.footer.text.File_an_Issue" data-i18n-needs-translation="0">File an issue</span>
</a>
|
<a href="https://github.com/bikebike/BikeBike/contributing.md" target="_blank">
<span class="translated-content" data-i18n-key="links.footer.text.Help_contribute" data-i18n-needs-translation="0">Help contribute</span>
</a>
</div>
<div class="facebook">
<span class="translated-contentblock" data-i18n-key="links.footer.help_text.facebook" data-i18n-needs-translation="0"><a href="https://www.facebook.com/groups/648758205249998/" target="_blank" title="Join our Facebook group">
<img src="/assets/bb-icon-fb.png" class="sprite icons bb-icon-fb">
</a>
</span></div>
<div class="locale">
<span class="translated-contentblock" data-i18n-key="links.footer.help_text.select_language" data-i18n-needs-translation="0"><input id="select-language" type="checkbox">
<label class="launch" for="select-language" title="Change your language">
EN
</label>
<div class="selector">
<ul>
<li>
<a href="/?lang=en">
EN
</a>
<span>English</span>
</li>
<li>
<a href="/?lang=es">
ES
</a>
<span>español</span>
</li>
<li>
<a href="/?lang=fr">
FR
</a>
<span>français</span>
</li>
</ul>
</div>
</span></div>
<div class="copy">
<span class="translated-contentblock" data-i18n-key="links.footer.help_text.contributors" data-i18n-needs-translation="0"><a title="Contributors" href="/humans.txt">©2015 Bike!Bike!
</a></span></div>
</footer>
</div>
<script>
(function() {
if (!String.prototype.trim) {
(function() {
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
String.prototype.trim = function() {
return this.replace(rtrim, '');
};
})();
}
function classExists(elem,className){var p = new RegExp('(^| )'+className+'( |$)');return (elem.className && elem.className.match(p));}
function addClass(elem,className){if(classExists(elem,className)){return true;}elem.className += ' '+className;}
function removeClass(elem,className){var c = elem.className;var p = new RegExp('(^| )'+className+'( |$)');c = c.replace(p,' ').replace(/ /g,' ');elem.className = c.trim();}
[].slice.call(document.querySelectorAll('.input-field input')).forEach(function(inputEl) {
if (inputEl.value.trim() === '') {
inputEl.parentNode.className = inputEl.parentNode.className + ' empty';
}
inputEl.addEventListener('focus', onInputFocus);
inputEl.addEventListener('blur', onInputBlur);
});
function onInputFocus(ev) {
removeClass(ev.target.parentNode, 'empty')
}
function onInputBlur(ev) {
if (ev.target.value.trim() === '') {
addClass(ev.target.parentNode, 'empty');
}
}
})();
</script>
</body></html>

2
config/locales/data/html_records/View-stats--.html

@ -46,7 +46,7 @@
<div class="details">
<h3 class="primary">Anchorage, Alaska</h3>
<div class="secondary">
August 22 – 26, 2015
August 27 – 31, 2015
</div>
</div>
</div>

1
config/locales/data/html_records/View-stats--conferences.MyBikeBike.stats.html

@ -47,6 +47,7 @@
<div class="row"><div class="columns medium-12"><nav class="sub-menu">
<a href="/conferences/MyBikeBike/register/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Registration" data-i18n-needs-translation="0">Registration</span></a>
<a href="/conferences/MyBikeBike/workshops/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Workshops" data-i18n-needs-translation="0">Workshops</span></a>
<a href="/conferences/MyBikeBike/schedule/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Schedule" data-i18n-needs-translation="1">Schedule</span></a>
<a href="/conferences/MyBikeBike/edit/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Edit" data-i18n-needs-translation="0">Edit Conference</span></a>
<a href="/conferences/MyBikeBike/stats/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Stats" data-i18n-needs-translation="0">Stats</span></a>
<a href="/conferences/MyBikeBike/broadcast/"><span class="translated-content" data-i18n-key="menu.submenu.registration.Broadcast" data-i18n-needs-translation="0">Broadcast</span></a>

2
config/locales/data/html_records/View-stats--conferences.MyBikeBike.stats.xls.html

@ -28,7 +28,7 @@ Excel Spreadsheet
<td>Jeff</td>
<td>someguy@bikebike.org</td>
<td>Somewhere</td>
<td>2015-09-22 02:21:25</td>
<td>2015-09-27 03:02:26</td>
<td>English</td>
<td>2015-09-28 00:00:00</td>
<td>2015-09-28 00:00:00</td>

186
config/locales/data/translation-info.yml

@ -15,6 +15,7 @@ date.formats.span_same_month_date_1:
- View-stats--
- Broadcast-message--
- Edit-a-conference--
- View-published-schedule--
- Create-workshop--
- Be-the-first-to-like-a-workshop--
- Like-a-workshop--
@ -33,6 +34,7 @@ date.month_names:
- View-stats--
- Broadcast-message--
- Edit-a-conference--
- View-published-schedule--
- Create-workshop--
- Be-the-first-to-like-a-workshop--
- Like-a-workshop--
@ -48,6 +50,7 @@ date.formats.span_same_month_date_2:
- View-stats--
- Broadcast-message--
- Edit-a-conference--
- View-published-schedule--
- Create-workshop--
- Be-the-first-to-like-a-workshop--
- Like-a-workshop--
@ -66,6 +69,7 @@ date.date_span:
- View-stats--
- Broadcast-message--
- Edit-a-conference--
- View-published-schedule--
- Create-workshop--
- Be-the-first-to-like-a-workshop--
- Like-a-workshop--
@ -149,6 +153,7 @@ page_descriptions.home:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -231,6 +236,7 @@ page_titles.About_BikeBike:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -313,6 +319,7 @@ page_titles.Safe_Space_Policy:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -407,6 +414,7 @@ links.footer.text.File_an_Issue:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -489,6 +497,7 @@ links.footer.text.Help_contribute:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -572,6 +581,7 @@ links.footer.help_text.facebook:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -655,6 +665,7 @@ links.footer.help_text.select_language:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -765,6 +776,8 @@ languages.en:
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- View-published-schedule--
- Read-the-about-page--about
- Read-the-about-page--about
- Read-the-policy-page--policy
@ -914,6 +927,8 @@ languages.es:
- Edit-a-conference--conferences.MyBikeBike.edit
- Edit-a-conference--conferences.MyBikeBike.edit
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- View-published-schedule--
- Read-the-about-page--about
- Read-the-about-page--about
- Read-the-policy-page--policy
@ -1063,6 +1078,8 @@ languages.fr:
- Edit-a-conference--conferences.MyBikeBike.edit
- Edit-a-conference--conferences.MyBikeBike.edit
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- View-published-schedule--
- Read-the-about-page--about
- Read-the-about-page--about
- Read-the-policy-page--policy
@ -1186,6 +1203,7 @@ links.footer.help_text.contributors:
- Edit-a-conference--confirm.test
- Edit-a-conference--
- Edit-a-conference--conferences.MyBikeBike.edit
- View-published-schedule--
- Read-the-about-page--about
- Read-the-policy-page--policy
- See-a-404-page--error_404
@ -1243,6 +1261,7 @@ conference.actions.Register:
- Broadcast-message--
- Edit-a-conference--confirm.test
- Edit-a-conference--
- View-published-schedule--
- Create-workshop--confirm.test
- Create-workshop--
- Be-the-first-to-like-a-workshop--confirm.test
@ -1969,9 +1988,13 @@ time.formats.long:
time.am:
pages:
- "/conferences/:slug/register"
- "/"
examples:
- Start-registration-from-landing-page--conferences.MyBikeBike.register-6
- Start-registration-from-landing-page--conferences.MyBikeBike.register-6
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
articles.conference_registration.headings.departure:
pages:
- "/conferences/:slug/register"
@ -2098,6 +2121,18 @@ articles.conference_registration.headings.Allergies:
- "/conferences/:slug/stats"
examples:
- View-stats--conferences.MyBikeBike.stats
menu.submenu.registration.Schedule:
pages:
- "/conferences/:slug/stats"
- "/conferences/:slug/broadcast"
- "/conferences/:slug/edit"
examples:
- View-stats--conferences.MyBikeBike.stats
- Broadcast-message--conferences.MyBikeBike.broadcast
- Broadcast-message--conferences.MyBikeBike.broadcast-1
- Broadcast-message--conferences.MyBikeBike.broadcast-2
- Broadcast-message--conferences.MyBikeBike.broadcast-3
- Edit-a-conference--conferences.MyBikeBike.edit
menu.submenu.registration.Edit:
pages:
- "/conferences/:slug/stats"
@ -2275,6 +2310,108 @@ forms.actions.generic.save:
- Edit-a-conference--conferences.MyBikeBike.edit
- Create-workshop--conferences.MyBikeBike.workshops.create
- Create-workshop--conferences.MyBikeBike.workshops.1.edit
geography.subregions.US.ID:
pages:
- "/"
examples:
- View-published-schedule--
articles.workshops.headings.Schedule:
pages:
- "/"
examples:
- View-published-schedule--
date.day_names:
pages:
- "/"
examples:
- View-published-schedule--
articles.headings.schedule.day_parts.morning:
pages:
- "/"
examples:
- View-published-schedule--
time.formats.short:
pages:
- "/"
examples:
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
articles.workshops.info.interested_count:
pages:
- "/"
- "/conferences/:slug/workshops/:workshop_id"
context: 0 people are interested in this workshop
vars:
- :count
examples:
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- Create-workshop--conferences.MyBikeBike.workshops.1
- Create-workshop--conferences.MyBikeBike.workshops.1-1
- Create-workshop--conferences.MyBikeBike.workshops.1-2
- Create-workshop--conferences.MyBikeBike.workshops.1-3
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Like-a-workshop--conferences.MyBikeBike.workshops.1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5
articles.workshops.headings.facilitators:
pages:
- "/"
- "/conferences/:slug/workshops/:workshop_id"
examples:
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- Create-workshop--conferences.MyBikeBike.workshops.1
- Create-workshop--conferences.MyBikeBike.workshops.1-1
- Create-workshop--conferences.MyBikeBike.workshops.1-2
- Create-workshop--conferences.MyBikeBike.workshops.1-3
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Like-a-workshop--conferences.MyBikeBike.workshops.1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5
articles.headings.schedule.day_parts.afternoon:
pages:
- "/"
examples:
- View-published-schedule--
time.pm:
pages:
- "/"
examples:
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
- View-published-schedule--
articles.headings.schedule.day_parts.evening:
pages:
- "/"
examples:
- View-published-schedule--
page_titles.about.About_BikeBike:
pages:
- "/about"
@ -2660,47 +2797,6 @@ page_titles.conferences.View_Workshop:
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5
articles.workshops.info.interested_count:
pages:
- "/conferences/:slug/workshops/:workshop_id"
context: 0 people are interested in this workshop
vars:
- :count
examples:
- Create-workshop--conferences.MyBikeBike.workshops.1
- Create-workshop--conferences.MyBikeBike.workshops.1-1
- Create-workshop--conferences.MyBikeBike.workshops.1-2
- Create-workshop--conferences.MyBikeBike.workshops.1-3
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Like-a-workshop--conferences.MyBikeBike.workshops.1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5
articles.workshops.headings.facilitators:
pages:
- "/conferences/:slug/workshops/:workshop_id"
examples:
- Create-workshop--conferences.MyBikeBike.workshops.1
- Create-workshop--conferences.MyBikeBike.workshops.1-1
- Create-workshop--conferences.MyBikeBike.workshops.1-2
- Create-workshop--conferences.MyBikeBike.workshops.1-3
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-1
- Be-the-first-to-like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Like-a-workshop--conferences.MyBikeBike.workshops.1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-1
- Like-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-1
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-2
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-3
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-4
- Request-to-facilitate-a-workshop--conferences.MyBikeBike.workshops.1-5
roles.workshops.facilitator.creator:
pages:
- "/conferences/:slug/workshops/:workshop_id"
@ -2842,7 +2938,7 @@ page_titles.conferences.Facilitate_Workshop:
articles.workshops.headings.facilitate:
pages:
- "/conferences/:slug/workshops/:workshop_id/facilitate"
context: Request to Facilitate ‘Suspendisse Potenti
context: Request to Facilitate ‘In Eleifend Quam A Odio
vars:
- :workshop_title
examples:
@ -2865,7 +2961,7 @@ forms.labels.generic.message:
email.subject.workshop_facilitator_request:
pages:
- "/conferences/:slug/workshops/:workshop_id/facilitate_request"
context: Request to facilitate Suspendisse Potenti from John Doe
context: Request to facilitate In Eleifend Quam A Odio from John Doe
vars:
- :workshop_title
- :requester_name
@ -2963,7 +3059,7 @@ email.workshop.paragraph.request_approved:
pages:
- "/conferences/:slug/workshops/:workshop_id/facilitate_request/:user_id/:approve_or_deny"
- "/conferences/:slug/workshops/:workshop_id/add_facilitator"
context: You have been added as a facilitator of <a href="http://127.0.0.1:55795http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My
context: You have been added as a facilitator of <a href="http://127.0.0.1:57139http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My
Awesome Workshop</a>.
vars:
- :workshop_title
@ -2985,7 +3081,7 @@ email.subject.workshop_request_denied:
email.workshop.paragraph.request_denied:
pages:
- "/conferences/:slug/workshops/:workshop_id/facilitate_request/:user_id/:approve_or_deny"
context: Your request to become a facilitator of <a href="http://127.0.0.1:55795http://127.0.0.1:55795/conferences/MyBikeBike/workshops/1">My
context: Your request to become a facilitator of <a href="http://127.0.0.1:57139http://127.0.0.1:57139/conferences/MyBikeBike/workshops/1">My
Awesome Workshop</a> has been denied. If you think this was in error, you may
contact the current facilitators by making another request to facilitate.
vars:

2
config/locales/en.yml

@ -221,7 +221,7 @@ en:
formats:
default: "%a, %d %b %Y %H:%M:%S %z"
long: "%l%P, %B %e, %Y"
short: "%d %b %H:%M"
short: "%l:%M%P"
pm: pm
languages:
af: Afrikaans

2
config/locales/es.yml

@ -197,7 +197,7 @@ es:
formats:
default: '%A, %d de %B de %Y %H:%M:%S %z'
long: '%d de %B de %Y %H:%M'
short: '%d de %b %H:%M'
short: '%H:%M'
pm: pm
languages:
af: afrikáans

66
config/routes.rb

@ -1,38 +1,54 @@
BikeBike::Application.routes.draw do
get '/organizations/json' => 'organizations#json', :as => :organizations_json
get '/organizations/json' => 'organizations#json', :as => :organizations_json
get '/conferences/:slug/edit' => 'conferences#edit', :as => :edit_conference
post '/conferences/:slug/save' => 'conferences#save', :as => :save_conference
match '/conferences/:slug/register' => 'conferences#register', :as => :register, via: [:get, :post]
match '/conferences/:slug/broadcast' => 'conferences#broadcast', :as => :broadcast, via: [:get, :post]
get '/conferences/:slug/stats' => 'conferences#stats', :as => :stats
get '/conferences/:slug/register/:button/:confirmation_token' => 'conferences#register', :as => :register_paypal_confirm
get '/conferences/:slug/workshops' => 'conferences#workshops', :as => :workshops
get '/conferences/:slug/stats' => 'conferences#stats', :as => :stats
get '/conferences/:slug/register/:button/:confirmation_token' => 'conferences#register', :as => :register_paypal_confirm
get '/conferences/:slug/schedule' => 'conferences#schedule', :as => :schedule
get '/conferences/:slug/schedule/edit' => 'conferences#edit_schedule', :as => :edit_schedule
post '/conferences/:slug/schedule/save' => 'conferences#save_schedule', :as => :save_schedule
get '/conferences/:slug/schedule/location/add' => 'conferences#add_location', :as => :add_location
post '/conferences/:slug/schedule/location/save' => 'conferences#save_location', :as => :save_location
get '/conferences/:slug/schedule/location/:id' => 'conferences#view_location', :as => :view_location
get '/conferences/:slug/schedule/location/:id/edit' => 'conferences#edit_location', :as => :edit_location
get '/conferences/:slug/schedule/event/add' => 'conferences#add_event', :as => :add_event
post '/conferences/:slug/schedule/event/save' => 'conferences#save_event', :as => :save_event
get '/conferences/:slug/schedule/event/:id' => 'conferences#view_event', :as => :view_event
get '/conferences/:slug/schedule/event/:id/edit' => 'conferences#edit_event', :as => :edit_event
get '/conferences/:slug/workshops' => 'conferences#workshops', :as => :workshops
match '/conferences/:slug/workshops/create' => 'conferences#create_workshop', :as => :create_workshop, via: [:get, :post]
post '/conferences/:slug/workshops/save' => 'conferences#save_workshop', :as => :save_workshop
get '/conferences/:slug/workshops/:workshop_id' => 'conferences#view_workshop', :as => :view_workshop
post '/conferences/:slug/workshops/:workshop_id/toggle-interest' => 'conferences#toggle_workshop_interest', :as => :toggle_workshop_interest
post '/conferences/:slug/workshops/save' => 'conferences#save_workshop', :as => :save_workshop
get '/conferences/:slug/workshops/:workshop_id' => 'conferences#view_workshop', :as => :view_workshop
post '/conferences/:slug/workshops/:workshop_id/toggle-interest' => 'conferences#toggle_workshop_interest', :as => :toggle_workshop_interest
match '/conferences/:slug/workshops/:workshop_id/edit' => 'conferences#edit_workshop', :as => :edit_workshop, via: [:get, :post]
match '/conferences/:slug/workshops/:workshop_id/delete' => 'conferences#delete_workshop', :as => :delete_workshop, via: [:get, :post]
get '/conferences/:slug/workshops/:workshop_id/facilitate' => 'conferences#facilitate_workshop', :as => :facilitate_workshop
post '/conferences/:slug/workshops/:workshop_id/facilitate_request' => 'conferences#facilitate_request', :as => :facilitate_workshop_request
get '/conferences/:slug/workshops/:workshop_id/facilitate_request/:user_id/:approve_or_deny' => 'conferences#approve_facilitate_request', :as => :approve_facilitate_workshop_request
get '/conferences/:slug/workshops/:workshop_id/facilitate/sent' => 'conferences#sent_facilitate_request', :as => :sent_facilitate_workshop
post '/conferences/:slug/workshops/:workshop_id/add_facilitator' => 'conferences#add_workshop_facilitator', :as => :workshop_add_facilitator
get '/conferences/:slug/edit' => 'conferences#edit', :as => :edit_conference
post '/conferences/:slug/save' => 'conferences#save', :as => :save_conference
get '/robots.txt' => 'application#robots', :as => :robots_txt
get '/humans.txt' => 'application#humans', :as => :humans_txt
get '/confirm/:token' => 'application#confirm', :as => :confirm
get '/conferences/:slug/workshops/:workshop_id/facilitate' => 'conferences#facilitate_workshop', :as => :facilitate_workshop
post '/conferences/:slug/workshops/:workshop_id/facilitate_request' => 'conferences#facilitate_request', :as => :facilitate_workshop_request
get '/conferences/:slug/workshops/:workshop_id/facilitate_request/:user_id/:approve_or_deny' => 'conferences#approve_facilitate_request', :as => :approve_facilitate_workshop_request
get '/conferences/:slug/workshops/:workshop_id/facilitate/sent' => 'conferences#sent_facilitate_request', :as => :sent_facilitate_workshop
post '/conferences/:slug/workshops/:workshop_id/add_facilitator' => 'conferences#add_workshop_facilitator', :as => :workshop_add_facilitator
get '/robots.txt' => 'application#robots', :as => :robots_txt
get '/humans.txt' => 'application#humans', :as => :humans_txt
get '/confirm/:token' => 'application#confirm', :as => :confirm
match '/doconfirm' => 'application#do_confirm', :as => :do_confirm, via: [:get, :post]
#post '/doconfirm' => 'application#do_confirm', :as => :do_confirm
post '/logout' => 'application#user_logout', :as => :logout
post '/translator-request' => 'application#translator_request', :as => :translator_request
post '/logout' => 'application#user_logout', :as => :logout
post '/translator-request' => 'application#translator_request', :as => :translator_request
get '/error_404' => 'application#error_404'
get '/about' => 'application#about', :as => :about
get '/policy' => 'application#policy', :as => :policy
root 'application#home', :as => :home
get '/error_404' => 'application#error_404'
get '/about' => 'application#about', :as => :about
get '/policy' => 'application#policy', :as => :policy
root 'application#home', :as => :home
end

14
db/migrate/20150920233402_create_event_locations.rb

@ -0,0 +1,14 @@
class CreateEventLocations < ActiveRecord::Migration
def change
create_table :event_locations do |t|
t.string :title
t.integer :conference_id
t.float :latitude
t.float :longitude
t.string :address
t.string :amenities
t.timestamps null: false
end
end
end

5
db/migrate/20150920233710_add_event_location_id_to_workshops.rb

@ -0,0 +1,5 @@
class AddEventLocationIdToWorkshops < ActiveRecord::Migration
def change
add_column :workshops, :event_location_id, :integer
end
end

5
db/migrate/20150920233755_add_event_location_id_to_events.rb

@ -0,0 +1,5 @@
class AddEventLocationIdToEvents < ActiveRecord::Migration
def change
add_column :events, :event_location_id, :integer
end
end

5
db/migrate/20150925000217_add_type_to_events.rb

@ -0,0 +1,5 @@
class AddTypeToEvents < ActiveRecord::Migration
def change
add_column :events, :event_type, :string
end
end

5
db/migrate/20150927010559_add_day_parts_to_conferences.rb

@ -0,0 +1,5 @@
class AddDayPartsToConferences < ActiveRecord::Migration
def change
add_column :conferences, :day_parts, :string
end
end

4
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: 20150920233755) do
ActiveRecord::Schema.define(version: 20150927010559) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -120,6 +120,7 @@ ActiveRecord::Schema.define(version: 20150920233755) do
t.string "paypal_username"
t.string "paypal_password"
t.string "paypal_signature"
t.string "day_parts"
end
create_table "delayed_jobs", force: :cascade do |t|
@ -187,6 +188,7 @@ ActiveRecord::Schema.define(version: 20150920233755) do
t.datetime "created_at"
t.datetime "updated_at"
t.integer "event_location_id"
t.string "type"
end
create_table "locations", force: :cascade do |t|

26
features/schedule.feature

@ -0,0 +1,26 @@
Feature: Workshop Page
In order to facilitate and attend workshops
As a visitor
Scenario: View published schedule
Given There is an upcoming conference in Boise ID
And Registration is open
And a location named The Shop exists
And a workshop titled Bikes and Beers exists
And the workshop is scheduled for day 2 at 9:00 at The Shop
And a workshop titled Bike Art exists
And the workshop is scheduled for day 2 at 12:00 at The Shop
And a workshop titled Advocacy Now! exists
And the workshop is scheduled for day 2 at 14:00 at The Shop
And a workshop titled Public Outreach exists
And the workshop is scheduled for day 2 at 21:00 at The Shop
And the workshop schedule is published
And I am on the landing page
Then I see the Bike!Bike! logo

24
features/step_definitions/interface_steps.rb

@ -111,6 +111,30 @@ Given(/^a workshop( titled .+)? exists?$/) do |title|
@last_workshop = workshop
end
Given(/^the workshop is scheduled for day (\d+) at (\d\d?):(\d\d) at (.+)$/) do |day, hour, minute, location|
@last_workshop.start_time = @last_conference.start_date.change({hour: hour.to_i, min: minute.to_i}) + (day.to_i - 1).days
@last_workshop.end_time = @last_workshop.start_time + 1.5.hours
#puts " === [#{location}] === "
#puts EventLocation.all.to_yaml.to_s
@last_workshop.event_location_id = EventLocation.find_by_title(location).id
@last_workshop.save
end
Given(/^the workshop schedule is (not )?published$/) do |is_not_published|
@last_conference.workshop_schedule_published = is_not_published ? false : true
@last_conference.save
end
Given(/^a location( named .+)? exists?$/) do |title|
location = EventLocation.new
location.conference_id = @last_conference.id
location.title = title ? title.gsub(/^\s*named\s*(.*?)\s*$/, '\1') : Forgery::LoremIpsum.sentence({:random => true}).gsub(/\.$/, '').titlecase
#location.info = Forgery::LoremIpsum.paragraph({:random => true})
#location.locale = :en
location.save
@last_location = location
end
Given(/^(I )have created a workshop titled (.+)( with (\d+) facilitators)?$/) do |a, title, b, facilitator_count|
workshop = Workshop.new
workshop.conference_id = @last_conference.id

49
features/support/location_cache.yml

@ -298,3 +298,52 @@
- locality
- political
cache_hit:
" in Boise ID": !ruby/object:Geocoder::Result::Google
data:
address_components:
- long_name: Boise
short_name: Boise
types:
- locality
- political
- long_name: Ada County
short_name: Ada County
types:
- administrative_area_level_2
- political
- long_name: Idaho
short_name: ID
types:
- administrative_area_level_1
- political
- long_name: United States
short_name: US
types:
- country
- political
formatted_address: Boise, ID, USA
geometry:
bounds:
northeast:
lat: 43.6898951
lng: -116.101909
southwest:
lat: 43.511717
lng: -116.3658869
location:
lat: 43.6187102
lng: -116.2146068
location_type: APPROXIMATE
viewport:
northeast:
lat: 43.6898951
lng: -116.101909
southwest:
lat: 43.511717
lng: -116.3658869
partial_match: true
place_id: ChIJnbRH6XLxrlQRm51nNpuYW5o
types:
- locality
- political
cache_hit:

Loading…
Cancel
Save