Browse Source

Broadcast is up

development
Godwin 8 years ago
parent
commit
1b95a5eb3d
  1. 14
      app/assets/stylesheets/_application.scss
  2. 29
      app/controllers/conferences_controller.rb
  3. 73
      app/helpers/application_helper.rb
  4. 4
      app/mailers/user_mailer.rb
  5. 9
      app/views/conferences/_workshops.html.haml
  6. 9
      app/views/conferences/admin/_broadcast.html.haml
  7. 13
      config/locales/en.yml

14
app/assets/stylesheets/_application.scss

@ -1054,6 +1054,10 @@ ul.warnings li,
@include _(border-radius, 50%); @include _(border-radius, 50%);
@include default-box-shadow(top, 2); @include default-box-shadow(top, 2);
} }
&.make-room {
margin-bottom: 2em;
}
} }
.warning-info { .warning-info {
@ -2847,6 +2851,16 @@ html[data-lingua-franca-example="html"] {
} }
} }
.major-group {
border-bottom: 0.333em solid #EEE;
padding-bottom: 2em;
margin-bottom: 1em;
&:last-child {
border-bottom: 0;
}
}
#main .workshop-list { #main .workshop-list {
list-style: none; list-style: none;
padding: 0; padding: 0;

29
app/controllers/conferences_controller.rb

@ -1008,19 +1008,36 @@ class ConferencesController < ApplicationController
when 'broadcast' when 'broadcast'
@subject = params[:subject] @subject = params[:subject]
@body = params[:body] @body = params[:body]
@send_to = params[:send_to]
@register_template = :administration @register_template = :administration
if params[:button] == 'send' if params[:button] == 'send'
view_context.broadcast_to(@send_to).each do | user |
UserMailer.send_mail :broadcast do
[
"#{request.protocol}#{request.host_with_port}",
@subject,
@body,
user,
@this_conference
]
end
end
return redirect_to administration_step_path(@this_conference.slug, :broadcast_sent) return redirect_to administration_step_path(@this_conference.slug, :broadcast_sent)
elsif params[:button] == 'preview' elsif params[:button] == 'preview'
@send_to_count = view_context.broadcast_to(@send_to).size
@broadcast_step = :preview @broadcast_step = :preview
elsif params[:button] == 'test' elsif params[:button] == 'test'
@broadcast_step = :test @broadcast_step = :test
UserMailer.delay.broadcast( UserMailer.send_mail :broadcast do
"#{request.protocol}#{request.host_with_port}", [
@subject, "#{request.protocol}#{request.host_with_port}",
@body, @subject,
current_user, @body,
@this_conference) current_user,
@this_conference
]
end
@send_to_count = view_context.broadcast_to(@send_to).size
end end
return render 'conferences/register' return render 'conferences/register'
when 'locations' when 'locations'

73
app/helpers/application_helper.rb

@ -878,15 +878,72 @@ module ApplicationHelper
return html.html_safe return html.html_safe
end end
def broadcast_methods def broadcast_to(to, conference = nil)
[ conference ||= @this_conference || @conference
users = []
case to.to_sym
when :registered
ConferenceRegistration.where(conference_id: conference.id).each do | r |
users << r.user if ((r.steps_completed || []).include? 'questions') && r.user.present?
end
when :pre_registered
ConferenceRegistration.where(conference_id: conference.id).each do | r |
users << r.user if ((r.steps_completed || []).include? 'contact_info') && r.user.present?
end
when :workshop_facilitators
user_hash = {}
Workshop.where(conference_id: conference.id).each do | w |
w.active_facilitators.each do | u |
user_hash[u.id] ||= u if u.present?
end
end
users = user_hash.values
when :unregistered
ConferenceRegistration.where(conference_id: conference.id).each do | r |
users << r.user unless ((r.steps_completed || []).include? (conference.registration_status == :open ? 'questions' : 'contact_info')) || r.user.nil?
end
when :housing_providers
ConferenceRegistration.where(conference_id: conference.id, can_provide_housing: true).each do | r |
users << r.user if r.user.present?
end
when :guests
ConferenceRegistration.where(conference_id: conference.id, housing: 'house').each do | r |
users << r.user if r.user.present?
end
when :all
User.all.each do | u |
users << u if u.present? && (u.is_subscribed.nil? || u.is_subscribed)
end
end
puts "Users:"
users.each do | u |
puts "\t#{u.id}\t#{u.email}"
end
return users
end
def broadcast_options(conference = nil)
conference ||= @this_conference || @conference
options = [
:registered, :registered,
:confirmed_registrations, :pre_registered,
:unconfirmed_registrations,
:unconfirmed_registrations,
:workshop_facilitators, :workshop_facilitators,
:everyone, :unregistered,
:housing_providers,
:guests,
:all
] ]
if conference.registration_status != :open
options -= [:registered, :guests]
options -= [:pre_registered] unless conference.registration_status != :pre
end
return options
end end
def admin_steps def admin_steps
@ -982,8 +1039,8 @@ module ApplicationHelper
@confirmation_dlg ||= true @confirmation_dlg ||= true
args[:data] ||= {} args[:data] ||= {}
args[:data][:confirmation] = true args[:data][:confirmation] = true
button_tag args do button_tag button_name, args do
(button_name.to_s + content_tag(:template, confirmation_text, class: 'message')).html_safe ((_"forms.actions.generic.#{button_name.to_s}") + content_tag(:template, confirmation_text, class: 'message')).html_safe
end end
end end

