Browse Source

Moved to GMail and fixed administration errors

development
Godwin 8 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 '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 '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 'rack-mini-profiler'
gem 'haml' gem 'haml'
gem 'nokogiri', '~> 1.6.8.rc2' gem 'nokogiri', '~> 1.6.8.rc2'
if Dir.exists?('../lingua_franca') if Dir.exists?('../lingua_franca')
gem 'lingua_franca', :path => '../lingua_franca' gem 'lingua_franca', :path => '../lingua_franca'
else 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 end
gem 'tzinfo-data' gem 'tzinfo-data'
@ -21,15 +24,15 @@ gem 'sass'
gem 'sass-rails' gem 'sass-rails'
if Dir.exists?('../bumbleberry') if Dir.exists?('../bumbleberry')
gem 'bumbleberry', :path => "../bumbleberry" gem 'bumbleberry', :path => "../bumbleberry"
else else
gem 'bumbleberry', :git => 'git://github.com/bumbleberry/bumbleberry.git' gem 'bumbleberry', :git => 'git://github.com/bumbleberry/bumbleberry.git'
end end
if Dir.exists?('../paypal-express') if Dir.exists?('../paypal-express')
gem 'paypal-express', :path => "../paypal-express" gem 'paypal-express', :path => "../paypal-express"
else else
gem 'paypal-express', :git => 'git://github.com/bikebike/paypal-express.git' gem 'paypal-express', :git => 'git://github.com/bikebike/paypal-express.git'
end end
gem 'uglifier', '>= 1.3.0' gem 'uglifier', '>= 1.3.0'
@ -51,52 +54,52 @@ gem 'launchy'
gem 'to_spreadsheet', :git => 'git://github.com/glebm/to_spreadsheet.git' gem 'to_spreadsheet', :git => 'git://github.com/glebm/to_spreadsheet.git'
group :test do group :test do
gem 'rspec' gem 'rspec'
gem 'rspec-rails' gem 'rspec-rails'
end end
group :development do group :development do
gem 'better_errors' gem 'better_errors'
gem 'binding_of_caller' gem 'binding_of_caller'
gem 'meta_request' gem 'meta_request'
gem 'capistrano', '~> 3.1' gem 'capistrano', '~> 3.1'
gem 'capistrano-rails', '~> 1.1' gem 'capistrano-rails', '~> 1.1'
gem 'capistrano-faster-assets', '~> 1.0' gem 'capistrano-faster-assets', '~> 1.0'
gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master' gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master'
gem 'thin'# , :github => 'krzcho/thin', :branch => 'master' gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
end end
group :test do group :test do
gem 'gherkin3', '>= 3.1.0' gem 'gherkin3', '>= 3.1.0'
gem 'cucumber' gem 'cucumber'
gem 'cucumber-core' gem 'cucumber-core'
gem 'cucumber-rails' gem 'cucumber-rails'
gem 'poltergeist' gem 'poltergeist'
gem 'guard-rspec' gem 'guard-rspec'
gem 'factory_girl_rails' gem 'factory_girl_rails'
gem 'coveralls', require: false gem 'coveralls', require: false
gem 'selenium-webdriver' gem 'selenium-webdriver'
gem 'simplecov', require: false gem 'simplecov', require: false
gem 'webmock', require: false gem 'webmock', require: false
gem 'database_cleaner' gem 'database_cleaner'
gem 'mocha' gem 'mocha'
end
group :staging, :production, :preview do
gem 'rails_12factor'
end end
group :production, :preview do group :production, :preview do
gem 'unicorn' gem 'rails_12factor'
gem 'daemon-spawn' gem 'daemon-spawn'
gem 'daemons' gem 'daemons'
platforms :ruby do
gem 'unicorn'
end
end end
platforms 'mswin', 'mingw' do platforms 'mswin', 'mingw' do
group :test do group :test do
gem 'wdm', '>= 0.1.0' gem 'wdm', '>= 0.1.0'
end end
end end

