From 489ff92e569282e58264687fb56b174ece7e6105 Mon Sep 17 00:00:00 2001 From: Stephen Clark Date: Sun, 5 Mar 2017 01:34:56 -0500 Subject: [PATCH 01/12] Prevent participants from skipping saftey video --- app/controllers/waivers_controller.rb | 10 ++++-- app/models/participant.rb | 10 ++++++ ...5040259_add_waiver_start_to_participant.rb | 5 +++ db/schema.rb | 3 +- public/cheating.html | 34 ++++++++++++++++++ public/images/spy.jpg | Bin 0 -> 17388 bytes test/factories.rb | 1 + test/unit/participant_test.rb | 9 ++++- 8 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20170305040259_add_waiver_start_to_participant.rb create mode 100644 public/cheating.html create mode 100644 public/images/spy.jpg diff --git a/app/controllers/waivers_controller.rb b/app/controllers/waivers_controller.rb index cc3eff5b..6fbf4f0a 100644 --- a/app/controllers/waivers_controller.rb +++ b/app/controllers/waivers_controller.rb @@ -10,6 +10,8 @@ def new if @user.has_signed_waiver flash[:notice] = "You have already agreed to the release." + else + @user.start_waiver_timer end end @@ -21,9 +23,11 @@ def create else @participant = Participant.find params[:participant_id] end - - - if params[:adult].blank? + + if @participant.is_waiver_cheater? + @participant.start_waiver_timer + redirect_to '/cheating.html' + elsif params[:adult].blank? flash[:error] = "You must be 18 or older to sign the electronic waiver. Please contact Andrew Greenwald (asgreen@andrew.cmu.edu)." redirect_to action: :new elsif params[:agree].blank? diff --git a/app/models/participant.rb b/app/models/participant.rb index bdc4d3f5..92a3c77f 100644 --- a/app/models/participant.rb +++ b/app/models/participant.rb @@ -21,6 +21,7 @@ # **`phone_number`** | `string(255)` | # **`updated_at`** | `datetime` | # **`user_id`** | `integer` | +# **`waiver_start`** | `datetime` | # # ### Indexes # @@ -49,6 +50,15 @@ class Participant < ActiveRecord::Base scope :search, lambda { |term| where('lower(andrewid) LIKE lower(?) OR lower(cached_name) LIKE lower(?)', "%#{term}%", "%#{term}%") } scope :scc, -> { joins(:organizations).where(organizations: {name: 'Spring Carnival Committee'}) } + def start_waiver_timer + self.waiver_start = DateTime.now + self.save + end + + def is_waiver_cheater? + (self.waiver_start + 3.minutes + 37.seconds) > DateTime.now + end + def is_booth_chair? !memberships.booth_chairs.blank? end diff --git a/db/migrate/20170305040259_add_waiver_start_to_participant.rb b/db/migrate/20170305040259_add_waiver_start_to_participant.rb new file mode 100644 index 00000000..46f785d0 --- /dev/null +++ b/db/migrate/20170305040259_add_waiver_start_to_participant.rb @@ -0,0 +1,5 @@ +class AddWaiverStartToParticipant < ActiveRecord::Migration + def change + add_column :participants, :waiver_start, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index a1a77c55..b0e2e44f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160404161512) do +ActiveRecord::Schema.define(version: 20170305040259) do create_table "charge_types", force: :cascade do |t| t.string "name", limit: 255 @@ -198,6 +198,7 @@ t.string "cached_student_class", limit: 255 t.datetime "cache_updated" t.integer "phone_carrier_id", limit: 4 + t.datetime "waiver_start" end add_index "participants", ["phone_carrier_id"], name: "index_participants_on_phone_carrier_id", using: :btree diff --git a/public/cheating.html b/public/cheating.html new file mode 100644 index 00000000..09e6d911 --- /dev/null +++ b/public/cheating.html @@ -0,0 +1,34 @@ + + + + You tried to do something suspicious + + + + + +
+

You tried to do something suspicious

+

Please go back and try again, this time without trying to cheat the system...we'll be keeping an eye on you!

