Browse Source

Moved to GMail and fixed administration errors

development
Godwin 7 years ago
parent
commit
888f186a34
  1. 87
      Gemfile
  2. 4
      app/assets/stylesheets/bumbleberry-settings.json
  3. 12
      app/controllers/application_controller.rb
  4. 47
      app/controllers/conference_administration_controller.rb
  5. 3
      app/helpers/application_helper.rb
  6. 27
      app/models/event_location.rb
  7. 4
      app/views/application/home.html.haml
  8. 48
      app/views/conference_administration/_broadcast.html.haml
  9. 14
      app/views/conference_administration/_registration_status.html.haml
  10. 38
      app/views/conference_administration/_registrations.html.haml
  11. 46
      app/views/conference_administration/_stats.html.haml
  12. 2
      app/views/conference_administration/administration_step.html.haml
  13. 126
      app/views/conference_administration/stats.html.haml
  14. 2
      app/views/conference_administration/stats.xlsx.haml
  15. 155
      config/environments/preview.rb
  16. 201
      config/environments/production.rb
  17. 4
      config/locales/en.yml
  18. 9
      db/schema.rb

87
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

4
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"],

12
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

47
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

3
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

27
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

4
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 ]

48
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: "<strong>#{(@send_to_count || 0)}</strong>".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: "<strong>#{(@send_to_count || 0)}</strong>".html_safe }
- else
.warning-info.make-room= _'articles.conference_registration.paragraphs.admin.broadcast.preview', vars: { send_to_count: "<strong>#{(@send_to_count || 0)}</strong>".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: "<strong>#{(@send_to_count || 0)}</strong>".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: "<strong>#{(@send_to_count || 0)}</strong>".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: "<strong>#{(@send_to_count || 0)}</strong>".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

14
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

38
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

46
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]

2
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

126
app/views/conferences/stats.html.haml → 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

2
app/views/conferences/stats.xlsx.haml → app/views/conference_administration/stats.xlsx.haml

@ -1 +1 @@
= excel_table(@excel_data)
= excel_table(@excel_data)

155
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

201
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

4
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.

9
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

Loading…
Cancel
Save