4
app/assets/stylesheets/bumbleberry-settings.json

@ -5,8 +5,8 @@
"chrome": ["51"] "chrome": ["51"]
}, },
"development": { "development": {
"and_chr": ["55"], "and_chr": ["56"],
"chrome": ["55"], "chrome": ["56"],
"edge": ["13"], "edge": ["13"],
"firefox": ["50"], "firefox": ["50"],
"ie": ["11"], "ie": ["11"],

12
app/controllers/application_controller.rb

@ -78,11 +78,15 @@ class ApplicationController < LinguaFrancaApplicationController
end end
def home def home
@workshops = Workshop.where(:conference_id => @conference.id) @workshops = []
if @conference.workshop_schedule_published if @conference.present?
@event_dlg = true @workshops = Workshop.where(conference_id: @conference.id)
get_scheule_data(false)
if @conference.workshop_schedule_published
@event_dlg = true
get_scheule_data(false)
end
end end
end end

47
app/controllers/conference_administration_controller.rb

@ -62,7 +62,10 @@ class ConferenceAdministrationController < ApplicationController
set_flash_messages set_flash_messages
# redirect to the step unless the method handled redirection itself # 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) redirect_to administration_step_path(@this_conference.slug, @admin_step)
end end
end end
@ -100,6 +103,9 @@ class ConferenceAdministrationController < ApplicationController
end end
def administrate_broadcast def administrate_broadcast
if @this_conference.start_date.blank? || @this_conference.end_date.blank?
@warning_message = :no_date_warning
end
end end
def administrate_broadcast_sent def administrate_broadcast_sent
@ -120,6 +126,9 @@ class ConferenceAdministrationController < ApplicationController
end end
def administrate_registration_status def administrate_registration_status
if @this_conference.start_date.blank? || @this_conference.end_date.blank?
@warning_message = :no_date_warning
end
end end
def administrate_organizations def administrate_organizations
@ -165,6 +174,11 @@ class ConferenceAdministrationController < ApplicationController
end end
def administrate_registrations 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?) get_stats(!request.format.xlsx?)
if request.format.xlsx? if request.format.xlsx?
@ -200,6 +214,11 @@ class ConferenceAdministrationController < ApplicationController
end end
def administrate_stats 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?) get_stats(!request.format.xlsx?)
if request.format.xlsx? if request.format.xlsx?
@ -736,7 +755,7 @@ class ConferenceAdministrationController < ApplicationController
end end
else else
do_404 do_404
return true return nil
end end
return false return false
@ -945,7 +964,7 @@ class ConferenceAdministrationController < ApplicationController
do_404 do_404
end end
return true return nil
end end
def admin_update_housing def admin_update_housing
@ -985,7 +1004,7 @@ class ConferenceAdministrationController < ApplicationController
do_404 do_404
end end
return true return nil
end end
def admin_update_broadcast def admin_update_broadcast
@ -1007,7 +1026,7 @@ class ConferenceAdministrationController < ApplicationController
end end
end end
redirect_to administration_step_path(@this_conference.slug, :broadcast_sent) redirect_to administration_step_path(@this_conference.slug, :broadcast_sent)
return true return nil
elsif params[:button] == 'preview' elsif params[:button] == 'preview'
@send_to_count = view_context.broadcast_to(@send_to).size @send_to_count = view_context.broadcast_to(@send_to).size
@broadcast_step = :preview @broadcast_step = :preview
@ -1024,7 +1043,7 @@ class ConferenceAdministrationController < ApplicationController
end end
@send_to_count = view_context.broadcast_to(@send_to).size @send_to_count = view_context.broadcast_to(@send_to).size
end end
return false return true
end end
def admin_update_locations def admin_update_locations
@ -1087,14 +1106,14 @@ class ConferenceAdministrationController < ApplicationController
end end
do_404 do_404
return true return nil
end end
def admin_update_events def admin_update_events
case params[:button] case params[:button]
when 'edit' when 'edit'
redirect_to edit_event_path(@this_conference.slug, params[:id]) redirect_to edit_event_path(@this_conference.slug, params[:id])
return true return nil
when 'save' when 'save'
if params[:id].present? if params[:id].present?
event = Event.find_by!(conference_id: @this_conference.id, id: params[:id]) event = Event.find_by!(conference_id: @this_conference.id, id: params[:id])
@ -1124,7 +1143,7 @@ class ConferenceAdministrationController < ApplicationController
end end
do_404 do_404
return true return nil
end end
def admin_update_workshop_times def admin_update_workshop_times
@ -1141,7 +1160,7 @@ class ConferenceAdministrationController < ApplicationController
end end
do_404 do_404
return true return nil
end end
def admin_update_schedule def admin_update_schedule
@ -1155,7 +1174,6 @@ class ConferenceAdministrationController < ApplicationController
@entire_page = false @entire_page = false
get_scheule_data get_scheule_data
render partial: 'schedule' render partial: 'schedule'
return true
when 'get-workshop-list' when 'get-workshop-list'
get_scheule_data(true) get_scheule_data(true)
@ -1171,7 +1189,6 @@ class ConferenceAdministrationController < ApplicationController
end end
render partial: 'select_workshop_table' render partial: 'select_workshop_table'
return true
when 'set-workshop' when 'set-workshop'
workshop = Workshop.find_by!(conference_id: @this_conference.id, id: params[:workshop].to_i) workshop = Workshop.find_by!(conference_id: @this_conference.id, id: params[:workshop].to_i)
workshop.event_location_id = params[:location] workshop.event_location_id = params[:location]
@ -1183,11 +1200,11 @@ class ConferenceAdministrationController < ApplicationController
get_scheule_data get_scheule_data
render partial: 'schedule' render partial: 'schedule'
return true else
do_404
end end
do_404 return nil
return true
end end
def admin_update_schedule def admin_update_schedule

