From 8c5a388dc3975cf1b9cde2ceeb9a93cf36b036ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 04:12:43 +0000 Subject: [PATCH 01/23] Bump the bundler group across 1 directory with 3 updates Bumps the bundler group with 2 updates in the / directory: [rexml](https://github.com/ruby/rexml) and [actionpack](https://github.com/rails/rails). Updates `rexml` from 3.2.7 to 3.3.2 - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.2.7...v3.3.2) Updates `actionpack` from 7.0.8.1 to 7.0.8.4 - [Release notes](https://github.com/rails/rails/releases) - [Changelog](https://github.com/rails/rails/blob/v7.1.3.4/actionpack/CHANGELOG.md) - [Commits](https://github.com/rails/rails/compare/v7.0.8.1...v7.0.8.4) Updates `actiontext` from 7.0.8.1 to 7.0.8.4 - [Release notes](https://github.com/rails/rails/releases) - [Changelog](https://github.com/rails/rails/blob/v7.1.3.4/actiontext/CHANGELOG.md) - [Commits](https://github.com/rails/rails/compare/v7.0.8.1...v7.0.8.4) --- updated-dependencies: - dependency-name: rexml dependency-type: direct:production dependency-group: bundler - dependency-name: actionpack dependency-type: indirect dependency-group: bundler - dependency-name: actiontext dependency-type: indirect dependency-group: bundler ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 128 +++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 03887e0ef..0550a4a21 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,47 +11,47 @@ GEM remote: https://rubygems.org/ specs: Ascii85 (1.1.0) - actioncable (7.0.8.1) - actionpack (= 7.0.8.1) - activesupport (= 7.0.8.1) + actioncable (7.0.8.4) + actionpack (= 7.0.8.4) + activesupport (= 7.0.8.4) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.1) - actionpack (= 7.0.8.1) - activejob (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionmailbox (7.0.8.4) + actionpack (= 7.0.8.4) + activejob (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8.1) - actionpack (= 7.0.8.1) - actionview (= 7.0.8.1) - activejob (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionmailer (7.0.8.4) + actionpack (= 7.0.8.4) + actionview (= 7.0.8.4) + activejob (= 7.0.8.4) + activesupport (= 7.0.8.4) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8.1) - actionview (= 7.0.8.1) - activesupport (= 7.0.8.1) + actionpack (7.0.8.4) + actionview (= 7.0.8.4) + activesupport (= 7.0.8.4) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.1) - actionpack (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + actiontext (7.0.8.4) + actionpack (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.1) - activesupport (= 7.0.8.1) + actionview (7.0.8.4) + activesupport (= 7.0.8.4) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -61,22 +61,22 @@ GEM activemodel (>= 4.1, < 7.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.0.8.1) - activesupport (= 7.0.8.1) + activejob (7.0.8.4) + activesupport (= 7.0.8.4) globalid (>= 0.3.6) - activemodel (7.0.8.1) - activesupport (= 7.0.8.1) - activerecord (7.0.8.1) - activemodel (= 7.0.8.1) - activesupport (= 7.0.8.1) - activestorage (7.0.8.1) - actionpack (= 7.0.8.1) - activejob (= 7.0.8.1) - activerecord (= 7.0.8.1) - activesupport (= 7.0.8.1) + activemodel (7.0.8.4) + activesupport (= 7.0.8.4) + activerecord (7.0.8.4) + activemodel (= 7.0.8.4) + activesupport (= 7.0.8.4) + activestorage (7.0.8.4) + actionpack (= 7.0.8.4) + activejob (= 7.0.8.4) + activerecord (= 7.0.8.4) + activesupport (= 7.0.8.4) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8.1) + activesupport (7.0.8.4) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -112,7 +112,7 @@ GEM bootstrap-switch-rails (3.3.3) bootstrap3-datetimepicker-rails (4.17.47) momentjs-rails (>= 2.8.1) - builder (3.2.4) + builder (3.3.0) bullet (7.0.2) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) @@ -158,7 +158,7 @@ GEM rest-client (>= 2.0.0) cocoon (1.2.15) colorize (0.8.1) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.3) countable-rails (0.0.1) railties (>= 3.1) crack (0.4.5) @@ -235,7 +235,7 @@ GEM dotenv-rails (2.8.1) dotenv (= 2.8.1) railties (>= 3.2) - erubi (1.12.0) + erubi (1.13.0) execjs (2.8.1) factory_bot (6.2.1) activesupport (>= 5.0.0) @@ -290,7 +290,7 @@ GEM httparty (0.21.0) mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) i18n_data (0.17.1) simple_po_parser (~> 1.1) @@ -350,7 +350,7 @@ GEM rake mini_magick (4.12.0) mini_mime (1.1.5) - minitest (5.22.3) + minitest (5.24.1) momentjs-rails (2.29.4.1) railties (>= 3.1) monetize (1.12.0) @@ -378,11 +378,11 @@ GEM next_rails (1.2.4) colorize (>= 0.8.1) nio4r (2.7.0) - nokogiri (1.16.5-arm64-darwin) + nokogiri (1.16.6-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.5-x86_64-darwin) + nokogiri (1.16.6-x86_64-darwin) racc (~> 1.4) - nokogiri (1.16.5-x86_64-linux) + nokogiri (1.16.6-x86_64-linux) racc (~> 1.4) oauth2 (2.0.9) faraday (>= 0.17.3, < 3.0) @@ -466,7 +466,7 @@ GEM public_suffix (5.0.4) puma (6.4.2) nio4r (~> 2.0) - racc (1.7.3) + racc (1.8.0) rack (2.2.9) rack-openid (1.4.2) rack (>= 1.1.0) @@ -475,20 +475,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8.1) - actioncable (= 7.0.8.1) - actionmailbox (= 7.0.8.1) - actionmailer (= 7.0.8.1) - actionpack (= 7.0.8.1) - actiontext (= 7.0.8.1) - actionview (= 7.0.8.1) - activejob (= 7.0.8.1) - activemodel (= 7.0.8.1) - activerecord (= 7.0.8.1) - activestorage (= 7.0.8.1) - activesupport (= 7.0.8.1) + rails (7.0.8.4) + actioncable (= 7.0.8.4) + actionmailbox (= 7.0.8.4) + actionmailer (= 7.0.8.4) + actionpack (= 7.0.8.4) + actiontext (= 7.0.8.4) + actionview (= 7.0.8.4) + activejob (= 7.0.8.4) + activemodel (= 7.0.8.4) + activerecord (= 7.0.8.4) + activestorage (= 7.0.8.4) + activesupport (= 7.0.8.4) bundler (>= 1.15.0) - railties (= 7.0.8.1) + railties (= 7.0.8.4) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -503,9 +503,9 @@ GEM rails-i18n (7.0.7) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.8.1) - actionpack (= 7.0.8.1) - activesupport (= 7.0.8.1) + railties (7.0.8.4) + actionpack (= 7.0.8.4) + activesupport (= 7.0.8.4) method_source rake (>= 12.2) thor (~> 1.0) @@ -527,8 +527,8 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) - rexml (3.2.7) - strscan (>= 3.0.9) + rexml (3.3.2) + strscan rolify (6.0.1) rqrcode (2.2.0) chunky_png (~> 1.0) From ba17c969c70b9393dd798f112649ed0fd7317b78 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 09:30:03 -0700 Subject: [PATCH 02/23] Cleanup ticketpurchase currency migrations --- app/models/payment.rb | 1 - app/models/ticket_purchase.rb | 1 - ...rency_for_null_ticket_purchase_currency.rb | 5 ----- db/schema.rb | 2 -- lib/tasks/migrate_currency.rake | 20 +++++++++++++++++++ spec/factories/payments.rb | 1 - spec/factories/ticket_purchases.rb | 1 - spec/models/payment_spec.rb | 1 - spec/models/ticket_purchase_spec.rb | 1 - 9 files changed, 20 insertions(+), 13 deletions(-) delete mode 100644 db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb create mode 100644 lib/tasks/migrate_currency.rake diff --git a/app/models/payment.rb b/app/models/payment.rb index 5fa61c2f9..6ae089a0a 100644 --- a/app/models/payment.rb +++ b/app/models/payment.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/app/models/ticket_purchase.rb b/app/models/ticket_purchase.rb index 2577269e8..0d166369c 100644 --- a/app/models/ticket_purchase.rb +++ b/app/models/ticket_purchase.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) -# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer diff --git a/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb b/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb deleted file mode 100644 index 759aa644c..000000000 --- a/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb +++ /dev/null @@ -1,5 +0,0 @@ -class SetCurrencyForNullTicketPurchaseCurrency < ActiveRecord::Migration[7.0] - def up - TicketPurchase.where(currency: nil).update_all(currency: 'USD') - end -end diff --git a/db/schema.rb b/db/schema.rb index 42e3604a2..229dc1a4d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -328,7 +328,6 @@ t.integer "status", default: 0, null: false t.integer "user_id", null: false t.integer "conference_id", null: false - t.string "currency" t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false end @@ -545,7 +544,6 @@ t.integer "payment_id" t.integer "week" t.float "amount_paid", default: 0.0 - t.string "currency" t.integer "amount_paid_cents", default: 0 end diff --git a/lib/tasks/migrate_currency.rake b/lib/tasks/migrate_currency.rake new file mode 100644 index 000000000..b05304131 --- /dev/null +++ b/lib/tasks/migrate_currency.rake @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +namespace :data do + namespace :migrate do + desc 'Update Currency of past ticket purchases' + task :update_ticket_purchase_currency do + TicketPurchase.where(currency: nil).update_all(currency: 'USD') + TicketPurchase.find_each do |purchase| + converted_amount = CurrencyConversion.convert_currency( + purchase.conference, + purchase.ticket.price_cents, + purchase.price_currency, + purchase.currency + ) + + purchase.update_column(:amount_paid_cents, converted_amount) + end + end + end +end diff --git a/spec/factories/payments.rb b/spec/factories/payments.rb index a3df512e9..caea70729 100644 --- a/spec/factories/payments.rb +++ b/spec/factories/payments.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/spec/factories/ticket_purchases.rb b/spec/factories/ticket_purchases.rb index 9f55a3ca7..9bf23666a 100644 --- a/spec/factories/ticket_purchases.rb +++ b/spec/factories/ticket_purchases.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) -# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer diff --git a/spec/models/payment_spec.rb b/spec/models/payment_spec.rb index 34b0132d2..246fc8424 100644 --- a/spec/models/payment_spec.rb +++ b/spec/models/payment_spec.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/spec/models/ticket_purchase_spec.rb b/spec/models/ticket_purchase_spec.rb index e5c944a26..9c33e7498 100644 --- a/spec/models/ticket_purchase_spec.rb +++ b/spec/models/ticket_purchase_spec.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) -# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer From cd938d3c380fea04f9dda94cafa15acb58124808 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 11:09:50 -0700 Subject: [PATCH 03/23] Small fixes to the event scheudling JS. *sigh* --- app/assets/javascripts/osem-schedule.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/osem-schedule.js b/app/assets/javascripts/osem-schedule.js index c233c877d..5e4822bf9 100644 --- a/app/assets/javascripts/osem-schedule.js +++ b/app/assets/javascripts/osem-schedule.js @@ -15,10 +15,10 @@ var Schedule = { schedule_id = schedule_id_param; }, remove: function(element) { - var e = $("#" + element); - var event_schedule_id = e.attr("event_schedule_id"); - if(event_schedule_id != null){ - var my_url = url + '/' + event_schedule_id; + var e = $("#" + element); + var event_schedule_id = parseInt(e.attr("event_schedule_id")); + if(event_schedule_id > 0) { + var my_url = `${url}/${event_schedule_id}`; var success_callback = function(data) { e.attr("event_schedule_id", null); e.appendTo($(".unscheduled-events")); @@ -41,18 +41,18 @@ var Schedule = { }, add: function (previous_parent, new_parent, event) { event.appendTo(new_parent); - var event_schedule_id = event.attr("event_schedule_id"); + // Event Schedule Id could be an empty string. + var event_schedule_id = parseInt(event.attr("event_schedule_id")); var my_url = url; var type = 'POST'; var params = { event_schedule: { room_id: new_parent.attr("room_id"), start_time: (new_parent.attr("date") + ' ' + new_parent.attr("hour")) }}; - if(event_schedule_id != null){ + if (event_schedule_id > 0) { type = 'PUT'; - my_url += ('/' + event_schedule_id); - } - else{ + my_url += `/${event_schedule_id}`; + } else { params['event_schedule']['event_id'] = event.attr("event_id"); params['event_schedule']['schedule_id'] = schedule_id; } @@ -89,7 +89,7 @@ $(document).ready( function() { $('.event-item').each(function() { var eventTimeStr = $(this).data('time'); - + if (eventTimeStr) { var eventTime = new Date(eventTimeStr); var diff = Math.abs(eventTime - now); From f025d1733845f4b3b0f85b37ee8dd9830ddaad4e Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 11:30:50 -0700 Subject: [PATCH 04/23] (Re??) add currency migrations files and run migrations --- app/models/payment.rb | 1 + app/models/ticket_purchase.rb | 1 + .../20240722182333_add_currency_to_ticket_purchases.rb | 5 +++++ db/migrate/20240722183008_add_currency_to_payments.rb | 5 +++++ db/schema.rb | 4 +++- spec/factories/payments.rb | 2 +- spec/factories/ticket_purchases.rb | 1 + spec/models/payment_spec.rb | 1 + spec/models/ticket_purchase_spec.rb | 1 + 9 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20240722182333_add_currency_to_ticket_purchases.rb create mode 100644 db/migrate/20240722183008_add_currency_to_payments.rb diff --git a/app/models/payment.rb b/app/models/payment.rb index 6ae089a0a..5fa61c2f9 100644 --- a/app/models/payment.rb +++ b/app/models/payment.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/app/models/ticket_purchase.rb b/app/models/ticket_purchase.rb index 0d166369c..2577269e8 100644 --- a/app/models/ticket_purchase.rb +++ b/app/models/ticket_purchase.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) +# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer diff --git a/db/migrate/20240722182333_add_currency_to_ticket_purchases.rb b/db/migrate/20240722182333_add_currency_to_ticket_purchases.rb new file mode 100644 index 000000000..70e4f9d96 --- /dev/null +++ b/db/migrate/20240722182333_add_currency_to_ticket_purchases.rb @@ -0,0 +1,5 @@ +class AddCurrencyToTicketPurchases < ActiveRecord::Migration[7.0] + def change + add_column :ticket_purchases, :currency, :string + end +end diff --git a/db/migrate/20240722183008_add_currency_to_payments.rb b/db/migrate/20240722183008_add_currency_to_payments.rb new file mode 100644 index 000000000..467a04f43 --- /dev/null +++ b/db/migrate/20240722183008_add_currency_to_payments.rb @@ -0,0 +1,5 @@ +class AddCurrencyToPayments < ActiveRecord::Migration[7.0] + def change + add_column :payments, :currency, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 229dc1a4d..d40bd6b55 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_04_22_200831) do +ActiveRecord::Schema[7.0].define(version: 2024_07_22_183008) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "plpgsql" @@ -330,6 +330,7 @@ t.integer "conference_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false + t.string "currency" end create_table "physical_tickets", force: :cascade do |t| @@ -545,6 +546,7 @@ t.integer "week" t.float "amount_paid", default: 0.0 t.integer "amount_paid_cents", default: 0 + t.string "currency" end create_table "ticket_scannings", force: :cascade do |t| diff --git a/spec/factories/payments.rb b/spec/factories/payments.rb index caea70729..95dfb07a3 100644 --- a/spec/factories/payments.rb +++ b/spec/factories/payments.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null @@ -19,6 +20,5 @@ user conference status { 'unpaid' } - currency { 'USD' } end end diff --git a/spec/factories/ticket_purchases.rb b/spec/factories/ticket_purchases.rb index 9bf23666a..9f55a3ca7 100644 --- a/spec/factories/ticket_purchases.rb +++ b/spec/factories/ticket_purchases.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) +# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer diff --git a/spec/models/payment_spec.rb b/spec/models/payment_spec.rb index 246fc8424..34b0132d2 100644 --- a/spec/models/payment_spec.rb +++ b/spec/models/payment_spec.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/spec/models/ticket_purchase_spec.rb b/spec/models/ticket_purchase_spec.rb index 9c33e7498..e5c944a26 100644 --- a/spec/models/ticket_purchase_spec.rb +++ b/spec/models/ticket_purchase_spec.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount_paid :float default(0.0) # amount_paid_cents :integer default(0) +# currency :string # paid :boolean default(FALSE) # quantity :integer default(1) # week :integer From e739bcc0874d5d5e13dd984f8ad01d8e7b6088fb Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 12:11:07 -0700 Subject: [PATCH 05/23] Refactor EmbeddableURLs / Snap! projects to be more robust --- .../admin/commercials_controller.rb | 4 +- app/models/commercial.rb | 42 +++++------------- app/services/embeddable_url.rb | 44 ++++++++++++++++--- spec/models/commercial_spec.rb | 7 --- spec/services/embeddable_url_spec.rb | 16 +++++-- 5 files changed, 60 insertions(+), 53 deletions(-) diff --git a/app/controllers/admin/commercials_controller.rb b/app/controllers/admin/commercials_controller.rb index 093ea3914..0b7c8af3f 100644 --- a/app/controllers/admin/commercials_controller.rb +++ b/app/controllers/admin/commercials_controller.rb @@ -90,9 +90,7 @@ def aggregate_errors(errors) end def commercial_params - params.require(:commercial).permit(:title, :url).tap do |params| - params[:url] = Commercial.generate_snap_embed(params[:url]) if params[:url] - end + params.require(:commercial).permit(:title, :url) end end end diff --git a/app/models/commercial.rb b/app/models/commercial.rb index 5e1f8eb43..6b6ea970c 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -30,46 +30,24 @@ class Commercial < ApplicationRecord def self.render_from_url(url) register_provider - url = Commercial.generate_snap_embed(url) begin resource = OEmbed::Providers.get(url, maxwidth: 560, maxheight: 315) { html: resource.html.html_safe } rescue StandardError - { html: EmbeddableURL.new(url).render_embed.html_safe } + { html: EmbeddableURL.new(url, title).render_embed.html_safe } # { error: exception.message } end end - def self.generate_snap_embed(url) - return url unless url - - uri = URI.parse(url) - if uri.host == 'snap.berkeley.edu' && uri.path == '/project' - args = URI.decode_www_form(uri.query).to_h - else - return url - end - if args.key?('username') && args.key?('projectname') - new_query = URI.encode_www_form({ - 'projectname' => args['projectname'], - 'username' => args['username'], - 'showTitle' => 'true', - 'showAuthor' => 'true', - 'editButton' => 'true', - 'pauseButton' => 'true' - }) - new_uri = URI::HTTPS.build( - host: uri.host, - path: '/embed', - query: new_query - ) - return new_uri.to_s - end - url - end - - def self.iframe_fallback(url) - "".html_safe + # TODO: Is this necessary? + def self.iframe_fallback(url, title) + iframe = <<~HTML + + HTML + iframe.html_safe end def self.read_file(file) diff --git a/app/services/embeddable_url.rb b/app/services/embeddable_url.rb index 6ca31369a..c2933d19c 100644 --- a/app/services/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -11,15 +11,19 @@ class EmbeddableURL /dropbox\.com/ => :dropbox }.freeze - def initialize(url) - self.url = url + def initialize(url, title) + # Do some normalizing so that URIs parse correctly. + if url + self.url = url.strip + end + self.title = title end def render_embed return render_dropbox if url.include?('dropbox.com') # TODO-A11Y: Set an iframe title - "" + "" end def iframe_url @@ -66,9 +70,35 @@ def dropbox(url) def snap(url) uri = URI.parse(url) - query = CGI.parse(uri.query) - username = query['username'][0] || query['user'][0] - project = query['projectname'][0] || query['project'][0] - "https://snap.berkeley.edu/embed?projectname=#{project}&username=#{username}&showTitle=true&showAuthor=true&editButton=true&pauseButton=true" + return url if uri.query.blank? + + args = URI.decode_www_form(uri.query).to_h + username = args['username'] || args['user'] + projectname = args['projectname'] || args['project'] + + return url if username.blank? || projectname.blank? + new_query = URI.encode_www_form({ + 'projectname' => projectname, + 'username' => username, + 'showTitle' => 'true', + 'showAuthor' => 'true', + 'editButton' => 'true', + 'pauseButton' => 'true' + }) + new_uri = URI::HTTPS.build( + host: uri.host, + path: '/embed', + query: new_query + ).to_s + end + + end + + def iframe_title + if self.title + "title='#{self.title} Embedded Media'" + else + 'title="Embedded Media for Presentation"' + end end end diff --git a/spec/models/commercial_spec.rb b/spec/models/commercial_spec.rb index 2adc17c97..a09077f8e 100644 --- a/spec/models/commercial_spec.rb +++ b/spec/models/commercial_spec.rb @@ -29,11 +29,4 @@ commercial = build(:conference_commercial) expect(commercial.valid?).to be true end - - it 'parses snap url' do - url = 'https://snap.berkeley.edu/project?username=avi_shor&projectname=stamps' - transformed_url = Commercial.generate_snap_embed(url) - expected_url = 'https://snap.berkeley.edu/embed?projectname=stamps&username=avi_shor&showTitle=true&showAuthor=true&editButton=true&pauseButton=true' - expect(transformed_url).to eq expected_url - end end diff --git a/spec/services/embeddable_url_spec.rb b/spec/services/embeddable_url_spec.rb index a8f506ec7..689673122 100644 --- a/spec/services/embeddable_url_spec.rb +++ b/spec/services/embeddable_url_spec.rb @@ -6,24 +6,32 @@ describe '#iframe_url' do it 'returns the original url if no transformations apply' do url = 'https://example.com' - expect(EmbeddableURL.new(url).iframe_url).to eq url + expect(EmbeddableURL.new(url, 'title').iframe_url).to eq url end it 'transforms a Google Drive URL' do - url = EmbeddableURL.new('https://docs.google.com/presentation/d/1eGbEQtcOPW2N2P5rKfBVfSo2zn4C307Sh6C7vpJsruE/edit#slide=id.g1088c029399_0_47').iframe_url + url = EmbeddableURL.new('https://docs.google.com/presentation/d/1eGbEQtcOPW2N2P5rKfBVfSo2zn4C307Sh6C7vpJsruE/edit#slide=id.g1088c029399_0_47', title).iframe_url expect(url).to include '/embed' expect(url).not_to include('/edit') end it 'transforms a Dropbox URL' do - url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1').iframe_url + url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1', title).iframe_url expect(url).to include('dl=0') expect(url).not_to include('raw=') end it 'transforms a Snap! Project URL' do - url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite').iframe_url + url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite', title).iframe_url expect(url).to include('/embed') end end + + # it 'parses snap url' do + # url = 'https://snap.berkeley.edu/project?username=avi_shor&projectname=stamps' + # transformed_url = Commercial.generate_snap_embed(url) + # expected_url = 'https://snap.berkeley.edu/embed?projectname=stamps&username=avi_shor&showTitle=true&showAuthor=true&editButton=true&pauseButton=true' + # expect(transformed_url).to eq expected_url + # end + # TODO: Test ifram generation, snap-embedding end From 9062894c749c5534af5c860b7d4105f0e16c303b Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 12:13:21 -0700 Subject: [PATCH 06/23] delint --- app/services/embeddable_url.rb | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/app/services/embeddable_url.rb b/app/services/embeddable_url.rb index c2933d19c..947596ba5 100644 --- a/app/services/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -77,26 +77,21 @@ def snap(url) projectname = args['projectname'] || args['project'] return url if username.blank? || projectname.blank? - new_query = URI.encode_www_form({ - 'projectname' => projectname, - 'username' => username, - 'showTitle' => 'true', - 'showAuthor' => 'true', - 'editButton' => 'true', - 'pauseButton' => 'true' - }) - new_uri = URI::HTTPS.build( - host: uri.host, - path: '/embed', - query: new_query - ).to_s - end + query = URI.encode_www_form({ + 'projectname' => projectname, + 'username' => username, + 'showTitle' => 'true', + 'showAuthor' => 'true', + 'editButton' => 'true', + 'pauseButton' => 'true' + }) + URI::HTTPS.build(host: uri.host, path: '/embed', query: query).to_s end def iframe_title - if self.title - "title='#{self.title} Embedded Media'" + if title + "title='#{title} Embedded Media'" else 'title="Embedded Media for Presentation"' end From 5393eb5d8af72a3cf9d6fd83a884a5bb6acb9412 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 12:20:37 -0700 Subject: [PATCH 07/23] Fixup titles with iframe embeds --- app/controllers/admin/venue_commercials_controller.rb | 2 +- app/models/commercial.rb | 4 ++-- app/services/embeddable_url.rb | 2 +- app/views/shared/_media_item.html.haml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/admin/venue_commercials_controller.rb b/app/controllers/admin/venue_commercials_controller.rb index 11a87d199..753817fd0 100644 --- a/app/controllers/admin/venue_commercials_controller.rb +++ b/app/controllers/admin/venue_commercials_controller.rb @@ -38,7 +38,7 @@ def destroy end def render_commercial - result = Commercial.render_from_url(params[:url]) + result = Commercial.render_from_url(params[:url], params[:title]) if result[:error] render plain: result[:error], status: :bad_request else diff --git a/app/models/commercial.rb b/app/models/commercial.rb index 6b6ea970c..b01da1aff 100644 --- a/app/models/commercial.rb +++ b/app/models/commercial.rb @@ -28,7 +28,7 @@ class Commercial < ApplicationRecord validate :valid_url - def self.render_from_url(url) + def self.render_from_url(url, title = nil) register_provider begin resource = OEmbed::Providers.get(url, maxwidth: 560, maxheight: 315) @@ -87,7 +87,7 @@ def self.read_file(file) def valid_url return unless url - result = Commercial.render_from_url(url) + result = Commercial.render_from_url(url, title) errors.add(:base, result[:error]) if result[:error] end diff --git a/app/services/embeddable_url.rb b/app/services/embeddable_url.rb index 947596ba5..289a69208 100644 --- a/app/services/embeddable_url.rb +++ b/app/services/embeddable_url.rb @@ -1,7 +1,7 @@ # Transform a URL to a version that allows iframes class EmbeddableURL - attr_accessor :url + attr_accessor :url, :title DEFAULT_FRAME_ATTRS = 'width=560 height=315 frameborder=0 allowfullscreen'.freeze diff --git a/app/views/shared/_media_item.html.haml b/app/views/shared/_media_item.html.haml index 367d04a2f..8e36eb4ad 100644 --- a/app/views/shared/_media_item.html.haml +++ b/app/views/shared/_media_item.html.haml @@ -15,7 +15,7 @@ - elsif commercial.commercial_type == 'YouTube' %iframe{width: '560', height: '315', frameborder: '0', allowfullscreen: 'true', src: "https://www.youtube.com/embed/#{commercial.commercial_id}?rel=0"} - elsif commercial.url - = Commercial.render_from_url(commercial.url)[:html] + = Commercial.render_from_url(commercial.url, commercial.title)[:html] - if commercial.url = link_to('Open in a new tab', commercial.url, target: '_blank', class: 'btn btn-info btn-xs') %br From 1a67ab41c388cfe23bbdd245b217ecb603a7340d Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 12:38:18 -0700 Subject: [PATCH 08/23] fix payment factory --- spec/factories/payments.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/factories/payments.rb b/spec/factories/payments.rb index 95dfb07a3..caea70729 100644 --- a/spec/factories/payments.rb +++ b/spec/factories/payments.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null @@ -20,5 +19,6 @@ user conference status { 'unpaid' } + currency { 'USD' } end end From d506339cb93d7f5a15efe584a31ce8bae5253d4d Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 12:45:17 -0700 Subject: [PATCH 09/23] fix title quotes in embeddable url spec --- spec/services/embeddable_url_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/services/embeddable_url_spec.rb b/spec/services/embeddable_url_spec.rb index 689673122..b88a94a37 100644 --- a/spec/services/embeddable_url_spec.rb +++ b/spec/services/embeddable_url_spec.rb @@ -10,19 +10,19 @@ end it 'transforms a Google Drive URL' do - url = EmbeddableURL.new('https://docs.google.com/presentation/d/1eGbEQtcOPW2N2P5rKfBVfSo2zn4C307Sh6C7vpJsruE/edit#slide=id.g1088c029399_0_47', title).iframe_url + url = EmbeddableURL.new('https://docs.google.com/presentation/d/1eGbEQtcOPW2N2P5rKfBVfSo2zn4C307Sh6C7vpJsruE/edit#slide=id.g1088c029399_0_47', 'title').iframe_url expect(url).to include '/embed' expect(url).not_to include('/edit') end it 'transforms a Dropbox URL' do - url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1', title).iframe_url + url = EmbeddableURL.new('https://www.dropbox.com/scl/fi/49gkp6ghfnxgqex64zvzd/Guzdial-SnapCon23.pdf?rlkey=ecwvmcmfscqtwfq21l3kzqcul&dl=1', 'title').iframe_url expect(url).to include('dl=0') expect(url).not_to include('raw=') end it 'transforms a Snap! Project URL' do - url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite', title).iframe_url + url = EmbeddableURL.new('https://snap.berkeley.edu/project?username=jedi_force&projectname=Autograder%2dlite', 'title').iframe_url expect(url).to include('/embed') end end From 4bb90d38e0518a5a3663e004c2957ef43e1d4f24 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Jul 2024 13:39:01 -0700 Subject: [PATCH 10/23] rename migrations since they were run on Heroku already?? --- ..._to_payments.rb => 20230418211400_add_currency_to_payments.rb} | 0 ...ases.rb => 20230418211400_add_currency_to_ticket_purchases.rb} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename db/migrate/{20240722183008_add_currency_to_payments.rb => 20230418211400_add_currency_to_payments.rb} (100%) rename db/migrate/{20240722182333_add_currency_to_ticket_purchases.rb => 20230418211400_add_currency_to_ticket_purchases.rb} (100%) diff --git a/db/migrate/20240722183008_add_currency_to_payments.rb b/db/migrate/20230418211400_add_currency_to_payments.rb similarity index 100% rename from db/migrate/20240722183008_add_currency_to_payments.rb rename to db/migrate/20230418211400_add_currency_to_payments.rb diff --git a/db/migrate/20240722182333_add_currency_to_ticket_purchases.rb b/db/migrate/20230418211400_add_currency_to_ticket_purchases.rb similarity index 100% rename from db/migrate/20240722182333_add_currency_to_ticket_purchases.rb rename to db/migrate/20230418211400_add_currency_to_ticket_purchases.rb From 95bdd829fd68686f643a9420022eb09b0f9e75b1 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Jul 2024 00:30:44 -0700 Subject: [PATCH 11/23] fix migration file names --- ...ases.rb => 20230418211410_add_currency_to_ticket_purchases.rb} | 0 ...nversions.rb => 20230418211420_create_currency_conversions.rb} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename db/migrate/{20230418211400_add_currency_to_ticket_purchases.rb => 20230418211410_add_currency_to_ticket_purchases.rb} (100%) rename db/migrate/{20230418211400_create_currency_conversions.rb => 20230418211420_create_currency_conversions.rb} (100%) diff --git a/db/migrate/20230418211400_add_currency_to_ticket_purchases.rb b/db/migrate/20230418211410_add_currency_to_ticket_purchases.rb similarity index 100% rename from db/migrate/20230418211400_add_currency_to_ticket_purchases.rb rename to db/migrate/20230418211410_add_currency_to_ticket_purchases.rb diff --git a/db/migrate/20230418211400_create_currency_conversions.rb b/db/migrate/20230418211420_create_currency_conversions.rb similarity index 100% rename from db/migrate/20230418211400_create_currency_conversions.rb rename to db/migrate/20230418211420_create_currency_conversions.rb From 023570f6bc9bd7e8b14be1f9bd5f38652781bd29 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 30 Jul 2024 19:45:17 -0700 Subject: [PATCH 12/23] Add loading currenncies in purchase create --- app/controllers/payments_controller.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/payments_controller.rb b/app/controllers/payments_controller.rb index e86f9ffb7..ca0217bca 100644 --- a/app/controllers/payments_controller.rb +++ b/app/controllers/payments_controller.rb @@ -28,6 +28,9 @@ def new def create @payment = Payment.new payment_params + session[:selected_currency] = params[:currency] if params[:currency].present? + selected_currency = session[:selected_currency] || @conference.tickets.first.price_currency + from_currency = @conference.tickets.first.price_currency if @payment.purchase && @payment.save update_purchased_ticket_purchases From 57c1da5e3c95a47ab8602838da9690c7cd2a9168 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 14:26:27 -0700 Subject: [PATCH 13/23] minor fixup to the db schema --- db/migrate/20230418211420_create_currency_conversions.rb | 2 +- db/schema.rb | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/db/migrate/20230418211420_create_currency_conversions.rb b/db/migrate/20230418211420_create_currency_conversions.rb index 9c5100085..3403e779c 100644 --- a/db/migrate/20230418211420_create_currency_conversions.rb +++ b/db/migrate/20230418211420_create_currency_conversions.rb @@ -1,6 +1,6 @@ class CreateCurrencyConversions < ActiveRecord::Migration[7.0] def change - create_table :currency_conversions do |t| + create_table :currency_conversions, if_not_exists: true do |t| t.decimal :rate t.string :from_currency t.string :to_currency diff --git a/db/schema.rb b/db/schema.rb index d40bd6b55..f75abc363 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_07_22_183008) do +ActiveRecord::Schema[7.0].define(version: 2024_04_22_200831) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "plpgsql" @@ -330,7 +330,6 @@ t.integer "conference_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false - t.string "currency" end create_table "physical_tickets", force: :cascade do |t| @@ -545,8 +544,8 @@ t.integer "payment_id" t.integer "week" t.float "amount_paid", default: 0.0 - t.integer "amount_paid_cents", default: 0 t.string "currency" + t.integer "amount_paid_cents", default: 0 end create_table "ticket_scannings", force: :cascade do |t| From 57551354518f30ac85daa915e4a28f55559060d8 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 14:26:47 -0700 Subject: [PATCH 14/23] Cleanup event scheudle dates/times presentations --- app/controllers/payments_controller.rb | 3 +- app/models/payment.rb | 1 - app/views/schedules/_date_event_types.haml | 2 + app/views/schedules/_event.html.haml | 2 +- app/views/schedules/events.html.haml | 47 ++++++++++------------ package-lock.json | 2 +- spec/models/payment_spec.rb | 1 - 7 files changed, 27 insertions(+), 31 deletions(-) diff --git a/app/controllers/payments_controller.rb b/app/controllers/payments_controller.rb index ca0217bca..17a4b94b2 100644 --- a/app/controllers/payments_controller.rb +++ b/app/controllers/payments_controller.rb @@ -50,7 +50,8 @@ def create notice: 'Thanks! Your ticket is booked successfully.' end else - @total_amount_to_pay = convert_currency(@conference, Ticket.total_price(@conference, current_user, paid: false), from_currency, selected_currency) + # TODO-SNAPCON: This case is not tested at all + @total_amount_to_pay = CurrencyConversion.convert_currency(@conference, Ticket.total_price(@conference, current_user, paid: false), from_currency, selected_currency) @unpaid_ticket_purchases = current_user.ticket_purchases.unpaid.by_conference(@conference) flash.now[:error] = @payment.errors.full_messages.to_sentence + ' Please try again with correct credentials.' render :new diff --git a/app/models/payment.rb b/app/models/payment.rb index 5fa61c2f9..6ae089a0a 100644 --- a/app/models/payment.rb +++ b/app/models/payment.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/app/views/schedules/_date_event_types.haml b/app/views/schedules/_date_event_types.haml index 2ba3cd4d2..c129e782e 100644 --- a/app/views/schedules/_date_event_types.haml +++ b/app/views/schedules/_date_event_types.haml @@ -5,6 +5,8 @@ The conference timezone is #{timezone_mapping(conference.timezone)}. - if current_user Visit your #{link_to('user profile page', edit_user_path(current_user.id))} to set your timezone. + - else + (#{link_to('Log in', new_user_session_path)} to view the schedule in your preferred timezone.) - if current_user %p.text-center Click the star next to each event to add or remove it from diff --git a/app/views/schedules/_event.html.haml b/app/views/schedules/_event.html.haml index 122d3e1e1..e3438bde0 100644 --- a/app/views/schedules/_event.html.haml +++ b/app/views/schedules/_event.html.haml @@ -14,7 +14,7 @@ %h3.event-panel-title = link_to conference_program_proposal_path(@conference.short_title, event.id), - style: color_style do + style: "#{color_style}; line-height: 1.7" do = event.title - if event.subtitle.present? %br diff --git a/app/views/schedules/events.html.haml b/app/views/schedules/events.html.haml index 14a1669ca..0db544063 100644 --- a/app/views/schedules/events.html.haml +++ b/app/views/schedules/events.html.haml @@ -40,38 +40,33 @@ .row / scheduled events :ruby - date = nil - time = nil - tz_object = current_user&.timezone ? current_user : @conference + prev_date, prev_time = nil + display_tz = current_user&.timezone.presence || @conference.timezone / TODO-SNAPCON: Explore caching this. - - @events_schedules.each do |event_schedule| - - next if event_schedule.event.parent_event.present? - - new_start_time = convert_timezone(event_schedule.start_time, @conference.timezone, tz_object.timezone) - - start_ymd = new_start_time.strftime('%Y-%m-%d') - - unless start_ymd.eql?(date) - .col-xs-12.col-md-12 - .date-content - %span.date-title - = inyourtz(event_schedule.start_time, @conference.timezone) do - = date = start_ymd - %a.pull-right{ title: "Go up", href: "#program" } - %i.fa-solid.fa-angles-up.fa-lg{ 'aria-hidden': true } - .col-xs-12.col-md-1 - - if !event_schedule.start_time.strftime('%H:%M').eql?(time) || !start_ymd.eql?(date) - - time = new_start_time.strftime('%H:%M') - = inyourtz(event_schedule.start_time, @conference.timezone) do - = time + ' ' + timezone_text(tz_object) - .col-xs-12.col-md-11 - - cache [@program, event_schedule, event_schedule.event, current_user, event_schedule.happening_now?, '#scheduled#full#panel'] do - .event-item{ data: { time: event_schedule.start_time.iso8601 }, class: "event-#{event_schedule.event.id}" } - = render 'event', event: event_schedule.event, event_schedule: event_schedule + - @events_schedules.select { |es| es.event.parent_event.nil? }.each do |event_schedule| + - event = event_schedule.event + - start_time = convert_timezone(event_schedule.start_time, @conference.timezone, display_tz) + + - unless start_time.to_date.eql?(prev_date) + .date-content + %h2.date-title{ style: "margin: 0;" } + = prev_date = start_time.to_date + %a.pull-right{ title: "Go up", href: "#program" } + %i.fa-solid.fa-angles-up.fa-lg{ 'aria-hidden': true } + - if !start_time.eql?(prev_time) + - prev_time = start_time + %h3= start_time.strftime('%H:%M %p %Z') + .col-12 + - cache [@program, event_schedule, event, current_user, event_schedule.happening_now?, '#scheduled#full#panel'] do + .event-item{ data: { time: event_schedule.start_time.iso8601 }, id: dom_id(event) } + = render 'event', event: event, event_schedule: event_schedule / confirmed events that are not scheduled - if @unscheduled_events.any? - .col-xs-12.col-md-12 + .col-12 .date-content - %span.date-title#unscheduled + %h2.date-title#unscheduled{ style: "margin: 0;" } Unscheduled events %a.pull-right{ title: "Go up", href: "#program" } %i.fa-solid.fa-angles-up.fa-lg{ 'aria-hidden': true } diff --git a/package-lock.json b/package-lock.json index fedc26385..e5e7a779a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "snapcon2", + "name": "snapcon", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/spec/models/payment_spec.rb b/spec/models/payment_spec.rb index 34b0132d2..246fc8424 100644 --- a/spec/models/payment_spec.rb +++ b/spec/models/payment_spec.rb @@ -7,7 +7,6 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string -# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null From c75f686d2597a3701e729803c44da6b9793603d1 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 14:45:21 -0700 Subject: [PATCH 15/23] tidy some markdown truncation issues --- app/views/schedules/_event_mini.html.haml | 4 ++-- app/views/schedules/events.html.haml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/schedules/_event_mini.html.haml b/app/views/schedules/_event_mini.html.haml index b0e29509c..27acb4a77 100644 --- a/app/views/schedules/_event_mini.html.haml +++ b/app/views/schedules/_event_mini.html.haml @@ -25,8 +25,8 @@ %span= " at #{new_start_time.strftime('%l:%M %P')}" = join_event_link(event, event_schedule, current_user, small: true) %p - = truncate(markdown(event.abstract), length: 250, escape: false) - - if event.subevents.present? + = markdown(truncate(event.abstract, length: 256)) + - if event.program_subevents.present? %ul - event.program_subevents.each do |subevent| %li= link_to(subevent.title, conference_program_proposal_path(@conference.short_title, subevent.id)) diff --git a/app/views/schedules/events.html.haml b/app/views/schedules/events.html.haml index 0db544063..a8079c9f2 100644 --- a/app/views/schedules/events.html.haml +++ b/app/views/schedules/events.html.haml @@ -58,9 +58,9 @@ - prev_time = start_time %h3= start_time.strftime('%H:%M %p %Z') .col-12 - - cache [@program, event_schedule, event, current_user, event_schedule.happening_now?, '#scheduled#full#panel'] do - .event-item{ data: { time: event_schedule.start_time.iso8601 }, id: dom_id(event) } - = render 'event', event: event, event_schedule: event_schedule + -# - cache [@program, event_schedule, event, current_user, event_schedule.happening_now?, '#scheduled#full#panel'] do + .event-item{ data: { time: event_schedule.start_time.iso8601 }, id: dom_id(event) } + = render 'event', event: event, event_schedule: event_schedule / confirmed events that are not scheduled - if @unscheduled_events.any? From bcb8180b90941c1f511f81f2df6d1970dfc3934f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 15:58:59 -0700 Subject: [PATCH 16/23] redo payments migration --- app/models/payment.rb | 1 + spec/factories/payments.rb | 1 + spec/models/payment_spec.rb | 1 + 3 files changed, 3 insertions(+) diff --git a/app/models/payment.rb b/app/models/payment.rb index 6ae089a0a..5fa61c2f9 100644 --- a/app/models/payment.rb +++ b/app/models/payment.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/spec/factories/payments.rb b/spec/factories/payments.rb index caea70729..a3df512e9 100644 --- a/spec/factories/payments.rb +++ b/spec/factories/payments.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null diff --git a/spec/models/payment_spec.rb b/spec/models/payment_spec.rb index 246fc8424..34b0132d2 100644 --- a/spec/models/payment_spec.rb +++ b/spec/models/payment_spec.rb @@ -7,6 +7,7 @@ # id :bigint not null, primary key # amount :integer # authorization_code :string +# currency :string # last4 :string # status :integer default("unpaid"), not null # created_at :datetime not null From 05d3413430f607c1641ab79323f6940868e375d6 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 16:16:56 -0700 Subject: [PATCH 17/23] restore currency in db schema --- db/schema.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/db/schema.rb b/db/schema.rb index f75abc363..8b20ff52d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -330,6 +330,7 @@ t.integer "conference_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false + t.string "currency" end create_table "physical_tickets", force: :cascade do |t| From 99506d0909532fcb28d28c8e627e76518faa2f93 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 16:25:11 -0700 Subject: [PATCH 18/23] update tests reflecting schedule tweaks --- features/conferences/all_events.feature | 4 ++-- spec/features/event_schedules_spec.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/features/conferences/all_events.feature b/features/conferences/all_events.feature index 4df1fe39b..409c91da1 100644 --- a/features/conferences/all_events.feature +++ b/features/conferences/all_events.feature @@ -9,7 +9,7 @@ Scenario: Display events using the conference's timezone And I should see "All events are currently displayed in PDT (UTC -7)." And I should see the following data: 8:00 am - 8:30 am PDT, 8:30 am - 9:00 am PDT And I should see the following data in order: Dates, 2014-05-03, 2014-05-04, 2014-05-05, 2014-05-06, 2014-05-07, Unscheduled - And I should see the following data in order: 2014-05-03, 08:00 PDT, first_scheduled_event, 8:00 am, first_scheduled_subevent, 08:30 PDT, multiple_speaker_event + And I should see the following data in order: 2014-05-03, 08:00 AM PDT, first_scheduled_event, 8:00 am, first_scheduled_subevent, 08:30 AM PDT, multiple_speaker_event Scenario: Display events using the user's timezone Given I sign in with username "admin" and password "password123" @@ -18,4 +18,4 @@ Scenario: Display events using the user's timezone And I should see "All events are currently displayed in AEST (UTC 10)." And I should see the following data: 1:00 am - 1:30 am AEST, 1:30 am - 2:00 am AEST And I should see the following data in order: Dates, 2014-05-04, 2014-05-05, 2014-05-06, 2014-05-07, 2014-05-08, Unscheduled - And I should see the following data in order: 2014-05-04, 01:00 AEST, first_scheduled_event, 1:00 am, first_scheduled_subevent, 01:30 AEST, multiple_speaker_event + And I should see the following data in order: 2014-05-04, 01:00 AM AEST, first_scheduled_event, 1:00 am, first_scheduled_subevent, 01:30 AM AEST, multiple_speaker_event diff --git a/spec/features/event_schedules_spec.rb b/spec/features/event_schedules_spec.rb index cc01677a5..a7d1b0ee2 100644 --- a/spec/features/event_schedules_spec.rb +++ b/spec/features/event_schedules_spec.rb @@ -41,6 +41,6 @@ it 'jumps to the closest event' do find('#current-event-btn').click highlighted_element = page.find('.highlighted', visible: true, wait: 1) - expect(highlighted_element[:class]).to include("event-#{scheduled_event_mid.id}") + expect(highlighted_element[:id]).to include("event-#{scheduled_event_mid.id}") end end From 50c05fc732c4d87481fcc3b24983c79ccb979471 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 16:35:00 -0700 Subject: [PATCH 19/23] Cleanup JS for current event button --- app/assets/javascripts/osem-schedule.js | 27 +++++++++++-------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/osem-schedule.js b/app/assets/javascripts/osem-schedule.js index 5e4822bf9..f79dfa2a0 100644 --- a/app/assets/javascripts/osem-schedule.js +++ b/app/assets/javascripts/osem-schedule.js @@ -82,30 +82,27 @@ $(document).ready( function() { $('#current-event-btn').on('click', function() { var now = new Date(); - var closestEventId = null; + var closestEvent = null; var smallestDiff = Infinity; - var i = 0; $('.event-item').each(function() { + let $event = $(this), eventTimeStr = $event.data('time'); - var eventTimeStr = $(this).data('time'); + if (!eventTimeStr) { return; } - if (eventTimeStr) { - var eventTime = new Date(eventTimeStr); - var diff = Math.abs(eventTime - now); - - if (diff < smallestDiff) { - smallestDiff = diff; - closestEventId = $(this).attr('class').split(' ')[1]; - } - } + var eventTime = new Date(eventTimeStr); + var diff = Math.abs(eventTime - now); + if (diff < smallestDiff) { + smallestDiff = diff; + closestEvent = $event; + } }); if (closestEventId) { - //Instead of relying on hash it's probably better to scroll using javascript - //Since the users and click button->scroll->click again, which won't re-scroll + // Instead of relying on hash it's probably better to scroll using javascript + // Since the users and click button->scroll->click again, which won't re-scroll $('.highlighted').removeClass('highlighted'); - $('.' + closestEventId).addClass('highlighted').get(0).scrollIntoView({ behavior: 'smooth', block: 'start' }); + $(closestEvent).addClass('highlighted').get(0).scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); From 98e9b9969a24ebe6dbfffe70eba5c415852efb8c Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 16:40:16 -0700 Subject: [PATCH 20/23] oops, fix one more JS variable --- app/assets/javascripts/osem-schedule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/osem-schedule.js b/app/assets/javascripts/osem-schedule.js index f79dfa2a0..b38ae2cc8 100644 --- a/app/assets/javascripts/osem-schedule.js +++ b/app/assets/javascripts/osem-schedule.js @@ -98,7 +98,7 @@ $(document).ready( function() { } }); - if (closestEventId) { + if (closestEvent) { // Instead of relying on hash it's probably better to scroll using javascript // Since the users and click button->scroll->click again, which won't re-scroll $('.highlighted').removeClass('highlighted'); From e842f06d04e423a52ec701b1c0ba81e9edf90c5e Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 16:49:25 -0700 Subject: [PATCH 21/23] Fix typo in spec --- spec/features/event_schedules_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/event_schedules_spec.rb b/spec/features/event_schedules_spec.rb index a7d1b0ee2..bbb3eaf20 100644 --- a/spec/features/event_schedules_spec.rb +++ b/spec/features/event_schedules_spec.rb @@ -41,6 +41,6 @@ it 'jumps to the closest event' do find('#current-event-btn').click highlighted_element = page.find('.highlighted', visible: true, wait: 1) - expect(highlighted_element[:id]).to include("event-#{scheduled_event_mid.id}") + expect(highlighted_element[:id]).to include("event_#{scheduled_event_mid.id}") end end From cab52b96819e829eaf6e91867e8956aa61b0b713 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 18:01:14 -0700 Subject: [PATCH 22/23] Fix duplicate column in schema.rb Result of a bad merge(?) --- db/schema.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/db/schema.rb b/db/schema.rb index b61c47ad5..ced24c2bb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -548,7 +548,6 @@ t.float "amount_paid", default: 0.0 t.integer "amount_paid_cents", default: 0 t.string "currency" - t.integer "amount_paid_cents", default: 0 end create_table "ticket_scannings", force: :cascade do |t| From df73c3097f20242bcdba52f958073d73ed9e0aeb Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 31 Jul 2024 19:07:40 -0700 Subject: [PATCH 23/23] delete ticket currency migration this doesn't need to be here/doesn't belong in this PR --- ...7212948_set_currency_for_null_ticket_purchase_currency.rb | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb diff --git a/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb b/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb deleted file mode 100644 index 759aa644c..000000000 --- a/db/migrate/20240417212948_set_currency_for_null_ticket_purchase_currency.rb +++ /dev/null @@ -1,5 +0,0 @@ -class SetCurrencyForNullTicketPurchaseCurrency < ActiveRecord::Migration[7.0] - def up - TicketPurchase.where(currency: nil).update_all(currency: 'USD') - end -end