+
+
+ +
+ + diff --git a/public/images/spy.jpg b/public/images/spy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddac8118c95186ef674dc4eb240e60a2f53c7aa4 GIT binary patch literal 17388 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 YqpJZTEgIn0Md&~X [:completed_by, :issuing_participant, :receiving_participant] do andrewid { generate(:random_string) } + waiver_start DateTime.now end # shift diff --git a/test/unit/participant_test.rb b/test/unit/participant_test.rb index c0c950ca..bc79b429 100644 --- a/test/unit/participant_test.rb +++ b/test/unit/participant_test.rb @@ -21,6 +21,7 @@ # **`phone_number`** | `string(255)` | # **`updated_at`** | `datetime` | # **`user_id`** | `integer` | +# **`waiver_start`** | `datetime` | # # ### Indexes # @@ -45,7 +46,7 @@ class ParticipantTest < ActiveSupport::TestCase context "With a proper context, " do setup do - @participant = FactoryGirl.create(:participant, :phone_number => 1234567890) + @participant = FactoryGirl.create(:participant, :phone_number => 1234567890, :waiver_start => DateTime.now - 10.minutes) @temp_participant = FactoryGirl.create(:participant) end @@ -62,6 +63,12 @@ class ParticipantTest < ActiveSupport::TestCase assert_equal "N/A", @temp_participant.formatted_phone_number end + + should "correctly determine if participant skipped video" do + assert_equal false, @participant.is_waiver_cheater? + + assert_equal true, @temp_participant.is_waiver_cheater? + end end end From 6a1336a081986fae7aa9f6cf46d5918653e6c0c0 Mon Sep 17 00:00:00 2001 From: Stephen Clark Date: Wed, 22 Mar 2017 22:59:18 -0400 Subject: [PATCH 02/12] Added digital signature to waiver #173 --- app/controllers/waivers_controller.rb | 5 ++++- app/views/waivers/new.html.erb | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/controllers/waivers_controller.rb b/app/controllers/waivers_controller.rb index cc3eff5b..16b9083c 100644 --- a/app/controllers/waivers_controller.rb +++ b/app/controllers/waivers_controller.rb @@ -30,7 +30,10 @@ def create flash[:error] = "You must agree to the terms of the release." redirect_to action: :new elsif params[:phone_number] == "" - flash[:error] = "You must provide a mobile phone number" + flash[:error] = "You must provide a mobile phone number." + redirect_to action: :new + elsif params[:signature] != @participant.name + flash[:error] = "You must electronically sign the waiver with your full name as it appears on the waiver." redirect_to action: :new else @participant.phone_number = params[:phone_number] diff --git a/app/views/waivers/new.html.erb b/app/views/waivers/new.html.erb index fb47137a..9f08694b 100644 --- a/app/views/waivers/new.html.erb +++ b/app/views/waivers/new.html.erb @@ -64,6 +64,11 @@
+

By typing your full name below you are digitally signing this document.

+ <%= label_tag :signature, "Required electronic signature:" %> + <%= text_field_tag :signature %> +
+
<%= submit_tag "Submit", class: "btn btn-primary" %>
@@ -91,17 +96,19 @@ }); } - // autoplay video + // autoplay video if there were no flashed errors function onPlayerReady(event) { - event.target.playVideo(); + <%= (flash[:error] == nil)? "event.target.playVideo();" : "showWaiver();" %> } // when video ends function onPlayerStateChange(event) { - if(event.data === 0) { - $('#player').slideUp(); - $('#waiver').slideDown(); + if(event.data === 0) showWaiver(); } + + function showWaiver() { + $('#player').slideUp(); + $('#waiver').slideDown(); } From fe772d34b9b953539cf56020e3a3190eca3c399d Mon Sep 17 00:00:00 2001 From: Stephen Clark Date: Wed, 22 Mar 2017 23:19:29 -0400 Subject: [PATCH 03/12] Cleaned waiver code --- app/controllers/waivers_controller.rb | 4 +- app/views/waivers/new.html.erb | 106 ++++++++++++-------------- 2 files changed, 50 insertions(+), 60 deletions(-) diff --git a/app/controllers/waivers_controller.rb b/app/controllers/waivers_controller.rb index 16b9083c..fd8f68b0 100644 --- a/app/controllers/waivers_controller.rb +++ b/app/controllers/waivers_controller.rb @@ -11,7 +11,9 @@ def new if @user.has_signed_waiver flash[:notice] = "You have already agreed to the release." end - + + @should_see_video = !current_user.participant.is_scc? or params[:participant_id] == nil + end diff --git a/app/views/waivers/new.html.erb b/app/views/waivers/new.html.erb index 9f08694b..28154ea1 100644 --- a/app/views/waivers/new.html.erb +++ b/app/views/waivers/new.html.erb @@ -1,66 +1,58 @@ - - -<% if !current_user.participant.is_scc? or params[:participant_id]== nil %> +

You must watch the video prior to signing the waiver.