3
app/helpers/application_helper.rb

@ -991,7 +991,8 @@ module ApplicationHelper
def administration_sub_steps def administration_sub_steps
{ {
location_edit: :locations, location_edit: :locations,
event_edit: :events event_edit: :events,
broadcast_sent: :broadcast
} }
end end

27
app/models/event_location.rb

@ -4,22 +4,21 @@ require 'geocoder/railtie'
Geocoder::Railtie.insert Geocoder::Railtie.insert
class EventLocation < ActiveRecord::Base class EventLocation < ActiveRecord::Base
belongs_to :conference belongs_to :conference
geocoded_by :full_address geocoded_by :full_address
reverse_geocoded_by :latitude, :longitude, :address => :full_address reverse_geocoded_by :latitude, :longitude, :address => :full_address
after_validation :geocode, if: ->(obj){ obj.address_changed? } after_validation :geocode, if: ->(obj){ obj.address_changed? }
def full_address def full_address
l = conference.location [address, conference.city.city, conference.city.territory, conference.city.country].join(', ')
[address, l.city, l.territory, l.country].join(', ') end
end
def self.all_spaces def self.all_spaces
Workshop.all_spaces + [:event_space] Workshop.all_spaces + [:event_space]
end end
def self.all_amenities def self.all_amenities
Workshop.all_needs Workshop.all_needs
end end
end end

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

