hackathon_manager 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de045d24ad6751129f094dc294549b9eb0931d8619d3873142f862ba286ba0c8
4
- data.tar.gz: 43adf2336dce9187e1a430f99b6ae87cc82f827b06dbffdaa83cb974c69c1d92
3
+ metadata.gz: b110c6f81f04a941dba3abb72df318fd8f861320fd400a23cfc60b07cb64abee
4
+ data.tar.gz: 489f044a7cd227ca530bf8439f8ed3ac81b487c66fbe61ee2c21e97cd41bf69f
5
5
  SHA512:
6
- metadata.gz: d29229b913d9af245341d9826308a6fcf53bd5c1c4bff7aacf2aad0e50f0a5351de3766b4571ebc3bd63867fd6f89d60cb6850179a912544dc8f5a1e4974491b
7
- data.tar.gz: 1c33c481248ac95f4ae82ee9ab150e42aa812a6529c5a010a9886478495d1ae77ee1f428de676869e36a8fb01f6467445fdffe86968e754e6a681d4b412cbf57
6
+ metadata.gz: 2dc4cc8c4da1a98ad2ec2e1dd49ec92793f1348ecd1fc00bf6ea7e6b9ecfa7e0304bed004ee9799146e35c6a2c2cdb0308e815964eff2f9817a5b08c631fc0e6
7
+ data.tar.gz: f150b6ed570e822bdbac891a8500daa9fb70e36bc4adb3ed1dc3a35da83191bec9a3f895eb4937e5b2842336d2e0d718cb955b1a55c65c17b61102cffa1c9729
@@ -17,7 +17,9 @@ class Manage::MessagesController < Manage::ApplicationController
17
17
  end
18
18
 
19
19
  def new
20
- @message = Message.new
20
+ type = params[:type]
21
+ recipients = params[:recipients]
22
+ @message = Message.new(type: type, recipients: recipients)
21
23
  respond_with(:manage, @message)
22
24
  end
23
25
 
@@ -1,7 +1,7 @@
1
1
  class Manage::QuestionnairesController < Manage::ApplicationController
2
2
  include QuestionnairesControllable
3
3
 
4
- before_action :set_questionnaire, only: [:show, :edit, :update, :destroy, :check_in, :convert_to_admin, :update_acc_status, :message_events, :invite_to_slack]
4
+ before_action :set_questionnaire, only: [:show, :edit, :update, :destroy, :check_in, :convert_to_admin, :update_acc_status, :message_events]
5
5
 
6
6
  respond_to :html, :json
7
7
 
@@ -70,7 +70,6 @@ class Manage::QuestionnairesController < Manage::ApplicationController
70
70
  end
71
71
  @questionnaire.update_attribute(:checked_in_at, Time.now)
72
72
  @questionnaire.update_attribute(:checked_in_by_id, current_user.id)
73
- @questionnaire.invite_to_slack
74
73
  flash[:notice] = "Checked in #{@questionnaire.full_name}."
75
74
  elsif params[:check_in] == "false"
76
75
  @questionnaire.update_attribute(:checked_in_at, nil)
@@ -116,8 +115,6 @@ class Manage::QuestionnairesController < Manage::ApplicationController
116
115
  flash[:notice] = "Failed to update acceptance status"
117
116
  end
118
117
 
119
- process_acc_status_notifications(@questionnaire, new_status)
120
-
121
118
  redirect_to manage_questionnaire_path(@questionnaire)
122
119
  end
123
120
 
@@ -132,17 +129,11 @@ class Manage::QuestionnairesController < Manage::ApplicationController
132
129
  q.acc_status = action
133
130
  q.acc_status_author_id = current_user.id
134
131
  q.acc_status_date = Time.now
135
- q.save(validate: false) && process_acc_status_notifications(q, action)
132
+ q.save(validate: false)
136
133
  end
137
134
  head :ok
138
135
  end
139
136
 
140
- def invite_to_slack
141
- @questionnaire.invite_to_slack
142
- flash[:notice] = 'Slack invite has been queued for delivery'
143
- redirect_to manage_questionnaire_path @questionnaire
144
- end
145
-
146
137
  def message_events
147
138
  render json: @questionnaire.message_events
148
139
  end
@@ -165,8 +156,4 @@ class Manage::QuestionnairesController < Manage::ApplicationController
165
156
  def set_questionnaire
166
157
  @questionnaire = ::Questionnaire.find(params[:id])
167
158
  end
168
-
169
- def process_acc_status_notifications(questionnaire, new_status)
170
- questionnaire.invite_to_slack if ENV['INVITE_TO_SLACK_UPON_RSVP'] == 'true' && new_status == 'rsvp_confirmed'
171
- end
172
159
  end
@@ -7,6 +7,11 @@ class Manage::TrackableEventsController < Manage::ApplicationController
7
7
  # GET /manage/trackable_events