4
app/mailers/user_mailer.rb

@ -36,8 +36,8 @@ class UserMailer < ActionMailer::Base
@content = content @content = content
@banner = nil @banner = nil
@conference = Conference.find(conference) if conference.present? @conference = Conference.find(conference) if conference.present?
@user = Conference.find(user) if user.present? @user = User.find(user) if user.present?
@subject = "[#{conference ? conference.title : 'Bike!Bike!'}] #{subject}" @subject = "[#{@conference ? @conference.title : 'Bike!Bike!'}] #{subject}"
if @user && @user.named_email if @user && @user.named_email
mail to: @user.named_email, subject: @subject mail to: @user.named_email, subject: @subject
end end

9
app/views/conferences/_workshops.html.haml

@ -1,6 +1,6 @@
= columns(medium: 12) do = columns(medium: 12) do
%h2=_@page_title %h2=_@page_title
= columns(medium: 12) do = columns(medium: 12, class: 'major-group') do
- if @my_workshops.present? - if @my_workshops.present?
%h3=_'articles.conference_registration.headings.Your_Workshops' %h3=_'articles.conference_registration.headings.Your_Workshops'
%p=_'articles.conference_registration.paragraphs.Your_Workshops', :p %p=_'articles.conference_registration.paragraphs.Your_Workshops', :p
@ -9,17 +9,16 @@
%p=_'articles.conference_registration.paragraphs.Create_Workshop', :p %p=_'articles.conference_registration.paragraphs.Create_Workshop', :p
= link_to (_'articles.conference_registration.headings.Add_Workshop'), create_workshop_path(@this_conference.slug), class: :button = link_to (_'articles.conference_registration.headings.Add_Workshop'), create_workshop_path(@this_conference.slug), class: :button
- if @requested_workshops.present? - if @requested_workshops.present?
= columns(medium: 12) do = columns(medium: 12, class: 'major-group') do
%h3=_'articles.conference_registration.headings.Workshops_You_Have_Requested' %h3=_'articles.conference_registration.headings.Workshops_You_Have_Requested'
%p=_'articles.conference_registration.paragraphs.Workshops_You_Have_Requested', :p %p=_'articles.conference_registration.paragraphs.Workshops_You_Have_Requested', :p
= render 'workshops/workshop_previews', :workshops => @requested_workshops = render 'workshops/workshop_previews', :workshops => @requested_workshops
- if @workshops_in_need.present? - if @workshops_in_need.present?
= columns(medium: 12) do = columns(medium: 12, class: 'major-group') do
%h3=_'articles.conference_registration.headings.Workshops_Looking_For_Facilitators' %h3=_'articles.conference_registration.headings.Workshops_Looking_For_Facilitators'
%p=_'articles.conference_registration.paragraphs.Workshops_Looking_For_Facilitators', :p %p=_'articles.conference_registration.paragraphs.Workshops_Looking_For_Facilitators', :p
= render 'workshops/workshop_previews', :workshops => @workshops_in_need = render 'workshops/workshop_previews', :workshops => @workshops_in_need
- if @workshops.present? - if @workshops.present?
= columns(medium: 12) do = columns(medium: 12, class: 'major-group') do
%h3=_'articles.conference_registration.headings.All_Workshops' %h3=_'articles.conference_registration.headings.All_Workshops'
-#%p=_'articles.conference_registration.paragraphs.All_Workshops', :p
= render 'workshops/workshop_previews', :workshops => @workshops = render 'workshops/workshop_previews', :workshops => @workshops