@ -1,5 +1,5 @@
- content_for :og_image do - content_for :og_image do
= @conference.poster.full.url || image_path('default_poster.jpg') = (@conference.present? ? @conference.poster.full.url : nil) || image_path('default_poster.jpg')
- if @conferences - if @conferences.present?
- @conferences.each do | conference | - @conferences.each do | conference |
= render 'conferences/conference', conference: conference, links: [ :read_more, :register ] = 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 - if @warning_message
= admin_update_form do = columns(medium: 12) do
- if @broadcast_step == :preview || @broadcast_step == :test .warning-info=_"articles.admin.registrations.#{@warning_message}"
= hidden_field_tag :subject, @subject - else
= hidden_field_tag :body, @body = columns(medium: 12) do
= hidden_field_tag :send_to, @send_to = admin_update_form do
- if @broadcast_step == :preview - if @broadcast_step == :preview || @broadcast_step == :test
%p= _'articles.conference_registration.paragraphs.admin.broadcast.test', vars: { send_to_count: "<strong>#{(@send_to_count || 0)}</strong>".html_safe } = 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 - else
.warning-info.make-room= _'articles.conference_registration.paragraphs.admin.broadcast.preview', vars: { send_to_count: "<strong>#{(@send_to_count || 0)}</strong>".html_safe } = selectfield :send_to, nil, broadcast_options, full: true
.test-preview = textfield :subject, @subject, required: true, big: true
%h3=@subject = textarea :body, @body, lang: @this_conference.locale, edit_on: :focus
= richtext @body, 4 .actions.right
.actions.right = button_tag :preview, value: :preview
= 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

14
app/views/conference_administration/_registration_status.html.haml

