Skip to content

Commit ada469c

Browse files
committed
fix copying sponsorship to work
1 parent 33e5c6a commit ada469c

File tree

5 files changed

+52
-30
lines changed

5 files changed

+52
-30
lines changed

app/controllers/sponsorship_asset_files_controller.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ def initiate_update
3838

3939
private def set_asset_file
4040
@asset_file = SponsorshipAssetFile
41-
.where(id: params[:id])
42-
.merge(
43-
SponsorshipAssetFile
44-
.where(sponsorship_id: nil, id: session[:asset_file_ids] || [])
45-
.or(SponsorshipAssetFile.where(sponsorship_id: [current_sponsorship&.id].compact))
41+
.available_for_user(
42+
params[:id],
43+
session_asset_file_ids: session[:asset_file_ids],
44+
available_sponsorship_ids: [current_sponsorship&.id].compact,
4645
)
4746
.first!
4847
end

app/controllers/sponsorships_controller.rb

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,24 @@ def create
4141
return render(plain: '404', status: 404) unless @conference.verify_invite_code(params[:invite_code])
4242
return render(:closed, status: 403) if !@conference&.application_open? && !current_staff
4343

44-
@sponsorship = Sponsorship.new(sponsorship_params)
45-
return render(status: 403, plain: '403') if sponsorship_params[:asset_file_id].present? && (!session[:asset_file_ids] || !session[:asset_file_ids].include?(@sponsorship.asset_file&.id))
46-
47-
if sponsorship_params[:asset_file_id_to_copy].present? && !@sponsorship.asset_file
48-
src_asset = SponsorshipAssetFile.where(sponsorship_id: current_available_sponsorships.map(&:id), id: sponsorship_params[:asset_file_id_to_copy]).first
49-
@sponsorship.asset_file = src_asset.copy_to!(@conference)
44+
@sponsorship = Sponsorship.new(sponsorship_params.except(:asset_file_id))
45+
46+
if sponsorship_params[:asset_file_id].present?
47+
asset_src = SponsorshipAssetFile
48+
.available_for_user(
49+
sponsorship_params[:asset_file_id],
50+
session_asset_file_ids: session[:asset_file_ids],
51+
available_sponsorship_ids: current_available_sponsorships&.pluck(:id) || [],
52+
)
53+
.first
54+
return render(plain: '404 asset not found', status: 404) unless asset_src
55+
if asset_src.sponsorship_id.present?
56+
new_asset = asset_src.copy_to!(@conference)
57+
(session[:asset_file_ids] ||= []) << new_asset.id
58+
@sponsorship.asset_file = new_asset
59+
else
60+
@sponsorship.asset_file = asset_src
61+
end
5062
end
5163

5264
@sponsorship.locale = I18n.locale
@@ -126,14 +138,6 @@ def copied_sponsorship_attributes
126138
return {} unless session[:sponsorship_ids].include?(params[:sponsorship_id_to_copy].to_i)
127139
src = Sponsorship.find_by(id: params[:sponsorship_id_to_copy])
128140
return {} unless src
129-
{
130-
name: src.name,
131-
url: src.url,
132-
profile: src.profile,
133-
asset_file_id_to_copy: src.asset_file_id,
134-
contact_attributes: src.contact.attributes.except('id', 'kind'),
135-
alternate_billing_contact_attributes: src.alternate_billing_contact&.attributes&.except('id', 'kind')&.merge(_keep: '1'),
136-
billing_request_attributes: src.billing_request&.attributes&.except('id', 'kind'),
137-
}.compact
141+
src.attributes_for_copy
138142
end
139143
end

app/models/sponsorship.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,6 @@ def asset_file_id=(other)
2525
self.asset_file = SponsorshipAssetFile.find_by(id: other.to_i)
2626
end
2727

28-
# XXX: this can only hold a value, because authorization is mandatory in a controller
29-
def asset_file_id_to_copy; @asset_file_id_to_copy; end
30-
def asset_file_id_to_copy=(id)
31-
raise "asset_file_id_to_copy= cannot be used for a persisted record" if id && self.persisted?
32-
@asset_file_id_to_copy = id
33-
end
34-
3528
has_many :staff_notes, class_name: 'SponsorshipStaffNote', dependent: :destroy
3629

3730
has_one :exhibition
@@ -211,6 +204,18 @@ def to_h_for_history
211204
end
212205
end
213206

207+
def attributes_for_copy
208+
{
209+
name: self.name,
210+
url: self.url,
211+
profile: self.profile,
212+
asset_file_id: self.asset_file_id,
213+
contact_attributes: self.contact.attributes.except('id', 'kind'),
214+
alternate_billing_contact_attributes: self.alternate_billing_contact&.attributes&.except('id', 'kind')&.merge(_keep: '1'),
215+
billing_request_attributes: self.billing_request&.attributes&.except('id', 'kind'),
216+
}.compact
217+
end
218+
214219
def total_number_of_attendees
215220
if active?
216221
(plan&.number_of_guests || 0) + (number_of_additional_attendees || 0)

app/models/sponsorship_asset_file.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ class SponsorshipAssetFile < ApplicationRecord
88
ROLE = ENV['S3_FILES_ROLE']
99

1010
belongs_to :sponsorship, optional: true
11+
12+
scope :available_for_user, ->(id, session_asset_file_ids: [], available_sponsorship_ids: []) do
13+
where(id:)
14+
.merge(
15+
SponsorshipAssetFile.where(sponsorship_id: available_sponsorship_ids)
16+
.or(SponsorshipAssetFile.where(sponsorship_id: nil, id: session_asset_file_ids || []))
17+
)
18+
end
19+
1120
validates :handle, presence: true
1221

1322
validate :validate_ownership_not_changed

app/views/sponsorships/_form.html.haml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,16 @@
201201

202202
.form-group.sponsorships_form_asset_file{data: {session_endpoint: sponsorship.asset_file&.persisted? ? initiate_update_user_conference_sponsorship_asset_file_path(conference, sponsorship.asset_file) : user_conference_sponsorship_asset_files_path, session_endpoint_method: 'POST'}}
203203
= form.hidden_field :asset_file_id
204-
= form.hidden_field :asset_file_id_to_copy unless sponsorship.persisted?
205204
.sponsorships_form_asset_file_form (Loading)
206205

207-
- if sponsorship.persisted? && sponsorship.asset_file
208-
%small.form-text= link_to t('.download_logo'), user_conference_sponsorship_asset_file_path(conference, sponsorship.asset_file)
206+
- if sponsorship.asset_file
207+
:ruby
208+
asset_file_url = user_conference_sponsorship_asset_file_path(conference, sponsorship.asset_file)
209+
unless sponsorship.persisted? # possibly copying from another sponsorship
210+
asset_file = SponsorshipAssetFile.includes(:sponsorship).find(sponsorship.asset_file_id)
211+
asset_file_url = user_conference_sponsorship_asset_file_path(asset_file.sponsorship.conference, asset_file)
212+
end
213+
%small.form-text= link_to t('.download_logo'), asset_file_url
209214

210215
%div.py-3.sponsorships_form_asset_file_form__warning.d-none{data: {warning_kind: 'zip_asset'}}
211216
.card

0 commit comments

Comments
 (0)