8
8
  def index
9
9
  @trackable_events = TrackableEvent.all
10
+ @params = {}
11
+ if params[:trackable_event]
12
+ @params = params.require(:trackable_event).permit(:user_id, :band_id).reject{|_, v| v.blank?}
13
+ @trackable_events = @trackable_events.where(@params)
14
+ end
10
15
  respond_with(:manage, @trackable_events)
11
16
  end
12
17
 
@@ -1,6 +1,6 @@
1
1
  module Manage
2
2
  module BootstrapFormHelper
3
- def bs_vertical_simple_form(path, options, &block)
3
+ def bs_vertical_simple_form(path, options = {}, &block)
4
4
  bootstrap_options = {
5
5
  wrapper: :bootstrap_vertical_form,
6
6
  wrapper_mappings: {
@@ -20,7 +20,7 @@ module Manage
20
20
  end
21
21
  end
22
22
 
23
- def bs_horizontal_simple_form_for(path, options, &block)
23
+ def bs_horizontal_simple_form_for(path, options = {}, &block)
24
24
  bootstrap_options = {
25
25
  wrapper: :bootstrap_horizontal_form,
26
26
  wrapper_mappings: {
@@ -14,10 +14,6 @@ if defined?(ActionMailer::Preview)
14
14
  Mailer.bus_captain_confirmation_email(buslist.id, buslist.captains.first.id)
15
15
  end
16
16
 
17
- def slack_invite_email
18
- Mailer.slack_invite_email(Questionnaire.first.id)
19
- end
20
-
21
17
  def bus_list_update_email
22
18
  Mailer.bus_list_update_email(BusList.first.passengers.first.id)
23
19
  end
@@ -31,12 +31,6 @@ class Mailer < ApplicationMailer
31
31
  mail_questionnaire("You're a bus captain!")
32
32
  end
33
33
 
34
- def slack_invite_email(questionnaire_id)
35
- @questionnaire = Questionnaire.find_by_id(questionnaire_id)
36
- return if @questionnaire.blank?
37
- mail_questionnaire("Slack Invite!")
38
- end
39
-
40
34
  def bus_list_update_email(questionnaire_id)
41
35
  @questionnaire = Questionnaire.find_by_id(questionnaire_id)
42
36
  @bus_list = @questionnaire.bus_list
@@ -57,11 +57,11 @@ class MessageRecipientQuery
57
57
 
58
58
  case recipient_query.type
59
59
  when "bus-list"
60
- "Bus List: #{model.name} (signed up for bus)"
60
+ "Bus List: #{model.name} (signed up passengers)"
61
61
  when "bus-list--eligible"
62
62
  "Bus List: #{model.name} (eligible, not signed up for bus)"
63
63
  when "bus-list--applied"
64
- "Bus List: #{model.name} (applied/not accepted)"
64
+ "Bus List: #{model.name} (applied/not yet accepted)"
65
65
  when "school"
66
66
  "Confirmed or Accepted: #{model.name}"
67
67
  when "blazer"
@@ -199,10 +199,6 @@ class Questionnaire < ApplicationRecord
199
199
  simple_spark.message_events.search(recipients: email)
200
200
  end
201
201
 
202
- def invite_to_slack
203
- SlackInviteWorker.perform_async(id)
204
- end
205
-
206
202
  def verbal_status
207
203
  if acc_status == "rsvp_denied"
208
204
  "Not Attending"
@@ -2,7 +2,15 @@
2
2
  .btn-group
3
3
  = link_to 'Edit', edit_manage_bus_list_path(@bus_list), class: 'btn btn-sm btn-outline-secondary'
4
4
  = link_to 'Delete', manage_bus_list_path(@bus_list), method: :delete, data: { confirm: "Are you sure? The bus list \"#{@bus_list.name}\" will be permanently erased. This action is irreversible." }, class: 'btn btn-sm btn-outline-secondary'
5
- = link_to 'Send Email Update', send_update_email_manage_bus_list_path(@bus_list), method: :patch, data: { confirm: "Are you sure? All passengers for \"#{@bus_list.name}\" will be emailed the current bus notes." }, class: 'btn btn-sm btn-outline-secondary'
5
+ .btn-group{role: "group"}
6
+ %button.btn.btn-sm.btn-outline-secondary.dropdown-toggle#title-actions{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", type: "button"}
7
+ .fa.fa-envelope-o.pr-1
8
+ Send email
9
+ .dropdown-menu.dropdown-menu-right{"aria-labelledby" => "title-actions"}
10
+ = link_to 'Send Bus Notes Update', send_update_email_manage_bus_list_path(@bus_list), method: :patch, data: { confirm: "Are you sure? All passengers for \"#{@bus_list.name}\" will be immediatley emailed the current bus notes." }, class: 'dropdown-item'
11
+ = link_to 'Create message (signed up passengers)', new_manage_message_path(type: 'bulk', recipients: ["bus-list::#{@bus_list.id}"]), class: 'dropdown-item'
12
+ = link_to 'Create message (eligible, not signed up)', new_manage_message_path(type: 'bulk', recipients: ["bus-list::#{@bus_list.id}"]), class: 'dropdown-item'
13
+ = link_to 'Create message (applied/not yet accepted)', new_manage_message_path(type: 'bulk', recipients: ["bus-list::#{@bus_list.id}"]), class: 'dropdown-item'
6
14
 
7
15
  .row
8
16
  .col-lg-6
@@ -22,12 +22,6 @@
22
22
  %h6.card-subtitle.mb-2.text-muted
23
23
  Environment variables are configured on the production server.
24
24
  %hr
25
- %p
26
- %b Carpool Link:
27
- %pre= ENV['CARPOOL_LINK'] || '[No value]'
28
- %p
29
- %b Slack Sign Up URL:
30
- %pre= ENV['SLACK_SIGNUP_URL'] || '[No value]'
31
25
  %p
32
26
  %b AWS S3 Bucket for Resumes:
33
27
  %pre= ENV['AWS_BUCKET'] || '[No value]'
@@ -34,7 +34,3 @@
34
34
  = f.input :email, input_html: { "data-validate" => "presence email", value: @questionnaire.user.try(:email) }, required: true
35
35
  = hidden_field_tag("check_in", !@questionnaire.checked_in?)
36
36
  = f.button :submit, value: ( @questionnaire.checked_in? ? "Remove check-in" : "Check In" ), class: 'btn-primary'
37
- - if !@questionnaire.checked_in?
38
- %p.card-text
39
- %small
40
- %i An invite to Slack will be sent if they haven't joined already.
@@ -2,13 +2,6 @@
2
2
  = link_to "New Questionnaire", new_manage_questionnaire_path, class: "btn btn-sm btn-outline-secondary"
3
3
 
4
4
  %div
5
- - if ENV['INVITE_TO_SLACK_UPON_RSVP']
6
- %p.small
7
- %strong.text-info
8
- %span.fa.fa-info-circle.icon-space-r-half
9
- Slack auto-invite enabled.
10
- %span.text-muted Invites will automatically be sent upon RSVP confirmation.
11
-
12
5
  %table.questionnaires.datatable.table.table-striped.table-hover{ "data-source" => datatable_manage_questionnaires_path(format: :json) }
13
6
  %thead
14
7
  %tr
@@ -11,7 +11,6 @@
11
11
  .btn-group{role: "group"}
12
12
  - unless current_user.admin_limited_access
13
13
  = link_to 'Edit', edit_manage_questionnaire_path(@questionnaire), class: 'btn btn-sm btn-outline-secondary'
14
- = link_to 'Invite to Slack', invite_to_slack_manage_questionnaire_path(@questionnaire), method: :patch, class: 'btn btn-sm btn-outline-secondary'
15
14
  - unless current_user.admin_limited_access
16
15
  .btn-group{role: "group"}
17
16
  %button.btn.btn-sm.btn-outline-secondary.dropdown-toggle#title-actions{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", type: "button"}
@@ -2,6 +2,13 @@
2
2
  .btn-group
3
3
  = link_to 'Edit', edit_manage_school_path(@school), class: 'btn btn-sm btn-outline-secondary'
4
4
  = link_to 'Merge', merge_manage_school_path(@school), class: 'btn btn-sm btn-outline-secondary'
5
+ .btn-group{role: "group"}
6
+ %button.btn.btn-sm.btn-outline-secondary.dropdown-toggle#title-actions{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", type: "button"}
7
+ .fa.fa-envelope-o.pr-1
8
+ Send email
9
+ .dropdown-menu.dropdown-menu-right{"aria-labelledby" => "title-actions"}
10
+ = link_to 'Create message (confirmed or accepted applicants)', new_manage_message_path(type: 'bulk', recipients: ["school::#{@school.id}"]), class: 'dropdown-item'
11
+
5
12
 
6
13
  .row
7
14
  .col-md-6
@@ -1,5 +1,14 @@
1
1
  = render "layouts/manage/page_title", title: "Trackable Events"
2
2
 
3
+ = bs_horizontal_simple_form_for :trackable_event, method: 'get' do |f|
4
+ .form-row
5
+ .col-auto
6
+ = f.input :user_id, collection: User.where(admin: true), label_method: :email, value_method: :id, include_blank: '(show all)', required: false, selected: @params['user_id']
7
+ .col-auto
8
+ = f.input :band_id, as: :string, required: false, input_html: { value: @params['band_id'] }, placeholder: '(show all)'
9
+ .col-auto
10
+ = f.button :submit, 'Filter', class: 'btn btn-primary'
11
+
3
12
  %table.table.table-striped
4
13
  %thead
5
14
  %tr
data/config/routes.rb CHANGED
@@ -47,7 +47,6 @@ Rails.application.routes.draw do
47
47
  patch :update_acc_status, on: :member
48
48
  patch :bulk_apply, on: :collection
49
49
  get :message_events, on: :member
50
- patch :invite_to_slack, on: :member
51
50
  end
52
51
  resources :admins do
53
52
  post :datatable, on: :collection
@@ -1,3 +1,3 @@
1
1
  module HackathonManager
2
- VERSION = '0.11.0'.freeze
2
+ VERSION = '0.11.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hackathon_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Olivera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-09 00:00:00.000000000 Z
11
+ date: 2019-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -590,7 +590,6 @@ files:
590
590
  - app/views/mailer/bus_captain_confirmation_email.html.erb
591
591
  - app/views/mailer/bus_list_update_email.html.erb
592
592
  - app/views/mailer/incomplete_reminder_email.html.erb
593
- - app/views/mailer/slack_invite_email.html.erb
594
593
  - app/views/manage/admins/_form.html.haml
595
594
  - app/views/manage/admins/edit.html.haml
596
595
  - app/views/manage/admins/index.html.haml
@@ -642,7 +641,6 @@ files:
642
641
  - app/views/questionnaires/show.html.haml
643
642
  - app/views/rsvps/show.html.haml
644
643
  - app/workers/bulk_message_worker.rb
645
- - app/workers/slack_invite_worker.rb
646
644
  - config/blazer.yml
647
645
  - config/initializers/0_hackathon.rb
648
646
  - config/initializers/ajax_datatables_rails.rb
@@ -1,10 +0,0 @@
1
- <% raise 'Slack invite URL missing' if ENV['SLACK_SIGNUP_URL'].blank? %>
2
- <h1>Join Slack!</h1>
3
- <p>Hey <%= @questionnaire.first_name %>,
4
- <p><a href="https://slack.com/is">Slack</a> is being used as a central communication platform at <%= Rails.configuration.hackathon['name'] %>.</p>
5
- <p>You can create private <strong>team chats</strong>, reach out to <strong>mentors</strong>, and more. Don't like notifications? Don't worry - you can <a href="https://get.slack.help/hc/en-us/articles/218074567-Customizing-notifications">customize them</a> or <a href="https://get.slack.help/hc/en-us/articles/214908388-Do-Not-Disturb-and-snooze-settings">turn them off entirely</a>.
6
- <p style="text-align: center;">
7
- <a href="<%= ENV['SLACK_SIGNUP_URL'] %>" class="button">Join our Slack &raquo;</a><br>
8
- <small><i>Link not working? Go to:</i></small><br />
9
- <small><i><%= ENV['SLACK_SIGNUP_URL'] %></i></small>
10
- </p>
@@ -1,49 +0,0 @@
1
- require 'httparty'
2
-
3
- class SlackInviteWorker
4
- include Sidekiq::Worker
5
-
6
- def perform(questionnaire_id)
7
- questionnaire = Questionnaire.find(questionnaire_id)
8
- email = questionnaire.email
9
- first_name = questionnaire.first_name
10
- last_name = questionnaire.last_name
11
- json = query_api('users.admin.invite', "&email=#{email}&first_name=#{first_name}&last_name=#{last_name}&set_active=true")
12
-
13
- return if json[:ok]
14
-
15
- if json[:error]
16
- return if ok_errors.include?(json[:error])
17
- return attempt_manual_invite(questionnaire.id, email) if use_manual_errors.include?(json[:error])
18
- raise "Slack error: #{json[:error]}"
19
- end
20
-
21
- raise "Failed to invite to Slack."
22
- end
23
-
24
- private
25
-
26
- def query_api(method, params = '')
27
- response = HTTParty.post("https://#{ENV['SLACK_SUBDOMAIN']}.slack.com/api/#{method}?token=#{ENV['SLACK_API_TOKEN']}#{params}")
28
- json = JSON.parse(response.body, symbolize_names: true)
29
- raise "Could not read Slack response" unless json
30
- json
31
- end
32
-
33
- def attempt_manual_invite(questionnaire_id, email)
34
- json = query_api('users.list')
35
- raise "Slack error: #{json[:error]}" if json[:error]
36
-
37
- return if json[:members].find { |member| member[:profile][:email] == email }
38
-
39
- Mailer.delay.slack_invite_email(questionnaire_id)
40
- end
41
-
42
- def ok_errors
43
- ['already_invited', 'already_in_team']
44
- end
45
-
46
- def use_manual_errors
47
- ['invalid_email', 'invite_limit_reached']
48
- end
49
- end