@ -1,5 +1,9 @@
= columns(medium: 12) do - if @warning_message
= form_tag administration_update_path(@this_conference.slug, @admin_step) do = columns(medium: 12) do
= selectfield :registration_status, @this_conference.registration_status || 'closed', registration_status_options_list, inline_label: true .warning-info=_"articles.admin.registrations.#{@warning_message}"
.actions.left - else
= button_tag :save, value: :save = 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 - if @warning_message
= columns(medium: 12) do = columns(medium: 12) do
.goes-fullscreen#registrations-table .warning-info=_"articles.admin.registrations.#{@warning_message}"
.flex-column - else
= searchfield :search, nil, big: true, stretch: true - add_inline_script :registrations
%a.button{data: { expands: 'registrations-table' }}='expand' = columns(medium: 12) do
%a.button.delete{data: { contracts: 'registrations-table' }}='close' .goes-fullscreen#registrations-table
%a.button.modify{data: { 'opens-modal': 'new-registration' }}='+' .flex-column
.table-scroller = searchfield :search, nil, big: true, stretch: true
= html_table @excel_data, registrations_table_options %a.button{data: { expands: 'registrations-table' }}='expand'
= admin_update_form id: 'new-registration', class: 'modal-edit' do %a.button.delete{data: { contracts: 'registrations-table' }}='close'
.modal-edit-overlay{data: { 'closes-modal': 'new-registration' }} %a.button.modify{data: { 'opens-modal': 'new-registration' }}='+'
.modal-edit-content .table-scroller
= html_edit_table @excel_data, registrations_edit_table_options = html_table @excel_data, registrations_table_options
.actions.right = admin_update_form id: 'new-registration', class: 'modal-edit' do
%a.button.subdued{data: { 'closes-modal': 'new-registration' }}='Cancel' .modal-edit-overlay{data: { 'closes-modal': 'new-registration' }}
= button_tag :save, value: :save, class: :modify .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 - if @warning_message
.details = columns(medium: 12) do
= data_set(:h3, 'articles.admin.stats.headings.completed_registrations') do .warning-info=_"articles.admin.registrations.#{@warning_message}"
= (@completed_registrations || 0).to_s - else
= data_set(:h3, 'articles.admin.stats.headings.incomplete_registrations') do = columns(medium: 12) do
= ((@registration_count - @completed_registrations) || 0).to_s .details
= data_set(:h3, 'articles.admin.stats.headings.bikes') do = data_set(:h3, 'articles.admin.stats.headings.completed_registrations') do
= (@completed_registrations || 0) > 0 ? "#{@bikes} (#{number_to_percentage(@bikes / @completed_registrations.to_f * 100.0)})" : "0" = (@completed_registrations || 0).to_s
= data_set(:h3, 'articles.admin.stats.headings.food.meat') do = data_set(:h3, 'articles.admin.stats.headings.incomplete_registrations') do
= (@food[:all] || 0) > 0 ? "#{@food[:meat]} (#{number_to_percentage(@food[:meat] / @food[:all].to_f * 100.0)})" : "0" = ((@registration_count - @completed_registrations) || 0).to_s
= data_set(:h3, 'articles.admin.stats.headings.food.vegetarian') do = data_set(:h3, 'articles.admin.stats.headings.bikes') do
= (@food[:all] || 0) > 0 ? "#{@food[:vegetarian]} (#{number_to_percentage(@food[:vegetarian] / @food[:all].to_f * 100.0)})" : "0" = (@completed_registrations || 0) > 0 ? "#{@bikes} (#{number_to_percentage(@bikes / @completed_registrations.to_f * 100.0)})" : "0"
= data_set(:h3, 'articles.admin.stats.headings.food.vegan') do = data_set(:h3, 'articles.admin.stats.headings.food.meat') do
= (@food[:all] || 0) > 0 ? "#{@food[:vegan]} (#{number_to_percentage(@food[:vegan] / @food[:all].to_f * 100.0)})" : "0" = (@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.donation_count') do = data_set(:h3, 'articles.admin.stats.headings.food.vegetarian') do
= (@completed_registrations || 0) > 0 ? "#{@donation_count} (#{number_to_percentage(@donation_count / @completed_registrations.to_f * 100.0)})" : "0" = (@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.donation_total') do = data_set(:h3, 'articles.admin.stats.headings.food.vegan') do
= "$#{@donations || 0.00}" = (@food[:all] || 0) > 0 ? "#{@food[:vegan]} (#{number_to_percentage(@food[:vegan] / @food[:all].to_f * 100.0)})" : "0"
.actions = data_set(:h3, 'articles.admin.stats.headings.donation_count') do
= link_to (_'links.download.Excel'), administration_step_path(@this_conference.slug, :stats, :format => :xlsx), class: [:button, :download] = (@completed_registrations || 0) > 0 ? "#{@donation_count} (#{number_to_percentage(@donation_count / @completed_registrations.to_f * 100.0)})" : "0"
= link_to (_'links.download.Organizations_Excel'), administration_step_path(@this_conference.slug, :organizations, :format => :xlsx), class: [:button, :download, :subdued] = 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 = columns(medium: 12) do
%p=((_"articles.admin.#{@admin_group}.descriptions.#{@admin_step}", :s)) unless @hide_description === true %p=((_"articles.admin.#{@admin_group}.descriptions.#{@admin_step}", :s)) unless @hide_description === true
= row do = 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' = render 'page_header', :page_key => 'Registration_Stats'
%article %article
= row do = row do
= columns(medium: 12) do = columns(medium: 12) do
%h2=_'articles.conference_registration.headings.Stats' %h2=_'articles.conference_registration.headings.Stats'
%p=_'articles.conference_registration.paragraphs.Stats', :p %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} = link_to (_'links.download.Excel','Download Data in Excel Format'), stats_path(@this_conference.slug, :format => :xls), {:class => :button}
= columns(medium: 6) do = columns(medium: 6) do
%ul.stats %ul.stats
%li %li
%h3=_'articles.conference_registration.terms.Total_Registrations' %h3=_'articles.conference_registration.terms.Total_Registrations'
.stat.important=_!@total_registrations .stat.important=_!@total_registrations
%li.money %li.money
%h3=_'articles.conference_registration.terms.Total_Donations' %h3=_'articles.conference_registration.terms.Total_Donations'
.stat=money @total_donations .stat=money @total_donations
%li %li
%h3=_'articles.conference_registration.terms.Donation_Count' %h3=_'articles.conference_registration.terms.Donation_Count'
.stat .stat
= _!"#{@donation_count} / #{@total_registrations}" = _!"#{@donation_count} / #{@total_registrations}"
%li %li
%h3=_'articles.conference_registration.terms.Housing' %h3=_'articles.conference_registration.terms.Housing'
.breakdown .breakdown
- @housing.each do |h, v| - @housing.each do |h, v|
- unless h == :none - unless h == :none
.stat-with-label .stat-with-label
.label=_"articles.conference_registration.questions.housing.#{h}" .label=_"articles.conference_registration.questions.housing.#{h}"
.stat=_!v .stat=_!v
%li %li
%h3=_'articles.conference_registration.terms.Bikes' %h3=_'articles.conference_registration.terms.Bikes'
.breakdown .breakdown
.stat=_!"#{@bike_count} / #{@total_registrations}" .stat=_!"#{@bike_count} / #{@total_registrations}"
- @bikes.each do |h, v| - @bikes.each do |h, v|
- unless h == :none - unless h == :none
.stat-with-label .stat-with-label
.label=_"articles.conference_registration.questions.bike.#{h}" .label=_"articles.conference_registration.questions.bike.#{h}"
.stat.percent=_!percent(v.to_f / @bike_count) .stat.percent=_!percent(v.to_f / @bike_count)
%li %li
%h3=_'articles.conference_registration.terms.Food' %h3=_'articles.conference_registration.terms.Food'
.breakdown .breakdown
- @food.each do |h, v| - @food.each do |h, v|
.stat-with-label .stat-with-label
.label=_"articles.conference_registration.questions.food.#{h}" .label=_"articles.conference_registration.questions.food.#{h}"
.stat.percent=_!percent(v.to_f / @total_registrations) .stat.percent=_!percent(v.to_f / @total_registrations)
%li %li
%h3=_'articles.conference_registration.terms.Languages' %h3=_'articles.conference_registration.terms.Languages'
.breakdown .breakdown
- @languages.each do |h, v| - @languages.each do |h, v|
.stat-with-label .stat-with-label
.label=_"languages.#{h}" .label=_"languages.#{h}"
.stat.percent=_!percent(v.to_f / @total_registrations) .stat.percent=_!percent(v.to_f / @total_registrations)
= columns(medium: 6) do = columns(medium: 6) do
.allergies .allergies
%h3=_'articles.conference_registration.headings.Allergies' %h3=_'articles.conference_registration.headings.Allergies'
%ul %ul
- @allergies.each do |a| - @allergies.each do |a|
%li %li
%p=_!a %p=_!a
.other .other
%h3=_'articles.conference_registration.headings.other' %h3=_'articles.conference_registration.headings.other'
%ul %ul
- @other.each do |o| - @other.each do |o|
%li %li
%p=_!o %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 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. # Code is not reloaded between requests.
config.cache_classes = true config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and # Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers # your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better. # and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance. # Rake tasks automatically ignore this option for performance.
config.eager_load = true config.eager_load = true
# Full error reports are disabled and caching is turned on. # Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false config.consider_all_requests_local = false
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
# Enable Rack::Cache to put a simple HTTP cache in front of your application # Enable Rack::Cache to put a simple HTTP cache in front of your application
# Add `rack-cache` to your Gemfile before enabling this. # 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. # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
# config.action_dispatch.rack_cache = true # config.action_dispatch.rack_cache = true
# Disable Rails's static asset server (Apache or nginx will already do this). # Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_files = true config.serve_static_files = true
# Compress JavaScripts and CSS. # Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass # config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed. # Do not fallback to assets pipeline if a precompiled asset is missed.
#config.assets.compile = true #config.assets.compile = true
# Generate digests for assets URLs. # Generate digests for assets URLs.
config.assets.digest = true config.assets.digest = true
# Version of your assets, change this if you want to expire all your assets. # Version of your assets, change this if you want to expire all your assets.
config.assets.version = '1.0101' config.assets.version = '1.0101'
# Specifies the header that your server uses for sending files. # 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-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx # 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. # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
#config.force_ssl = true #config.force_ssl = true
# Set to :debug to see everything in the log. # Set to :debug to see everything in the log.
config.log_level = :info config.log_level = :info
#config.cache_classes = true #config.cache_classes = true
#config.serve_static_assets = true #config.serve_static_assets = true
#config.assets.compile = true #config.assets.compile = true
# config.assets.digest = true # config.assets.digest = true
# Prepend all log lines with the following tags. # Prepend all log lines with the following tags.
# config.log_tags = [ :subdomain, :uuid ] # config.log_tags = [ :subdomain, :uuid ]
# Use a different logger for distributed setups. # Use a different logger for distributed setups.
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production. # Use a different cache store in production.
# config.cache_store = :mem_cache_store # config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server. # Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = "http://assets.example.com" # config.action_controller.asset_host = "http://assets.example.com"
# Precompile additional assets. # Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. # 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( search.js )
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
#config.action_controller.asset_host = "https://preview-cdn.bikebike.org" #config.action_controller.asset_host = "https://preview-cdn.bikebike.org"
# Ignore bad email addresses and do not raise email delivery errors. # 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. # Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false # config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found). # the I18n.default_locale when a translation can not be found).
config.i18n.fallbacks = true config.i18n.fallbacks = true
# Send deprecation notices to registered listeners. # Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify config.active_support.deprecation = :notify
# Disable automatic flushing of the log to improve performance. # Disable automatic flushing of the log to improve performance.
# config.autoflush_log = false # config.autoflush_log = false
# Use default logging formatter so that PID and timestamp are not suppressed. # Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new config.log_formatter = ::Logger::Formatter.new
config.action_mailer.delivery_method = :smtp config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { config.action_mailer.smtp_settings = {
:address => 'mail.bikebike.org', :address => 'smtp.gmail.com',
:domain => 'preview.bikebike.org', :domain => 'localhost:3000',
:port => 587, :port => 587,
:authentication => :plain, :authentication => :plain,
:enable_starttls_auto => true, :enable_starttls_auto => true,
:openssl_verify_mode => 'none', :user_name => ENV['MAILER_USER'],
:user_name => 'info@preview.bikebike.org', :password => ENV['MAILER_PASSWORD']
:password => 'test' }
} config.action_mailer.raise_delivery_errors = true
config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_deliveries = true
config.action_mailer.perform_deliveries = true
I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
I18n.config.subdomain_format = 'preview-%' I18n.config.subdomain_format = 'preview-%'
I18n.config.host_locale_regex = /^preview\-([a-z]{2})\.[^\.]+\..*$/ I18n.config.host_locale_regex = /^preview\-([a-z]{2})\.[^\.]+\..*$/
end end

201
config/environments/production.rb

@ -1,103 +1,102 @@
BikeBike::Application.configure do 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. # Code is not reloaded between requests.
config.cache_classes = true config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and # Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers # your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better. # and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance. # Rake tasks automatically ignore this option for performance.
config.eager_load = true config.eager_load = true
# Full error reports are disabled and caching is turned on. # Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false config.consider_all_requests_local = false
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
# Enable Rack::Cache to put a simple HTTP cache in front of your application # Enable Rack::Cache to put a simple HTTP cache in front of your application
# Add `rack-cache` to your Gemfile before enabling this. # 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. # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
# config.action_dispatch.rack_cache = true # config.action_dispatch.rack_cache = true
# Disable Rails's static asset server (Apache or nginx will already do this). # Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_files = true config.serve_static_files = true
# Compress JavaScripts and CSS. # Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass # config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed. # Do not fallback to assets pipeline if a precompiled asset is missed.
#config.assets.compile = true #config.assets.compile = true
# Generate digests for assets URLs. # Generate digests for assets URLs.
config.assets.digest = true config.assets.digest = true
# Version of your assets, change this if you want to expire all your assets. # Version of your assets, change this if you want to expire all your assets.
config.assets.version = '1.01' config.assets.version = '1.01'
# Specifies the header that your server uses for sending files. # 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-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx # 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. # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
#config.force_ssl = true #config.force_ssl = true
# Set to :debug to see everything in the log. # Set to :debug to see everything in the log.
config.log_level = :info config.log_level = :info
#config.cache_classes = true #config.cache_classes = true
#config.serve_static_assets = true #config.serve_static_assets = true
#config.assets.compile = true #config.assets.compile = true
# config.assets.digest = true # config.assets.digest = true
# Prepend all log lines with the following tags. # Prepend all log lines with the following tags.
# config.log_tags = [ :subdomain, :uuid ] # config.log_tags = [ :subdomain, :uuid ]
# Use a different logger for distributed setups. # Use a different logger for distributed setups.
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production. # Use a different cache store in production.
# config.cache_store = :mem_cache_store # config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server. # Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = "http://assets.example.com" # config.action_controller.asset_host = "http://assets.example.com"
# Precompile additional assets. # Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. # 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( search.js )
#config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) #config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.svg) config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.svg)
#config.action_controller.asset_host = "https://cdn.bikebike.org" #config.action_controller.asset_host = "https://cdn.bikebike.org"
# Ignore bad email addresses and do not raise email delivery errors. # 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. # Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false # config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found). # the I18n.default_locale when a translation can not be found).
config.i18n.fallbacks = true config.i18n.fallbacks = true
# Send deprecation notices to registered listeners. # Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify config.active_support.deprecation = :notify
# Disable automatic flushing of the log to improve performance. # Disable automatic flushing of the log to improve performance.
# config.autoflush_log = false # config.autoflush_log = false
# Use default logging formatter so that PID and timestamp are not suppressed. # Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new config.log_formatter = ::Logger::Formatter.new
config.action_mailer.delivery_method = :smtp config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { config.action_mailer.smtp_settings = {
:address => 'mail.bikebike.org', :address => 'smtp.gmail.com',
:domain => 'preview.bikebike.org', :domain => 'localhost:3000',
:port => 587, :port => 587,
:authentication => :plain, :authentication => :plain,
:enable_starttls_auto => true, :enable_starttls_auto => true,
:openssl_verify_mode => 'none', :user_name => ENV['MAILER_USER'],
:user_name => 'info@preview.bikebike.org', :password => ENV['MAILER_PASSWORD']
:password => 'test' }
} config.action_mailer.raise_delivery_errors = true
config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_deliveries = true
config.action_mailer.perform_deliveries = true I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
I18n.config.language_detection_method = I18n::Config::DETECT_LANGUAGE_FROM_SUBDOMAIN
end end

4
config/locales/en.yml

@ -961,6 +961,8 @@ en:
completed_registrations: Number of registrations completed_registrations: Number of registrations
incomplete_registrations: Incomplete registrations incomplete_registrations: Incomplete registrations
Registrations: Registrations Registrations: Registrations
registrations:
no_date_warning: Before users can register, you must first set your conference start and end dates.
meals: meals:
description: On this page you can schedule the meals that you will be serving. 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. no_locations_warning: Before you can add meals, you must first add locations.
@ -1054,12 +1056,14 @@ en:
stats: Statistics stats: Statistics
registrations: Modify Registrations registrations: Modify Registrations
broadcast: Contact Users 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. description: Open or close registration, view registration statistics, modify information subbmitted by registratnts and contact users.
descriptions: descriptions:
registration_status: Open or close registration to your conference. 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. 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. registrations: View and edit all data collected through the registration process.
broadcast: Send emails to targeted subsets of users. 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: broadcast:
heading: 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. 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" 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| create_table "authentications", force: :cascade do |t|
t.integer "user_id", null: false t.integer "user_id", null: false
t.string "provider", null: false t.string "provider", null: false

Loading…
Cancel
Save