@@ -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
139143end
0 commit comments