9
app/views/conferences/admin/_broadcast.html.haml

@ -2,6 +2,11 @@
- if @broadcast_step == :preview || @broadcast_step == :test - if @broadcast_step == :preview || @broadcast_step == :test
= hidden_field_tag :subject, @subject = hidden_field_tag :subject, @subject
= hidden_field_tag :body, @body = 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 .test-preview
%h4=@subject %h4=@subject
= richtext @body, 4 = richtext @body, 4
@ -10,10 +15,8 @@
= button_with_confirmation :send, (_'modals.admin.broadcast.confirm', vars: { number: @subscriber_count || 0 }), value: :send, class: :delete if @broadcast_step == :test = button_with_confirmation :send, (_'modals.admin.broadcast.confirm', vars: { number: @subscriber_count || 0 }), value: :send, class: :delete if @broadcast_step == :test
= button_tag :edit, value: :edit = button_tag :edit, value: :edit
- else - else
= selectfield :send_to, nil, broadcast_options, full: true
= textfield :subject, @subject, required: true, big: true = textfield :subject, @subject, required: true, big: true
= textarea :body, @body, lang: @this_conference.locale, edit_on: :focus = textarea :body, @body, lang: @this_conference.locale, edit_on: :focus
.actions.right .actions.right
= button_tag :preview, value: :preview = button_tag :preview, value: :preview
-# I18n.backend.enabled_locales.each do | locale |
-# if locale.to_s != @this_conference.locale.to_s
-#= textarea "info_translations[#{locale.to_s}]", (richtext @this_conference._info(locale)), label: 'translate.pages.Locale_Translation', vars: { language: _("languages.#{locale}") }, lang: locale

13
config/locales/en.yml

@ -5485,6 +5485,9 @@ en:
schedule: schedule:
published: Your scheulde is currently published and viewable on the front-page. Un-publishing the schedule will remove it from the front-page and show a list of proposed workshops instead. published: Your scheulde is currently published and viewable on the front-page. Un-publishing the schedule will remove it from the front-page and show a list of proposed workshops instead.
un_published: Your schedule is not yet published. Publishing the schedule will replace the list of proposed workshops on the front-page with the schedule as it is shown below. un_published: Your schedule is not yet published. Publishing the schedule will replace the list of proposed workshops on the front-page with the schedule as it is shown below.
broadcast:
test: Please take a look at this preview to ensure that you want to send this email. Clicking ‘Test’ will send the email only to you. Only after that then the email will be set to %{send_to_count} people.
preview: Clicking ‘Send’ will send this message to %{send_to_count} people. Please confirm that you have verified that the test email sent to you is what you want to be sent.
companion: Is there someone who you would like us to ensure that you are housed with? companion: Is there someone who you would like us to ensure that you are housed with?
arrival_and_departure: If you don't need housing, just tell us how long you plan to hang out with Bike!Bike! arrival_and_departure: If you don't need housing, just tell us how long you plan to hang out with Bike!Bike!
host: host:
@ -5698,6 +5701,7 @@ en:
days: Days days: Days
length: Length length: Length
workshop_block: Block workshop_block: Block
send_to: Send To
actions: actions:
generic: generic:
login: Sign In login: Sign In
@ -5741,6 +5745,15 @@ en:
remove_interest: Click if you are no longer interested in this workshop remove_interest: Click if you are no longer interested in this workshop
show_interest: Click if you are interested in this workshop show_interest: Click if you are interested in this workshop
add: Add new add: Add new
options:
send_to:
registered: Everyone who has registered
pre_registered: Everyone who has pre-registered or registered
unregistered: Everyone who has not completed their registration
workshop_facilitators: All workshop facilitators
housing_providers: Housing providers
guests: Everyone who has requested housing
all: Everyone
page_titles: page_titles:
'403': '403':
Access_Denied: Access Denied Access_Denied: Access Denied

Loading…
Cancel
Save