diff --git a/Gemfile b/Gemfile
index 851267c..1d0c2bd 100644
--- a/Gemfile
+++ b/Gemfile
@@ -5,15 +5,18 @@ gem 'pg'
gem 'rake', '11.1.2'
gem 'ruby_dep', '1.3.1' # Lock at 1.3.1 since 1.4 requires ruby 2.5. We should unlock once we upgrade the ruby version on our server
+# gem 'bcrypt-ruby', '3.0.0', require: 'bcrypt'
+# gem 'bcrypt', '3.1.9'
+# gem 'bcrypt', require: :ruby
gem 'rack-mini-profiler'
gem 'haml'
gem 'nokogiri', '~> 1.6.8.rc2'
if Dir.exists?('../lingua_franca')
- gem 'lingua_franca', :path => '../lingua_franca'
+ gem 'lingua_franca', :path => '../lingua_franca'
else
- gem 'lingua_franca', :git => 'git://github.com/lingua-franca/lingua_franca.git'
+ gem 'lingua_franca', :git => 'git://github.com/lingua-franca/lingua_franca.git'
end
gem 'tzinfo-data'
@@ -21,15 +24,15 @@ gem 'sass'
gem 'sass-rails'
if Dir.exists?('../bumbleberry')
- gem 'bumbleberry', :path => "../bumbleberry"
+ gem 'bumbleberry', :path => "../bumbleberry"
else
- gem 'bumbleberry', :git => 'git://github.com/bumbleberry/bumbleberry.git'
+ gem 'bumbleberry', :git => 'git://github.com/bumbleberry/bumbleberry.git'
end
if Dir.exists?('../paypal-express')
- gem 'paypal-express', :path => "../paypal-express"
+ gem 'paypal-express', :path => "../paypal-express"
else
- gem 'paypal-express', :git => 'git://github.com/bikebike/paypal-express.git'
+ gem 'paypal-express', :git => 'git://github.com/bikebike/paypal-express.git'
end
gem 'uglifier', '>= 1.3.0'
@@ -51,52 +54,52 @@ gem 'launchy'
gem 'to_spreadsheet', :git => 'git://github.com/glebm/to_spreadsheet.git'
group :test do
- gem 'rspec'
- gem 'rspec-rails'
+ gem 'rspec'
+ gem 'rspec-rails'
end
group :development do
- gem 'better_errors'
- gem 'binding_of_caller'
- gem 'meta_request'
-
- gem 'capistrano', '~> 3.1'
- gem 'capistrano-rails', '~> 1.1'
- gem 'capistrano-faster-assets', '~> 1.0'
-
- gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master'
- gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
+ gem 'better_errors'
+ gem 'binding_of_caller'
+ gem 'meta_request'
+
+ gem 'capistrano', '~> 3.1'
+ gem 'capistrano-rails', '~> 1.1'
+ gem 'capistrano-faster-assets', '~> 1.0'
+
+ gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master'
+ gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
end
group :test do
- gem 'gherkin3', '>= 3.1.0'
- gem 'cucumber'
- gem 'cucumber-core'
- gem 'cucumber-rails'
-
- gem 'poltergeist'
- gem 'guard-rspec'
- gem 'factory_girl_rails'
- gem 'coveralls', require: false
- gem 'selenium-webdriver'
- gem 'simplecov', require: false
- gem 'webmock', require: false
- gem 'database_cleaner'
- gem 'mocha'
-end
-
-group :staging, :production, :preview do
- gem 'rails_12factor'
+ gem 'gherkin3', '>= 3.1.0'
+ gem 'cucumber'
+ gem 'cucumber-core'
+ gem 'cucumber-rails'
+
+ gem 'poltergeist'
+ gem 'guard-rspec'
+ gem 'factory_girl_rails'
+ gem 'coveralls', require: false
+ gem 'selenium-webdriver'
+ gem 'simplecov', require: false
+ gem 'webmock', require: false
+ gem 'database_cleaner'
+ gem 'mocha'
end
group :production, :preview do
- gem 'unicorn'
- gem 'daemon-spawn'
- gem 'daemons'
+ gem 'rails_12factor'
+ gem 'daemon-spawn'
+ gem 'daemons'
+
+ platforms :ruby do
+ gem 'unicorn'
+ end
end
platforms 'mswin', 'mingw' do
- group :test do
- gem 'wdm', '>= 0.1.0'
- end
+ group :test do
+ gem 'wdm', '>= 0.1.0'
+ end
end
diff --git a/app/assets/stylesheets/bumbleberry-settings.json b/app/assets/stylesheets/bumbleberry-settings.json
index c0bafee..0ca48d3 100644
--- a/app/assets/stylesheets/bumbleberry-settings.json
+++ b/app/assets/stylesheets/bumbleberry-settings.json
@@ -5,8 +5,8 @@
"chrome": ["51"]
},
"development": {
- "and_chr": ["55"],
- "chrome": ["55"],
+ "and_chr": ["56"],
+ "chrome": ["56"],
"edge": ["13"],
"firefox": ["50"],
"ie": ["11"],
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7f6039b..131f5da 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -78,11 +78,15 @@ class ApplicationController < LinguaFrancaApplicationController
end
def home
- @workshops = Workshop.where(:conference_id => @conference.id)
+ @workshops = []
- if @conference.workshop_schedule_published
- @event_dlg = true
- get_scheule_data(false)
+ if @conference.present?
+ @workshops = Workshop.where(conference_id: @conference.id)
+
+ if @conference.workshop_schedule_published
+ @event_dlg = true
+ get_scheule_data(false)
+ end
end
end
diff --git a/app/controllers/conference_administration_controller.rb b/app/controllers/conference_administration_controller.rb
index e64d547..193edb3 100644
--- a/app/controllers/conference_administration_controller.rb
+++ b/app/controllers/conference_administration_controller.rb
@@ -62,7 +62,10 @@ class ConferenceAdministrationController < ApplicationController
set_flash_messages
# redirect to the step unless the method handled redirection itself
- unless self.send(method_name)
+ case self.send(method_name)
+ when true
+ administration_step(@admin_step)
+ when false
redirect_to administration_step_path(@this_conference.slug, @admin_step)
end
end
@@ -100,6 +103,9 @@ class ConferenceAdministrationController < ApplicationController
end
def administrate_broadcast
+ if @this_conference.start_date.blank? || @this_conference.end_date.blank?
+ @warning_message = :no_date_warning
+ end
end
def administrate_broadcast_sent
@@ -120,6 +126,9 @@ class ConferenceAdministrationController < ApplicationController
end
def administrate_registration_status
+ if @this_conference.start_date.blank? || @this_conference.end_date.blank?
+ @warning_message = :no_date_warning
+ end
end
def administrate_organizations
@@ -165,6 +174,11 @@ class ConferenceAdministrationController < ApplicationController
end
def administrate_registrations
+ if @this_conference.start_date.blank? || @this_conference.end_date.blank?
+ @warning_message = :no_date_warning
+ return
+ end
+
get_stats(!request.format.xlsx?)
if request.format.xlsx?
@@ -200,6 +214,11 @@ class ConferenceAdministrationController < ApplicationController
end
def administrate_stats
+ if @this_conference.start_date.blank? || @this_conference.end_date.blank?
+ @warning_message = :no_date_warning
+ return
+ end
+
get_stats(!request.format.xlsx?)
if request.format.xlsx?
@@ -736,7 +755,7 @@ class ConferenceAdministrationController < ApplicationController
end
else
do_404
- return true
+ return nil
end
return false
@@ -945,7 +964,7 @@ class ConferenceAdministrationController < ApplicationController
do_404
end
- return true
+ return nil
end
def admin_update_housing
@@ -985,7 +1004,7 @@ class ConferenceAdministrationController < ApplicationController
do_404
end
- return true
+ return nil
end
def admin_update_broadcast
@@ -1007,7 +1026,7 @@ class ConferenceAdministrationController < ApplicationController
end
end
redirect_to administration_step_path(@this_conference.slug, :broadcast_sent)
- return true
+ return nil
elsif params[:button] == 'preview'
@send_to_count = view_context.broadcast_to(@send_to).size
@broadcast_step = :preview
@@ -1024,7 +1043,7 @@ class ConferenceAdministrationController < ApplicationController
end
@send_to_count = view_context.broadcast_to(@send_to).size
end
- return false
+ return true
end
def admin_update_locations
@@ -1087,14 +1106,14 @@ class ConferenceAdministrationController < ApplicationController
end
do_404
- return true
+ return nil
end
def admin_update_events
case params[:button]
when 'edit'
redirect_to edit_event_path(@this_conference.slug, params[:id])
- return true
+ return nil
when 'save'
if params[:id].present?
event = Event.find_by!(conference_id: @this_conference.id, id: params[:id])
@@ -1124,7 +1143,7 @@ class ConferenceAdministrationController < ApplicationController
end
do_404
- return true
+ return nil
end
def admin_update_workshop_times
@@ -1141,7 +1160,7 @@ class ConferenceAdministrationController < ApplicationController
end
do_404
- return true
+ return nil
end
def admin_update_schedule
@@ -1155,7 +1174,6 @@ class ConferenceAdministrationController < ApplicationController
@entire_page = false
get_scheule_data
render partial: 'schedule'
- return true
when 'get-workshop-list'
get_scheule_data(true)
@@ -1171,7 +1189,6 @@ class ConferenceAdministrationController < ApplicationController
end
render partial: 'select_workshop_table'
- return true
when 'set-workshop'
workshop = Workshop.find_by!(conference_id: @this_conference.id, id: params[:workshop].to_i)
workshop.event_location_id = params[:location]
@@ -1183,11 +1200,11 @@ class ConferenceAdministrationController < ApplicationController
get_scheule_data
render partial: 'schedule'
- return true
+ else
+ do_404
end
- do_404
- return true
+ return nil
end
def admin_update_schedule
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 1fbd759..9c9797b 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -991,7 +991,8 @@ module ApplicationHelper
def administration_sub_steps
{
location_edit: :locations,
- event_edit: :events
+ event_edit: :events,
+ broadcast_sent: :broadcast
}
end
diff --git a/app/models/event_location.rb b/app/models/event_location.rb
index bb09ffb..a179995 100644
--- a/app/models/event_location.rb
+++ b/app/models/event_location.rb
@@ -4,22 +4,21 @@ require 'geocoder/railtie'
Geocoder::Railtie.insert
class EventLocation < ActiveRecord::Base
- belongs_to :conference
- geocoded_by :full_address
+ belongs_to :conference
+ geocoded_by :full_address
- reverse_geocoded_by :latitude, :longitude, :address => :full_address
- after_validation :geocode, if: ->(obj){ obj.address_changed? }
+ reverse_geocoded_by :latitude, :longitude, :address => :full_address
+ after_validation :geocode, if: ->(obj){ obj.address_changed? }
- def full_address
- l = conference.location
- [address, l.city, l.territory, l.country].join(', ')
- end
+ def full_address
+ [address, conference.city.city, conference.city.territory, conference.city.country].join(', ')
+ end
- def self.all_spaces
- Workshop.all_spaces + [:event_space]
- end
+ def self.all_spaces
+ Workshop.all_spaces + [:event_space]
+ end
- def self.all_amenities
- Workshop.all_needs
- end
+ def self.all_amenities
+ Workshop.all_needs
+ end
end
diff --git a/app/views/application/home.html.haml b/app/views/application/home.html.haml
index 8e827c1..4d3d522 100644
--- a/app/views/application/home.html.haml
+++ b/app/views/application/home.html.haml
@@ -1,5 +1,5 @@
- content_for :og_image do
- = @conference.poster.full.url || image_path('default_poster.jpg')
-- if @conferences
+ = (@conference.present? ? @conference.poster.full.url : nil) || image_path('default_poster.jpg')
+- if @conferences.present?
- @conferences.each do | conference |
= render 'conferences/conference', conference: conference, links: [ :read_more, :register ]
diff --git a/app/views/conference_administration/_broadcast.html.haml b/app/views/conference_administration/_broadcast.html.haml
index 2990e25..ff1ae50 100644
--- a/app/views/conference_administration/_broadcast.html.haml
+++ b/app/views/conference_administration/_broadcast.html.haml
@@ -1,23 +1,27 @@
-= columns(medium: 12) do
- = admin_update_form do
- - if @broadcast_step == :preview || @broadcast_step == :test
- = hidden_field_tag :subject, @subject
- = hidden_field_tag :body, @body
- = hidden_field_tag :send_to, @send_to
- - if @broadcast_step == :preview
- %p= _'articles.conference_registration.paragraphs.admin.broadcast.test', vars: { send_to_count: "#{(@send_to_count || 0)}".html_safe }
+- if @warning_message
+ = columns(medium: 12) do
+ .warning-info=_"articles.admin.registrations.#{@warning_message}"
+- else
+ = columns(medium: 12) do
+ = admin_update_form do
+ - if @broadcast_step == :preview || @broadcast_step == :test
+ = hidden_field_tag :subject, @subject
+ = hidden_field_tag :body, @body
+ = hidden_field_tag :send_to, @send_to
+ - if @broadcast_step == :preview
+ %p= _'articles.conference_registration.paragraphs.admin.broadcast.test', vars: { send_to_count: "#{(@send_to_count || 0)}".html_safe }
+ - else
+ .warning-info.make-room= _'articles.conference_registration.paragraphs.admin.broadcast.preview', vars: { send_to_count: "#{(@send_to_count || 0)}".html_safe }
+ .test-preview
+ %h3=@subject
+ = richtext @body, 4
+ .actions.right
+ = button_tag :test, value: :test, class: :secondary if @broadcast_step == :preview
+ = button_with_confirmation :send, (_'modals.admin.broadcast.confirm', vars: { number: "#{(@send_to_count || 0)}".html_safe }), value: :send, class: :delete if @broadcast_step == :test
+ = button_tag :edit, value: :edit
- else
- .warning-info.make-room= _'articles.conference_registration.paragraphs.admin.broadcast.preview', vars: { send_to_count: "#{(@send_to_count || 0)}".html_safe }
- .test-preview
- %h3=@subject
- = richtext @body, 4
- .actions.right
- = button_tag :test, value: :test, class: :secondary if @broadcast_step == :preview
- = button_with_confirmation :send, (_'modals.admin.broadcast.confirm', vars: { number: "#{(@send_to_count || 0)}".html_safe }), value: :send, class: :delete if @broadcast_step == :test
- = button_tag :edit, value: :edit
- - else
- = selectfield :send_to, nil, broadcast_options, full: true
- = textfield :subject, @subject, required: true, big: true
- = textarea :body, @body, lang: @this_conference.locale, edit_on: :focus
- .actions.right
- = button_tag :preview, value: :preview
+ = selectfield :send_to, nil, broadcast_options, full: true
+ = textfield :subject, @subject, required: true, big: true
+ = textarea :body, @body, lang: @this_conference.locale, edit_on: :focus
+ .actions.right
+ = button_tag :preview, value: :preview
diff --git a/app/views/conference_administration/_registration_status.html.haml b/app/views/conference_administration/_registration_status.html.haml
index 7558d58..7fef8de 100644
--- a/app/views/conference_administration/_registration_status.html.haml
+++ b/app/views/conference_administration/_registration_status.html.haml
@@ -1,5 +1,9 @@
-= columns(medium: 12) do
- = form_tag administration_update_path(@this_conference.slug, @admin_step) do
- = selectfield :registration_status, @this_conference.registration_status || 'closed', registration_status_options_list, inline_label: true
- .actions.left
- = button_tag :save, value: :save
+- if @warning_message
+ = columns(medium: 12) do
+ .warning-info=_"articles.admin.registrations.#{@warning_message}"
+- else
+ = columns(medium: 12) do
+ = form_tag administration_update_path(@this_conference.slug, @admin_step) do
+ = selectfield :registration_status, @this_conference.registration_status || 'closed', registration_status_options_list, inline_label: true
+ .actions.left
+ = button_tag :save, value: :save
diff --git a/app/views/conference_administration/_registrations.html.haml b/app/views/conference_administration/_registrations.html.haml
index 25f07e0..c6a24fa 100644
--- a/app/views/conference_administration/_registrations.html.haml
+++ b/app/views/conference_administration/_registrations.html.haml
@@ -1,17 +1,21 @@
-- add_inline_script :registrations
-= columns(medium: 12) do
- .goes-fullscreen#registrations-table
- .flex-column
- = searchfield :search, nil, big: true, stretch: true
- %a.button{data: { expands: 'registrations-table' }}='expand'
- %a.button.delete{data: { contracts: 'registrations-table' }}='close'
- %a.button.modify{data: { 'opens-modal': 'new-registration' }}='+'
- .table-scroller
- = html_table @excel_data, registrations_table_options
- = admin_update_form id: 'new-registration', class: 'modal-edit' do
- .modal-edit-overlay{data: { 'closes-modal': 'new-registration' }}
- .modal-edit-content
- = html_edit_table @excel_data, registrations_edit_table_options
- .actions.right
- %a.button.subdued{data: { 'closes-modal': 'new-registration' }}='Cancel'
- = button_tag :save, value: :save, class: :modify
+- if @warning_message
+ = columns(medium: 12) do
+ .warning-info=_"articles.admin.registrations.#{@warning_message}"
+- else
+ - add_inline_script :registrations
+ = columns(medium: 12) do
+ .goes-fullscreen#registrations-table
+ .flex-column
+ = searchfield :search, nil, big: true, stretch: true
+ %a.button{data: { expands: 'registrations-table' }}='expand'
+ %a.button.delete{data: { contracts: 'registrations-table' }}='close'
+ %a.button.modify{data: { 'opens-modal': 'new-registration' }}='+'
+ .table-scroller
+ = html_table @excel_data, registrations_table_options
+ = admin_update_form id: 'new-registration', class: 'modal-edit' do
+ .modal-edit-overlay{data: { 'closes-modal': 'new-registration' }}
+ .modal-edit-content
+ = html_edit_table @excel_data, registrations_edit_table_options
+ .actions.right
+ %a.button.subdued{data: { 'closes-modal': 'new-registration' }}='Cancel'
+ = button_tag :save, value: :save, class: :modify
diff --git a/app/views/conference_administration/_stats.html.haml b/app/views/conference_administration/_stats.html.haml
index 5cd1972..da621f1 100644
--- a/app/views/conference_administration/_stats.html.haml
+++ b/app/views/conference_administration/_stats.html.haml
@@ -1,21 +1,25 @@
-= columns(medium: 12) do
- .details
- = data_set(:h3, 'articles.admin.stats.headings.completed_registrations') do
- = (@completed_registrations || 0).to_s
- = data_set(:h3, 'articles.admin.stats.headings.incomplete_registrations') do
- = ((@registration_count - @completed_registrations) || 0).to_s
- = data_set(:h3, 'articles.admin.stats.headings.bikes') do
- = (@completed_registrations || 0) > 0 ? "#{@bikes} (#{number_to_percentage(@bikes / @completed_registrations.to_f * 100.0)})" : "0"
- = data_set(:h3, 'articles.admin.stats.headings.food.meat') do
- = (@food[:all] || 0) > 0 ? "#{@food[:meat]} (#{number_to_percentage(@food[:meat] / @food[:all].to_f * 100.0)})" : "0"
- = data_set(:h3, 'articles.admin.stats.headings.food.vegetarian') do
- = (@food[:all] || 0) > 0 ? "#{@food[:vegetarian]} (#{number_to_percentage(@food[:vegetarian] / @food[:all].to_f * 100.0)})" : "0"
- = data_set(:h3, 'articles.admin.stats.headings.food.vegan') do
- = (@food[:all] || 0) > 0 ? "#{@food[:vegan]} (#{number_to_percentage(@food[:vegan] / @food[:all].to_f * 100.0)})" : "0"
- = data_set(:h3, 'articles.admin.stats.headings.donation_count') do
- = (@completed_registrations || 0) > 0 ? "#{@donation_count} (#{number_to_percentage(@donation_count / @completed_registrations.to_f * 100.0)})" : "0"
- = data_set(:h3, 'articles.admin.stats.headings.donation_total') do
- = "$#{@donations || 0.00}"
- .actions
- = link_to (_'links.download.Excel'), administration_step_path(@this_conference.slug, :stats, :format => :xlsx), class: [:button, :download]
- = link_to (_'links.download.Organizations_Excel'), administration_step_path(@this_conference.slug, :organizations, :format => :xlsx), class: [:button, :download, :subdued]
+- if @warning_message
+ = columns(medium: 12) do
+ .warning-info=_"articles.admin.registrations.#{@warning_message}"
+- else
+ = columns(medium: 12) do
+ .details
+ = data_set(:h3, 'articles.admin.stats.headings.completed_registrations') do
+ = (@completed_registrations || 0).to_s
+ = data_set(:h3, 'articles.admin.stats.headings.incomplete_registrations') do
+ = ((@registration_count - @completed_registrations) || 0).to_s
+ = data_set(:h3, 'articles.admin.stats.headings.bikes') do
+ = (@completed_registrations || 0) > 0 ? "#{@bikes} (#{number_to_percentage(@bikes / @completed_registrations.to_f * 100.0)})" : "0"
+ = data_set(:h3, 'articles.admin.stats.headings.food.meat') do
+ = (@food[:all] || 0) > 0 ? "#{@food[:meat]} (#{number_to_percentage(@food[:meat] / @food[:all].to_f * 100.0)})" : "0"
+ = data_set(:h3, 'articles.admin.stats.headings.food.vegetarian') do
+ = (@food[:all] || 0) > 0 ? "#{@food[:vegetarian]} (#{number_to_percentage(@food[:vegetarian] / @food[:all].to_f * 100.0)})" : "0"
+ = data_set(:h3, 'articles.admin.stats.headings.food.vegan') do
+ = (@food[:all] || 0) > 0 ? "#{@food[:vegan]} (#{number_to_percentage(@food[:vegan] / @food[:all].to_f * 100.0)})" : "0"
+ = data_set(:h3, 'articles.admin.stats.headings.donation_count') do
+ = (@completed_registrations || 0) > 0 ? "#{@donation_count} (#{number_to_percentage(@donation_count / @completed_registrations.to_f * 100.0)})" : "0"
+ = data_set(:h3, 'articles.admin.stats.headings.donation_total') do
+ = "$#{@donations || 0.00}"
+ .actions
+ = link_to (_'links.download.Excel'), administration_step_path(@this_conference.slug, :stats, :format => :xlsx), class: [:button, :download]
+ = link_to (_'links.download.Organizations_Excel'), administration_step_path(@this_conference.slug, :organizations, :format => :xlsx), class: [:button, :download, :subdued]
diff --git a/app/views/conference_administration/administration_step.html.haml b/app/views/conference_administration/administration_step.html.haml
index b35ea89..b45ea15 100644
--- a/app/views/conference_administration/administration_step.html.haml
+++ b/app/views/conference_administration/administration_step.html.haml
@@ -35,4 +35,4 @@
= columns(medium: 12) do
%p=((_"articles.admin.#{@admin_group}.descriptions.#{@admin_step}", :s)) unless @hide_description === true
= row do
- = render @admin_step
+ = render @admin_step.to_s
diff --git a/app/views/conferences/stats.html.haml b/app/views/conference_administration/stats.html.haml
similarity index 97%
rename from app/views/conferences/stats.html.haml
rename to app/views/conference_administration/stats.html.haml
index 98e9848..ba4bd86 100644
--- a/app/views/conferences/stats.html.haml
+++ b/app/views/conference_administration/stats.html.haml
@@ -1,63 +1,63 @@
-= render 'page_header', :page_key => 'Registration_Stats'
-%article
- = row do
- = columns(medium: 12) do
- %h2=_'articles.conference_registration.headings.Stats'
- %p=_'articles.conference_registration.paragraphs.Stats', :p
- = link_to (_'links.download.Excel','Download Data in Excel Format'), stats_path(@this_conference.slug, :format => :xls), {:class => :button}
- = columns(medium: 6) do
- %ul.stats
- %li
- %h3=_'articles.conference_registration.terms.Total_Registrations'
- .stat.important=_!@total_registrations
- %li.money
- %h3=_'articles.conference_registration.terms.Total_Donations'
- .stat=money @total_donations
- %li
- %h3=_'articles.conference_registration.terms.Donation_Count'
- .stat
- = _!"#{@donation_count} / #{@total_registrations}"
- %li
- %h3=_'articles.conference_registration.terms.Housing'
- .breakdown
- - @housing.each do |h, v|
- - unless h == :none
- .stat-with-label
- .label=_"articles.conference_registration.questions.housing.#{h}"
- .stat=_!v
- %li
- %h3=_'articles.conference_registration.terms.Bikes'
- .breakdown
- .stat=_!"#{@bike_count} / #{@total_registrations}"
- - @bikes.each do |h, v|
- - unless h == :none
- .stat-with-label
- .label=_"articles.conference_registration.questions.bike.#{h}"
- .stat.percent=_!percent(v.to_f / @bike_count)
- %li
- %h3=_'articles.conference_registration.terms.Food'
- .breakdown
- - @food.each do |h, v|
- .stat-with-label
- .label=_"articles.conference_registration.questions.food.#{h}"
- .stat.percent=_!percent(v.to_f / @total_registrations)
- %li
- %h3=_'articles.conference_registration.terms.Languages'
- .breakdown
- - @languages.each do |h, v|
- .stat-with-label
- .label=_"languages.#{h}"
- .stat.percent=_!percent(v.to_f / @total_registrations)
- = columns(medium: 6) do
- .allergies
- %h3=_'articles.conference_registration.headings.Allergies'
- %ul
- - @allergies.each do |a|
- %li
- %p=_!a
- .other
- %h3=_'articles.conference_registration.headings.other'
- %ul
- - @other.each do |o|
- %li
- %p=_!o
+= render 'page_header', :page_key => 'Registration_Stats'
+%article
+ = row do
+ = columns(medium: 12) do
+ %h2=_'articles.conference_registration.headings.Stats'
+ %p=_'articles.conference_registration.paragraphs.Stats', :p
+ = link_to (_'links.download.Excel','Download Data in Excel Format'), stats_path(@this_conference.slug, :format => :xls), {:class => :button}
+ = columns(medium: 6) do
+ %ul.stats
+ %li
+ %h3=_'articles.conference_registration.terms.Total_Registrations'
+ .stat.important=_!@total_registrations
+ %li.money
+ %h3=_'articles.conference_registration.terms.Total_Donations'
+ .stat=money @total_donations
+ %li
+ %h3=_'articles.conference_registration.terms.Donation_Count'
+ .stat
+ = _!"#{@donation_count} / #{@total_registrations}"
+ %li
+ %h3=_'articles.conference_registration.terms.Housing'
+ .breakdown
+ - @housing.each do |h, v|
+ - unless h == :none
+ .stat-with-label
+ .label=_"articles.conference_registration.questions.housing.#{h}"
+ .stat=_!v
+ %li
+ %h3=_'articles.conference_registration.terms.Bikes'
+ .breakdown
+ .stat=_!"#{@bike_count} / #{@total_registrations}"
+ - @bikes.each do |h, v|
+ - unless h == :none
+ .stat-with-label
+ .label=_"articles.conference_registration.questions.bike.#{h}"
+ .stat.percent=_!percent(v.to_f / @bike_count)
+ %li
+ %h3=_'articles.conference_registration.terms.Food'
+ .breakdown
+ - @food.each do |h, v|
+ .stat-with-label
+ .label=_"articles.conference_registration.questions.food.#{h}"
+ .stat.percent=_!percent(v.to_f / @total_registrations)
+ %li
+ %h3=_'articles.conference_registration.terms.Languages'
+ .breakdown
+ - @languages.each do |h, v|
+ .stat-with-label
+ .label=_"languages.#{h}"
+ .stat.percent=_!percent(v.to_f / @total_registrations)
+ = columns(medium: 6) do
+ .allergies
+ %h3=_'articles.conference_registration.headings.Allergies'
+ %ul
+ - @allergies.each do |a|
+ %li
+ %p=_!a
+ .other
+ %h3=_'articles.conference_registration.headings.other'
+ %ul
+ - @other.each do |o|
+ %li
+ %p=_!o
diff --git a/app/views/conferences/stats.xlsx.haml b/app/views/conference_administration/stats.xlsx.haml
similarity index 96%
rename from app/views/conferences/stats.xlsx.haml
rename to app/views/conference_administration/stats.xlsx.haml
index 7490ac9..54d73d1 100644
--- a/app/views/conferences/stats.xlsx.haml
+++ b/app/views/conference_administration/stats.xlsx.haml
@@ -1 +1 @@
-= excel_table(@excel_data)
+= excel_table(@excel_data)
diff --git a/config/environments/preview.rb b/config/environments/preview.rb
index 8c77f27..f39d999 100644
--- a/config/environments/preview.rb
+++ b/config/environments/preview.rb
@@ -1,105 +1,104 @@
BikeBike::Application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
+ # Settings specified here will take precedence over those in config/application.rb.
- # Code is not reloaded between requests.
- config.cache_classes = true
+ # Code is not reloaded between requests.
+ config.cache_classes = true
- # Eager load code on boot. This eager loads most of Rails and
- # your application in memory, allowing both thread web servers
- # and those relying on copy on write to perform better.
- # Rake tasks automatically ignore this option for performance.
- config.eager_load = true
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both thread web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
- # Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
- config.action_controller.perform_caching = true
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
- # Enable Rack::Cache to put a simple HTTP cache in front of your application
- # Add `rack-cache` to your Gemfile before enabling this.
- # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
- # config.action_dispatch.rack_cache = true
+ # Enable Rack::Cache to put a simple HTTP cache in front of your application
+ # Add `rack-cache` to your Gemfile before enabling this.
+ # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
+ # config.action_dispatch.rack_cache = true
- # Disable Rails's static asset server (Apache or nginx will already do this).
- config.serve_static_files = true
+ # Disable Rails's static asset server (Apache or nginx will already do this).
+ config.serve_static_files = true
- # Compress JavaScripts and CSS.
- config.assets.js_compressor = :uglifier
- # config.assets.css_compressor = :sass
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
- # Do not fallback to assets pipeline if a precompiled asset is missed.
- #config.assets.compile = true
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ #config.assets.compile = true
- # Generate digests for assets URLs.
- config.assets.digest = true
+ # Generate digests for assets URLs.
+ config.assets.digest = true
- # Version of your assets, change this if you want to expire all your assets.
- config.assets.version = '1.0101'
+ # Version of your assets, change this if you want to expire all your assets.
+ config.assets.version = '1.0101'
- # Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
- # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- #config.force_ssl = true
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ #config.force_ssl = true
- # Set to :debug to see everything in the log.
- config.log_level = :info
+ # Set to :debug to see everything in the log.
+ config.log_level = :info
- #config.cache_classes = true
- #config.serve_static_assets = true
- #config.assets.compile = true
- # config.assets.digest = true
+ #config.cache_classes = true
+ #config.serve_static_assets = true
+ #config.assets.compile = true
+ # config.assets.digest = true
- # Prepend all log lines with the following tags.
- # config.log_tags = [ :subdomain, :uuid ]
+ # Prepend all log lines with the following tags.
+ # config.log_tags = [ :subdomain, :uuid ]
- # Use a different logger for distributed setups.
- # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+ # Use a different logger for distributed setups.
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
- # Use a different cache store in production.
- # config.cache_store = :mem_cache_store
+ # Use a different cache store in production.
+ # config.cache_store = :mem_cache_store
- # Enable serving of images, stylesheets, and JavaScripts from an asset server.
- # config.action_controller.asset_host = "http://assets.example.com"
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.action_controller.asset_host = "http://assets.example.com"
- # Precompile additional assets.
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
- # config.assets.precompile += %w( search.js )
- config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
- #config.action_controller.asset_host = "https://preview-cdn.bikebike.org"
+ # Precompile additional assets.
+ # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
+ # config.assets.precompile += %w( search.js )
+ config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
+ #config.action_controller.asset_host = "https://preview-cdn.bikebike.org"
- # Ignore bad email addresses and do not raise email delivery errors.
- # Set this to true and configure the email server for immediate delivery to raise delivery errors.
- # config.action_mailer.raise_delivery_errors = false
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
- # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
- # the I18n.default_locale when a translation can not be found).
- config.i18n.fallbacks = true
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation can not be found).
+ config.i18n.fallbacks = true
- # Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
+ # Send deprecation notices to registered listeners.
+ config.active_support.deprecation = :notify
- # Disable automatic flushing of the log to improve performance.
- # config.autoflush_log = false
+ # Disable automatic flushing of the log to improve performance.
+ # config.autoflush_log = false
- # Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
- config.action_mailer.delivery_method = :smtp
- config.action_mailer.smtp_settings = {
- :address => 'mail.bikebike.org',
- :domain => 'preview.bikebike.org',
- :port => 587,
- :authentication => :plain,
- :enable_starttls_auto => true,
- :openssl_verify_mode => 'none',
- :user_name => 'info@preview.bikebike.org',
- :password => 'test'
- }
- config.action_mailer.raise_delivery_errors = true
- config.action_mailer.perform_deliveries = true
+ config.action_mailer.delivery_method = :smtp
+ config.action_mailer.smtp_settings = {
+ :address => 'smtp.gmail.com',
+ :domain => 'localhost:3000',
+ :port => 587,
+ :authentication => :plain,
+ :enable_starttls_auto => true,
+ :user_name => ENV['MAILER_USER'],
+ :password => ENV['MAILER_PASSWORD']
+ }
+ config.action_mailer.raise_delivery_errors = true
+ config.action_mailer.perform_deliveries = true
- I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
- I18n.config.subdomain_format = 'preview-%'
- I18n.config.host_locale_regex = /^preview\-([a-z]{2})\.[^\.]+\..*$/
+ I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
+ I18n.config.subdomain_format = 'preview-%'
+ I18n.config.host_locale_regex = /^preview\-([a-z]{2})\.[^\.]+\..*$/
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index c10c435..82fd268 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,103 +1,102 @@
BikeBike::Application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- # Code is not reloaded between requests.
- config.cache_classes = true
-
- # Eager load code on boot. This eager loads most of Rails and
- # your application in memory, allowing both thread web servers
- # and those relying on copy on write to perform better.
- # Rake tasks automatically ignore this option for performance.
- config.eager_load = true
-
- # Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
- config.action_controller.perform_caching = true
-
- # Enable Rack::Cache to put a simple HTTP cache in front of your application
- # Add `rack-cache` to your Gemfile before enabling this.
- # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
- # config.action_dispatch.rack_cache = true
-
- # Disable Rails's static asset server (Apache or nginx will already do this).
- config.serve_static_files = true
-
- # Compress JavaScripts and CSS.
- config.assets.js_compressor = :uglifier
- # config.assets.css_compressor = :sass
-
- # Do not fallback to assets pipeline if a precompiled asset is missed.
- #config.assets.compile = true
-
- # Generate digests for assets URLs.
- config.assets.digest = true
-
- # Version of your assets, change this if you want to expire all your assets.
- config.assets.version = '1.01'
-
- # Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
-
- # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- #config.force_ssl = true
-
- # Set to :debug to see everything in the log.
- config.log_level = :info
-
- #config.cache_classes = true
- #config.serve_static_assets = true
- #config.assets.compile = true
- # config.assets.digest = true
-
- # Prepend all log lines with the following tags.
- # config.log_tags = [ :subdomain, :uuid ]
-
- # Use a different logger for distributed setups.
- # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
-
- # Use a different cache store in production.
- # config.cache_store = :mem_cache_store
-
- # Enable serving of images, stylesheets, and JavaScripts from an asset server.
- # config.action_controller.asset_host = "http://assets.example.com"
-
- # Precompile additional assets.
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
- # config.assets.precompile += %w( search.js )
- #config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
- config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.svg)
- #config.action_controller.asset_host = "https://cdn.bikebike.org"
-
- # Ignore bad email addresses and do not raise email delivery errors.
- # Set this to true and configure the email server for immediate delivery to raise delivery errors.
- # config.action_mailer.raise_delivery_errors = false
-
- # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
- # the I18n.default_locale when a translation can not be found).
- config.i18n.fallbacks = true
-
- # Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
-
- # Disable automatic flushing of the log to improve performance.
- # config.autoflush_log = false
-
- # Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
-
- config.action_mailer.delivery_method = :smtp
- config.action_mailer.smtp_settings = {
- :address => 'mail.bikebike.org',
- :domain => 'preview.bikebike.org',
- :port => 587,
- :authentication => :plain,
- :enable_starttls_auto => true,
- :openssl_verify_mode => 'none',
- :user_name => 'info@preview.bikebike.org',
- :password => 'test'
- }
- config.action_mailer.raise_delivery_errors = true
- config.action_mailer.perform_deliveries = true
- I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # Code is not reloaded between requests.
+ config.cache_classes = true
+
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both thread web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
+
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # Enable Rack::Cache to put a simple HTTP cache in front of your application
+ # Add `rack-cache` to your Gemfile before enabling this.
+ # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
+ # config.action_dispatch.rack_cache = true
+
+ # Disable Rails's static asset server (Apache or nginx will already do this).
+ config.serve_static_files = true
+
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
+
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ #config.assets.compile = true
+
+ # Generate digests for assets URLs.
+ config.assets.digest = true
+
+ # Version of your assets, change this if you want to expire all your assets.
+ config.assets.version = '1.01'
+
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
+
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ #config.force_ssl = true
+
+ # Set to :debug to see everything in the log.
+ config.log_level = :info
+
+ #config.cache_classes = true
+ #config.serve_static_assets = true
+ #config.assets.compile = true
+ # config.assets.digest = true
+
+ # Prepend all log lines with the following tags.
+ # config.log_tags = [ :subdomain, :uuid ]
+
+ # Use a different logger for distributed setups.
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+
+ # Use a different cache store in production.
+ # config.cache_store = :mem_cache_store
+
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.action_controller.asset_host = "http://assets.example.com"
+
+ # Precompile additional assets.
+ # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
+ # config.assets.precompile += %w( search.js )
+ #config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
+ config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.svg)
+ #config.action_controller.asset_host = "https://cdn.bikebike.org"
+
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation can not be found).
+ config.i18n.fallbacks = true
+
+ # Send deprecation notices to registered listeners.
+ config.active_support.deprecation = :notify
+
+ # Disable automatic flushing of the log to improve performance.
+ # config.autoflush_log = false
+
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
+
+ config.action_mailer.delivery_method = :smtp
+ config.action_mailer.smtp_settings = {
+ :address => 'smtp.gmail.com',
+ :domain => 'localhost:3000',
+ :port => 587,
+ :authentication => :plain,
+ :enable_starttls_auto => true,
+ :user_name => ENV['MAILER_USER'],
+ :password => ENV['MAILER_PASSWORD']
+ }
+ config.action_mailer.raise_delivery_errors = true
+ config.action_mailer.perform_deliveries = true
+ I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 7183d34..3bb98c0 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -961,6 +961,8 @@ en:
completed_registrations: Number of registrations
incomplete_registrations: Incomplete registrations
Registrations: Registrations
+ registrations:
+ no_date_warning: Before users can register, you must first set your conference start and end dates.
meals:
description: On this page you can schedule the meals that you will be serving.
no_locations_warning: Before you can add meals, you must first add locations.
@@ -1054,12 +1056,14 @@ en:
stats: Statistics
registrations: Modify Registrations
broadcast: Contact Users
+ broadcast_sent: You email has been dispatched
description: Open or close registration, view registration statistics, modify information subbmitted by registratnts and contact users.
descriptions:
registration_status: Open or close registration to your conference.
stats: View a breakdown of statictics, how many users have registered, how much money have been collected, etc.
registrations: View and edit all data collected through the registration process.
broadcast: Send emails to targeted subsets of users.
+ broadcast_sent: Your email has been queued to send, depending on the number of users you have sent to, it may take several hours to send to everyone.
broadcast:
heading: Broadcast
description: The broadcast tool is used to contact users through email. You can send messages en masse to select groups of users.
diff --git a/db/schema.rb b/db/schema.rb
index 0edeb71..f2e36ba 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -16,15 +16,6 @@ ActiveRecord::Schema.define(version: 20170111172147) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
- create_table "applications", force: :cascade do |t|
- t.string "slug"
- t.string "name"
- t.string "path"
- t.string "url"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- end
-
create_table "authentications", force: :cascade do |t|
t.integer "user_id", null: false
t.string "provider", null: false