spina-admin-conferences-fork 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +100 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/config/spina_admin_conferences_manifest.js +3 -0
  6. data/app/assets/javascripts/controllers/spina/admin/conferences/conference_events_form_controller.js +174 -0
  7. data/app/assets/javascripts/controllers/spina/admin/conferences/presentation_attachments_form_controller.js +174 -0
  8. data/app/assets/javascripts/controllers/spina/admin/conferences/select_options_controller.js +215 -0
  9. data/app/assets/javascripts/importmap.json.erb +6 -0
  10. data/app/assets/javascripts/spina/admin/conferences/application.js +4 -0
  11. data/app/assets/stylesheets/spina/admin/conferences/application.sass +3 -0
  12. data/app/controllers/spina/admin/conferences/application_controller.rb +23 -0
  13. data/app/controllers/spina/admin/conferences/conferences_controller.rb +139 -0
  14. data/app/controllers/spina/admin/conferences/delegates_controller.rb +114 -0
  15. data/app/controllers/spina/admin/conferences/dietary_requirements_controller.rb +106 -0
  16. data/app/controllers/spina/admin/conferences/events_controller.rb +24 -0
  17. data/app/controllers/spina/admin/conferences/institutions_controller.rb +106 -0
  18. data/app/controllers/spina/admin/conferences/presentation_attachment_types_controller.rb +104 -0
  19. data/app/controllers/spina/admin/conferences/presentation_attachments_controller.rb +24 -0
  20. data/app/controllers/spina/admin/conferences/presentation_types_controller.rb +109 -0
  21. data/app/controllers/spina/admin/conferences/presentations_controller.rb +123 -0
  22. data/app/controllers/spina/admin/conferences/rooms_controller.rb +109 -0
  23. data/app/controllers/spina/admin/conferences/sessions_controller.rb +118 -0
  24. data/app/jobs/spina/admin/conferences/application_job.rb +11 -0
  25. data/app/jobs/spina/admin/conferences/delegate_import_job.rb +37 -0
  26. data/app/jobs/spina/admin/conferences/import_job.rb +26 -0
  27. data/app/jobs/spina/admin/conferences/presentation_import_job.rb +37 -0
  28. data/app/mailers/spina/admin/conferences/application_mailer.rb +13 -0
  29. data/app/models/spina/admin/conferences/application_record.rb +14 -0
  30. data/app/models/spina/admin/conferences/conference.rb +269 -0
  31. data/app/models/spina/admin/conferences/delegate.rb +89 -0
  32. data/app/models/spina/admin/conferences/dietary_requirement.rb +33 -0
  33. data/app/models/spina/admin/conferences/event.rb +85 -0
  34. data/app/models/spina/admin/conferences/institution.rb +46 -0
  35. data/app/models/spina/admin/conferences/presentation.rb +134 -0
  36. data/app/models/spina/admin/conferences/presentation_attachment.rb +27 -0
  37. data/app/models/spina/admin/conferences/presentation_attachment_type.rb +35 -0
  38. data/app/models/spina/admin/conferences/presentation_type.rb +60 -0
  39. data/app/models/spina/admin/conferences/room.rb +52 -0
  40. data/app/models/spina/admin/conferences/session.rb +56 -0
  41. data/app/models/spina/admin/conferences.rb +11 -0
  42. data/app/models/spina/parts/admin/conferences/date.rb +14 -0
  43. data/app/models/spina/parts/admin/conferences/email_address.rb +20 -0
  44. data/app/models/spina/parts/admin/conferences/time.rb +14 -0
  45. data/app/models/spina/parts/admin/conferences/url.rb +20 -0
  46. data/app/validators/spina/admin/conferences/conference_date_validator.rb +20 -0
  47. data/app/validators/spina/admin/conferences/email_address_validator.rb +28 -0
  48. data/app/validators/spina/admin/conferences/finish_date_validator.rb +20 -0
  49. data/app/validators/spina/admin/conferences/finish_time_validator.rb +20 -0
  50. data/app/validators/spina/admin/conferences/http_url_validator.rb +28 -0
  51. data/app/views/layouts/spina/admin/conferences/application.html.haml +6 -0
  52. data/app/views/layouts/spina/admin/conferences/conferences.html.haml +17 -0
  53. data/app/views/layouts/spina/admin/conferences/delegates.html.haml +8 -0
  54. data/app/views/layouts/spina/admin/conferences/dietary_requirements.html.haml +8 -0
  55. data/app/views/layouts/spina/admin/conferences/institutions.html.haml +15 -0
  56. data/app/views/layouts/spina/admin/conferences/presentation_attachment_types.html.haml +8 -0
  57. data/app/views/layouts/spina/admin/conferences/presentations.html.haml +8 -0
  58. data/app/views/spina/admin/conferences/application/_conferences.html.haml +12 -0
  59. data/app/views/spina/admin/conferences/application/_delegates.html.haml +11 -0
  60. data/app/views/spina/admin/conferences/application/_dietary_requirements.html.haml +9 -0
  61. data/app/views/spina/admin/conferences/application/_empty_list.html.haml +3 -0
  62. data/app/views/spina/admin/conferences/application/_errors.html.haml +11 -0
  63. data/app/views/spina/admin/conferences/application/_errors.turbo_stream.haml +1 -0
  64. data/app/views/spina/admin/conferences/application/_institutions.html.haml +10 -0
  65. data/app/views/spina/admin/conferences/application/_presentation_attachment_types.html.haml +10 -0
  66. data/app/views/spina/admin/conferences/application/_presentation_types.html.haml +11 -0
  67. data/app/views/spina/admin/conferences/application/_presentations.html.haml +11 -0
  68. data/app/views/spina/admin/conferences/application/_rooms.html.haml +11 -0
  69. data/app/views/spina/admin/conferences/application/_sessions.html.haml +11 -0
  70. data/app/views/spina/admin/conferences/conferences/_conference.html.haml +9 -0
  71. data/app/views/spina/admin/conferences/conferences/_event_fields.html.haml +31 -0
  72. data/app/views/spina/admin/conferences/conferences/_event_row.html.haml +5 -0
  73. data/app/views/spina/admin/conferences/conferences/_form.html.haml +27 -0
  74. data/app/views/spina/admin/conferences/conferences/_form_conference_details.html.haml +27 -0
  75. data/app/views/spina/admin/conferences/conferences/_form_parts.html.haml +8 -0
  76. data/app/views/spina/admin/conferences/conferences/_form_structure.html.haml +19 -0
  77. data/app/views/spina/admin/conferences/conferences/_form_structure_item.html.haml +13 -0
  78. data/app/views/spina/admin/conferences/conferences/edit.html.haml +1 -0
  79. data/app/views/spina/admin/conferences/conferences/index.html.haml +7 -0
  80. data/app/views/spina/admin/conferences/conferences/new.html.haml +1 -0
  81. data/app/views/spina/admin/conferences/delegates/_delegate.html.haml +13 -0
  82. data/app/views/spina/admin/conferences/delegates/_form.html.haml +24 -0
  83. data/app/views/spina/admin/conferences/delegates/_form_delegate_details.html.haml +53 -0
  84. data/app/views/spina/admin/conferences/delegates/edit.html.haml +1 -0
  85. data/app/views/spina/admin/conferences/delegates/index.html.haml +13 -0
  86. data/app/views/spina/admin/conferences/delegates/new.html.haml +1 -0
  87. data/app/views/spina/admin/conferences/dietary_requirements/_dietary_requirement.html.haml +6 -0
  88. data/app/views/spina/admin/conferences/dietary_requirements/_form.html.haml +23 -0
  89. data/app/views/spina/admin/conferences/dietary_requirements/_form_dietary_requirement_details.html.haml +8 -0
  90. data/app/views/spina/admin/conferences/dietary_requirements/edit.html.haml +1 -0
  91. data/app/views/spina/admin/conferences/dietary_requirements/index.html.haml +7 -0
  92. data/app/views/spina/admin/conferences/dietary_requirements/new.html.haml +1 -0
  93. data/app/views/spina/admin/conferences/events/new.js.erb +21 -0
  94. data/app/views/spina/admin/conferences/institutions/_form.html.haml +24 -0
  95. data/app/views/spina/admin/conferences/institutions/_form_institution_details.html.haml +29 -0
  96. data/app/views/spina/admin/conferences/institutions/_institution.html.haml +7 -0
  97. data/app/views/spina/admin/conferences/institutions/edit.html.haml +1 -0
  98. data/app/views/spina/admin/conferences/institutions/index.html.haml +7 -0
  99. data/app/views/spina/admin/conferences/institutions/new.html.haml +1 -0
  100. data/app/views/spina/admin/conferences/presentation_attachment_types/_form.html.haml +23 -0
  101. data/app/views/spina/admin/conferences/presentation_attachment_types/_presentation_attachment_type.html.haml +6 -0
  102. data/app/views/spina/admin/conferences/presentation_attachment_types/edit.html.haml +1 -0
  103. data/app/views/spina/admin/conferences/presentation_attachment_types/index.html.haml +7 -0
  104. data/app/views/spina/admin/conferences/presentation_attachment_types/new.html.haml +1 -0
  105. data/app/views/spina/admin/conferences/presentation_attachments/new.js.erb +21 -0
  106. data/app/views/spina/admin/conferences/presentation_types/_form.html.haml +24 -0
  107. data/app/views/spina/admin/conferences/presentation_types/_form_presentation_type_details.html.haml +16 -0
  108. data/app/views/spina/admin/conferences/presentation_types/_presentation_type.html.haml +8 -0
  109. data/app/views/spina/admin/conferences/presentation_types/edit.html.haml +1 -0
  110. data/app/views/spina/admin/conferences/presentation_types/index.html.haml +7 -0
  111. data/app/views/spina/admin/conferences/presentation_types/new.html.haml +1 -0
  112. data/app/views/spina/admin/conferences/presentations/_attachment_fields.html.haml +18 -0
  113. data/app/views/spina/admin/conferences/presentations/_attachment_row.html.haml +2 -0
  114. data/app/views/spina/admin/conferences/presentations/_form.html.haml +23 -0
  115. data/app/views/spina/admin/conferences/presentations/_form_presentation_details.html.haml +55 -0
  116. data/app/views/spina/admin/conferences/presentations/_presentation.html.haml +11 -0
  117. data/app/views/spina/admin/conferences/presentations/edit.html.haml +1 -0
  118. data/app/views/spina/admin/conferences/presentations/index.html.haml +13 -0
  119. data/app/views/spina/admin/conferences/presentations/new.html.haml +1 -0
  120. data/app/views/spina/admin/conferences/rooms/_form.html.haml +23 -0
  121. data/app/views/spina/admin/conferences/rooms/_form_room_details.html.haml +16 -0
  122. data/app/views/spina/admin/conferences/rooms/_room.html.haml +8 -0
  123. data/app/views/spina/admin/conferences/rooms/edit.html.haml +1 -0
  124. data/app/views/spina/admin/conferences/rooms/index.html.haml +7 -0
  125. data/app/views/spina/admin/conferences/rooms/new.html.haml +1 -0
  126. data/app/views/spina/admin/conferences/sessions/_form.html.haml +23 -0
  127. data/app/views/spina/admin/conferences/sessions/_form_session_details.html.haml +21 -0
  128. data/app/views/spina/admin/conferences/sessions/_session.html.haml +8 -0
  129. data/app/views/spina/admin/conferences/sessions/edit.html.haml +1 -0
  130. data/app/views/spina/admin/conferences/sessions/index.html.haml +7 -0
  131. data/app/views/spina/admin/conferences/sessions/new.html.haml +1 -0
  132. data/app/views/spina/admin/hooks/conferences/_head.html.haml +7 -0
  133. data/app/views/spina/admin/hooks/conferences/_primary_navigation.html.haml +21 -0
  134. data/app/views/spina/admin/hooks/conferences/_settings_secondary_navigation.html.haml +6 -0
  135. data/app/views/spina/admin/parts/admin/conferences/dates/_form.html.haml +2 -0
  136. data/app/views/spina/admin/parts/admin/conferences/email_addresses/_form.html.haml +2 -0
  137. data/app/views/spina/admin/parts/admin/conferences/times/_form.html.haml +2 -0
  138. data/app/views/spina/admin/parts/admin/conferences/urls/_form.html.haml +2 -0
  139. data/config/initializers/assets.rb +13 -0
  140. data/config/locales/en.yml +351 -0
  141. data/config/routes.rb +27 -0
  142. data/db/migrate/20180907141228_create_spina_dates.rb +11 -0
  143. data/db/migrate/20180907141229_create_spina_email_addresses.rb +11 -0
  144. data/db/migrate/20180907141230_create_spina_urls.rb +11 -0
  145. data/db/migrate/20180907141231_create_spina_conferences_institutions.rb +12 -0
  146. data/db/migrate/20180907141232_create_spina_conferences_delegates.rb +15 -0
  147. data/db/migrate/20180907141234_create_spina_conferences_dietary_requirements.rb +11 -0
  148. data/db/migrate/20180907141235_create_spina_conferences_conferences.rb +12 -0
  149. data/db/migrate/20180907141236_create_spina_conferences_presentation_types.rb +13 -0
  150. data/db/migrate/20180907141238_create_join_table_spina_conferences_conference_delegate.rb +7 -0
  151. data/db/migrate/20180907141239_create_join_table_spina_conferences_delegate_presentation.rb +7 -0
  152. data/db/migrate/20180907141240_create_join_table_spina_conferences_delegate_dietary_requirement.rb +7 -0
  153. data/db/migrate/20180907141242_add_type_to_spina_pages.rb +7 -0
  154. data/db/migrate/20180907141243_create_spina_conferences_conference_page_parts.rb +14 -0
  155. data/db/migrate/20180914121905_add_logo_ref_to_spina_conferences_institutions.rb +7 -0
  156. data/db/migrate/20180916135431_create_spina_conferences_rooms.rb +13 -0
  157. data/db/migrate/20180916135432_create_spina_conferences_room_possessions.rb +10 -0
  158. data/db/migrate/20180916135433_create_spina_conferences_room_uses.rb +10 -0
  159. data/db/migrate/20180916135434_create_spina_conferences_presentations.rb +15 -0
  160. data/db/migrate/20181009122503_create_spina_times.rb +11 -0
  161. data/db/migrate/20181009130631_rename_spina_page_parts.rb +10 -0
  162. data/db/migrate/20181012190811_rename_spina_conferences_page_parts.rb +10 -0
  163. data/db/migrate/20181012213049_change_start_time_in_spina_conferences_conferences.rb +15 -0
  164. data/db/migrate/20181012214813_rename_start_time_in_spina_conferences_conferences.rb +7 -0
  165. data/db/migrate/20181017155705_add_dependent_option_to_foreign_keys.rb +36 -0
  166. data/db/migrate/20190408131354_change_spina_resources.rb +56 -0
  167. data/db/migrate/20190622131423_create_spina_conferences_parts.rb +12 -0
  168. data/db/migrate/20190701174807_remove_spina_conference_pages.rb +199 -0
  169. data/db/migrate/20190704135524_add_constraints_to_columns.rb +24 -0
  170. data/db/migrate/20200126034441_create_spina_conferences_presentation_attachment_types.rb +11 -0
  171. data/db/migrate/20200126213718_create_spina_conferences_presentation_attachments.rb +19 -0
  172. data/db/migrate/20200420104603_create_spina_conferences_dietary_requirement_name_translations.rb +19 -0
  173. data/db/migrate/20200420104740_create_spina_conferences_institution_name_and_city_translations.rb +20 -0
  174. data/db/migrate/20200420105057_create_spina_conferences_presentation_title_and_abstract_translations.rb +20 -0
  175. data/db/migrate/20200420105144_create_spina_conferences_presentation_attachment_type_name_translations.rb +20 -0
  176. data/db/migrate/20200420105201_create_spina_conferences_presentation_type_name_translations.rb +19 -0
  177. data/db/migrate/20200420105458_create_spina_conferences_room_building_and_number_translations.rb +20 -0
  178. data/db/migrate/20200420110407_move_attributes_to_translation_tables.rb +161 -0
  179. data/db/migrate/20200420120706_remove_name_from_spina_conferences_dietary_requirements.rb +7 -0
  180. data/db/migrate/20200420120759_remove_name_and_city_from_spina_conferences_institutions.rb +8 -0
  181. data/db/migrate/20200420120946_remove_title_and_abstract_from_spina_conferences_presentations.rb +8 -0
  182. data/db/migrate/20200420121310_remove_name_from_spina_conferences_presentation_attachment_types.rb +7 -0
  183. data/db/migrate/20200420121321_remove_name_from_spina_conferences_presentation_types.rb +7 -0
  184. data/db/migrate/20200420121443_remove_building_and_number_from_spina_conferences_rooms.rb +8 -0
  185. data/db/migrate/20200502133408_create_spina_conferences_conference_name_translations.rb +19 -0
  186. data/db/migrate/20200502183409_set_name_for_spina_conferences_conferences.rb +47 -0
  187. data/db/migrate/20200502183410_remove_institution_from_spina_conferences_conferences.rb +8 -0
  188. data/db/migrate/20200502183719_remove_spina_conferences_room_possessions.rb +60 -0
  189. data/db/migrate/20200503230732_rename_spina_conferences_room_uses.rb +8 -0
  190. data/db/migrate/20200510125131_create_spina_conferences_session_name_translations.rb +19 -0
  191. data/db/migrate/20200802165242_create_spina_conferences_events.rb +13 -0
  192. data/db/migrate/20200802184921_create_spina_conferences_event_name_description_and_location_translations.rb +21 -0
  193. data/db/migrate/20200911161632_update_spina_conferences_parts.rb +23 -0
  194. data/db/migrate/20200911161651_update_spina_parts.rb +37 -0
  195. data/db/migrate/20200911161726_move_presentation_parts.rb +101 -0
  196. data/db/migrate/20200911161739_move_conference_parts.rb +221 -0
  197. data/db/migrate/20201002122517_remove_spina_conferences_conference_page_parts.rb +14 -0
  198. data/db/migrate/20201007125625_add_timestamps_to_spina_conferences_parts.rb +10 -0
  199. data/db/migrate/20210315164409_add_json_attributes_to_spina_conferences_presentations.rb +7 -0
  200. data/db/migrate/20210315164410_add_json_attributes_to_spina_conferences_conferences.rb +7 -0
  201. data/db/migrate/20210315164411_convert_partables_to_json.rb +407 -0
  202. data/db/migrate/20210417102513_add_locale_to_action_text_rich_texts.rb +11 -0
  203. data/db/migrate/20210417102514_move_texts_to_action_text_rich_texts.rb +82 -0
  204. data/lib/spina/admin/conferences/engine.rb +31 -0
  205. data/lib/spina/admin/conferences/migration/renaming.rb +79 -0
  206. data/lib/spina/admin/conferences/railtie.rb +34 -0
  207. data/lib/spina/admin/conferences/version.rb +10 -0
  208. data/lib/spina/admin/conferences.rb +23 -0
  209. data/lib/tasks/spina/admin/conferences_tasks.rake +14 -0
  210. metadata +603 -0
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddDependentOptionToForeignKeys < ActiveRecord::Migration[5.2] # :nodoc:
4
+ def change # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5
+ remove_foreign_key :spina_conferences_delegates, :spina_conferences_institutions, column: :institution_id
6
+ remove_foreign_key :spina_conferences_presentations, :spina_conferences_room_uses, column: :room_use_id
7
+ remove_foreign_key :spina_conferences_room_uses, :spina_conferences_room_possessions, column: :room_possession_id
8
+ remove_foreign_key :spina_conferences_room_uses, :spina_conferences_presentation_types, column: :presentation_type_id
9
+ remove_foreign_key :spina_conferences_room_possessions, :spina_conferences_rooms, column: :room_id
10
+ remove_foreign_key :spina_conferences_room_possessions, :spina_conferences_conferences, column: :conference_id
11
+ remove_foreign_key :spina_conferences_rooms, :spina_conferences_institutions, column: :institution_id
12
+ remove_foreign_key :spina_conferences_institutions, :spina_images, column: :logo_id
13
+ remove_foreign_key :spina_conferences_presentation_types, :spina_conferences_conferences, column: :conference_id
14
+ remove_foreign_key :spina_conferences_conferences, :spina_conferences_institutions, column: :institution_id
15
+ add_foreign_key :spina_conferences_delegates, :spina_conferences_institutions,
16
+ column: :institution_id, on_delete: :cascade
17
+ add_foreign_key :spina_conferences_presentations, :spina_conferences_room_uses,
18
+ column: :room_use_id, on_delete: :cascade
19
+ add_foreign_key :spina_conferences_room_uses, :spina_conferences_room_possessions,
20
+ column: :room_possession_id, on_delete: :cascade
21
+ add_foreign_key :spina_conferences_room_uses, :spina_conferences_presentation_types,
22
+ column: :presentation_type_id, on_delete: :cascade
23
+ add_foreign_key :spina_conferences_room_possessions, :spina_conferences_rooms,
24
+ column: :room_id, on_delete: :cascade
25
+ add_foreign_key :spina_conferences_room_possessions, :spina_conferences_conferences,
26
+ column: :conference_id, on_delete: :cascade
27
+ add_foreign_key :spina_conferences_rooms, :spina_conferences_institutions,
28
+ column: :institution_id, on_delete: :cascade
29
+ add_foreign_key :spina_conferences_institutions, :spina_images, column: :logo_id,
30
+ on_delete: :cascade
31
+ add_foreign_key :spina_conferences_presentation_types, :spina_conferences_conferences,
32
+ column: :conference_id, on_delete: :cascade
33
+ add_foreign_key :spina_conferences_conferences, :spina_conferences_institutions,
34
+ column: :institution_id, on_delete: :cascade
35
+ end
36
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ChangeSpinaResources < ActiveRecord::Migration[6.0] #:nodoc:
4
+ def up
5
+ insert <<-SQL, 'Insert conference pages resource if missing'
6
+ INSERT INTO spina_resources (name, label, created_at, updated_at)
7
+ SELECT 'conference_pages', 'Conference pages', current_timestamp, current_timestamp
8
+ WHERE NOT EXISTS (SELECT name FROM spina_resources WHERE name = 'conference_pages')
9
+ SQL
10
+ update <<-SQL, 'Update conference conference pages'
11
+ WITH resources AS (SELECT id FROM spina_resources WHERE name = 'conference_pages' LIMIT 1)
12
+ UPDATE spina_pages SET ancestry = null, resource_id = resources.id
13
+ FROM spina_conferences_conference_page_parts, resources
14
+ WHERE conference_page_id = spina_pages.id AND conference_page_partable_type = 'Spina::Conferences::Conference'
15
+ SQL
16
+ update <<-SQL, 'Update presentation conference pages'
17
+ WITH resources AS (SELECT id FROM spina_resources WHERE name = 'conference_pages' LIMIT 1)
18
+ UPDATE spina_pages SET resource_id = resources.id
19
+ FROM spina_conferences_conference_page_parts, resources
20
+ WHERE conference_page_id = spina_pages.id AND conference_page_partable_type = 'Spina::Conferences::Presentation'
21
+ SQL
22
+ delete <<-SQL, 'Delete resources'
23
+ DELETE FROM spina_resources WHERE name IN ('conferences', 'presentations')
24
+ SQL
25
+ end
26
+
27
+ def down
28
+ insert <<-SQL, 'Insert conferences resource if missing'
29
+ INSERT INTO spina_resources (name, label, view_template, created_at, updated_at)
30
+ SELECT 'conferences', 'Conferences', 'conference', current_timestamp, current_timestamp
31
+ WHERE NOT EXISTS (SELECT name FROM spina_resources WHERE name = 'conferences')
32
+ SQL
33
+ update <<-SQL, 'Update conference conference pages'
34
+ WITH
35
+ conferences_resources AS (SELECT id FROM spina_resources WHERE name = 'conferences' LIMIT 1),
36
+ conferences_pages AS (SELECT id FROM spina_pages WHERE view_template = 'conference' LIMIT 1)
37
+ UPDATE spina_pages SET ancestry = conferences_pages.id, resource_id = conferences_resources.id
38
+ FROM spina_conferences_conference_page_parts, conferences_resources, conferences_pages
39
+ WHERE conference_page_id = spina_pages.id AND conference_page_partable_type = 'Spina::Conferences::Conference'
40
+ SQL
41
+ insert <<-SQL, 'Insert presentations resource if missing'
42
+ INSERT INTO spina_resources (name, label, view_template, created_at, updated_at)
43
+ SELECT 'presentations', 'Presentations', 'presentation', current_timestamp, current_timestamp
44
+ WHERE NOT EXISTS (SELECT name FROM spina_resources WHERE name = 'presentations')
45
+ SQL
46
+ update <<-SQL, 'Update presentation conference pages'
47
+ WITH presentations_resources AS (SELECT id FROM spina_resources WHERE name = 'presentations' LIMIT 1)
48
+ UPDATE spina_pages SET resource_id = presentations_resources.id
49
+ FROM spina_conferences_conference_page_parts, presentations_resources
50
+ WHERE conference_page_id = spina_pages.id AND conference_page_partable_type = 'Spina::Conferences::Presentation'
51
+ SQL
52
+ delete <<-SQL, 'Delete resources'
53
+ DELETE FROM spina_resources WHERE name = 'conference_pages'
54
+ SQL
55
+ end
56
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesParts < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_parts do |t| # rubocop:disable Rails/CreateTableWithTimestamps
6
+ t.string :title
7
+ t.string :name
8
+ t.references :partable, polymorphic: true, index: false
9
+ t.references :pageable, polymorphic: true, index: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,199 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This migration comes from spina_conferences (originally 20190701174807)
4
+
5
+ class RemoveSpinaConferencePages < ActiveRecord::Migration[6.0] #:nodoc:
6
+ def up
7
+ insert <<-SQL, 'Insert conferences parts'
8
+ WITH parts AS (
9
+ SELECT
10
+ title,
11
+ name,
12
+ page_partable_id, page_partable_type,
13
+ spina_conferences_conferences.id AS pageable_id,
14
+ page_partable_type AS pageable_type
15
+ FROM spina_conferences_conferences
16
+ INNER JOIN spina_conferences_conference_page_parts
17
+ ON conference_page_partable_id = spina_conferences_conferences.id
18
+ AND conference_page_partable_type = 'Spina::Conferences::Conference'
19
+ INNER JOIN spina_page_parts ON conference_page_id = page_id
20
+ UNION
21
+ SELECT
22
+ spina_page_parts.title, name, page_partable_id, page_partable_type, spina_conferences_presentations.id, page_partable_type
23
+ FROM spina_conferences_presentations
24
+ INNER JOIN spina_conferences_conference_page_parts
25
+ ON conference_page_partable_id = spina_conferences_presentations.id
26
+ AND conference_page_partable_type = 'Spina::Conferences::Presentation'
27
+ INNER JOIN spina_page_parts ON conference_page_id = page_id
28
+ )
29
+ INSERT INTO spina_conferences_parts (title, name, partable_id, partable_type, pageable_id, pageable_type)
30
+ SELECT title, name, page_partable_id, page_partable_type, pageable_id, pageable_type FROM parts
31
+ SQL
32
+ delete <<-SQL, 'Delete page parts'
33
+ WITH parts AS (
34
+ SELECT spina_page_parts.id AS id
35
+ FROM spina_conferences_conferences
36
+ LEFT JOIN spina_conferences_conference_page_parts
37
+ ON conference_page_partable_id = spina_conferences_conferences.id
38
+ AND conference_page_partable_type = 'Spina::Conferences::Conference'
39
+ LEFT JOIN spina_page_parts ON conference_page_id = page_id
40
+ UNION
41
+ SELECT spina_page_parts.id
42
+ FROM spina_conferences_presentations
43
+ LEFT JOIN spina_conferences_conference_page_parts
44
+ ON conference_page_partable_id = spina_conferences_presentations.id
45
+ AND conference_page_partable_type = 'Spina::Conferences::Presentation'
46
+ LEFT JOIN spina_page_parts ON conference_page_id = page_id
47
+ )
48
+ DELETE FROM spina_page_parts USING parts WHERE spina_page_parts.id = parts.id
49
+ SQL
50
+ delete <<-SQL, 'Delete pages'
51
+ DELETE FROM spina_pages USING spina_conferences_conference_page_parts WHERE conference_page_id = spina_pages.id
52
+ SQL
53
+ delete <<-SQL, 'Delete conference page parts'
54
+ DELETE FROM spina_conferences_conference_page_parts
55
+ USING spina_conferences_conferences, spina_conferences_presentations
56
+ WHERE (
57
+ conference_page_partable_id = spina_conferences_conferences.id
58
+ AND conference_page_partable_type = 'Spina::Conferences::Conference'
59
+ )
60
+ OR (
61
+ conference_page_partable_id = spina_conferences_presentations.id
62
+ AND conference_page_partable_type = 'Spina::Conferences::Presentation'
63
+ )
64
+ SQL
65
+ delete <<-SQL, 'Delete conferences page'
66
+ DELETE FROM spina_pages WHERE name = 'conferences'
67
+ SQL
68
+ delete <<-SQL, 'Delete conference pages resource'
69
+ DELETE FROM spina_resources WHERE name = 'conference_pages'
70
+ SQL
71
+ remove_column :spina_pages, :type
72
+ end
73
+
74
+ def down
75
+ add_column :spina_pages, :type, :string
76
+ insert <<-SQL, 'Insert resource if missing'
77
+ INSERT INTO spina_resources (name, label, created_at, updated_at)
78
+ SELECT 'conference_pages', 'Conference pages', current_timestamp, current_timestamp
79
+ WHERE NOT EXISTS (SELECT name FROM spina_resources WHERE name = 'conference_pages')
80
+ SQL
81
+ locale = ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)
82
+ insert <<-SQL, 'Insert root page if missing', nil, nil, nil, [locale]
83
+ WITH pages AS (
84
+ INSERT INTO spina_pages (name, view_template, deletable, created_at, updated_at)
85
+ SELECT 'conferences', 'conferences', false, current_timestamp, current_timestamp
86
+ WHERE NOT EXISTS (SELECT name FROM spina_pages WHERE name = 'conferences')
87
+ RETURNING id
88
+ )
89
+ INSERT INTO spina_page_translations (title, spina_page_id, locale, created_at, updated_at)
90
+ SELECT 'Conferences', pages.id, $1, current_timestamp, current_timestamp FROM pages
91
+ SQL
92
+ insert <<-SQL, 'Insert conference pages for conferences', nil, nil, nil, [locale]
93
+ WITH
94
+ resources AS (SELECT id FROM spina_resources WHERE name = 'conference_pages' LIMIT 1),
95
+ conferences_pages AS (SELECT id FROM spina_pages WHERE view_template = 'conferences' LIMIT 1),
96
+ conference_pages_to_insert AS (
97
+ SELECT
98
+ concat_ws(' ', name, date_part('year', lower(dates))) AS title,
99
+ false AS deletable,
100
+ resources.id AS resource_id,
101
+ conferences_pages.id AS ancestry,
102
+ 'conference' AS view_template,
103
+ spina_conferences_conferences.id AS conference_id,
104
+ 'Spina::Conferences::Conference' AS type
105
+ FROM spina_conferences_conferences
106
+ INNER JOIN spina_conferences_institutions ON institution_id = spina_conferences_institutions.id
107
+ CROSS JOIN resources
108
+ CROSS JOIN conferences_pages
109
+ ORDER BY type, spina_conferences_conferences.id
110
+ ), conference_pages AS (
111
+ INSERT INTO spina_pages (deletable, resource_id, ancestry, view_template, type, created_at, updated_at)
112
+ SELECT
113
+ deletable, resource_id, ancestry, view_template, 'Spina::Conferences::ConferencePage', current_timestamp, current_timestamp
114
+ FROM conference_pages_to_insert
115
+ RETURNING id AS page_id
116
+ ), conference_page_translations AS (
117
+ INSERT INTO spina_page_translations (spina_page_id, locale, title, created_at, updated_at)
118
+ SELECT page_id, $1, title, current_timestamp, current_timestamp
119
+ FROM (
120
+ SELECT title, row_number() OVER (ORDER BY type, conference_id) AS index FROM conference_pages_to_insert
121
+ ) AS pages_to_insert_with_indices
122
+ INNER JOIN (
123
+ SELECT page_id, row_number() OVER (ORDER BY page_id) AS index FROM conference_pages
124
+ ) AS pages_with_indices USING (index)
125
+ )
126
+ INSERT INTO spina_conferences_conference_page_parts
127
+ (conference_page_id, conference_page_partable_id, conference_page_partable_type, created_at, updated_at)
128
+ SELECT page_id, conference_id, type, current_timestamp, current_timestamp
129
+ FROM (
130
+ SELECT conference_id, type, row_number() OVER (ORDER BY type, conference_id) AS index FROM conference_pages_to_insert
131
+ ) AS pages_to_insert_with_indices
132
+ INNER JOIN (
133
+ SELECT page_id, row_number() OVER (ORDER BY page_id) AS index FROM conference_pages
134
+ ) AS pages_with_indices USING (index)
135
+ SQL
136
+ insert <<-SQL, 'Insert conference pages for presentations', nil, nil, nil, [locale]
137
+ WITH
138
+ resources AS (SELECT id FROM spina_resources WHERE name = 'conference_pages' LIMIT 1),
139
+ conference_pages_to_insert AS (
140
+ SELECT
141
+ title,
142
+ false AS deletable,
143
+ resources.id AS resource_id,
144
+ spina_conferences_conference_page_parts.conference_page_id AS ancestry,
145
+ 'presentation' AS view_template,
146
+ spina_conferences_presentations.id AS presentation_id,
147
+ 'Spina::Conferences::Presentation' AS type
148
+ FROM spina_conferences_presentations
149
+ INNER JOIN spina_conferences_room_uses ON room_use_id = spina_conferences_room_uses.id
150
+ INNER JOIN spina_conferences_presentation_types ON presentation_type_id = spina_conferences_presentation_types.id
151
+ INNER JOIN spina_conferences_conference_page_parts
152
+ ON conference_page_partable_id = conference_id AND conference_page_partable_type = 'Spina::Conferences::Conference'
153
+ CROSS JOIN resources
154
+ ORDER BY type, presentation_id
155
+ ), conference_pages AS (
156
+ INSERT INTO spina_pages (deletable, resource_id, ancestry, view_template, type, created_at, updated_at)
157
+ SELECT
158
+ deletable, resource_id, ancestry, view_template, 'Spina::Conferences::ConferencePage', current_timestamp, current_timestamp
159
+ FROM conference_pages_to_insert
160
+ RETURNING id AS page_id
161
+ ), conference_page_translations AS (
162
+ INSERT INTO spina_page_translations (spina_page_id, locale, title, created_at, updated_at)
163
+ SELECT page_id, $1, title, current_timestamp, current_timestamp
164
+ FROM (
165
+ SELECT title, row_number() OVER (ORDER BY type, presentation_id) AS index FROM conference_pages_to_insert
166
+ ) AS conference_pages_with_indices
167
+ INNER JOIN (
168
+ SELECT page_id, row_number() OVER (ORDER BY page_id) AS index FROM conference_pages
169
+ ) AS pages_with_indices USING (index)
170
+ )
171
+ INSERT INTO spina_conferences_conference_page_parts
172
+ (conference_page_id, conference_page_partable_id, conference_page_partable_type, created_at, updated_at)
173
+ SELECT page_id, presentation_id, type, current_timestamp, current_timestamp
174
+ FROM (
175
+ SELECT presentation_id, type, row_number() OVER (ORDER BY type, presentation_id) AS index FROM conference_pages_to_insert
176
+ ) AS conference_pages_with_indices
177
+ INNER JOIN (
178
+ SELECT page_id, row_number() OVER (ORDER BY page_id) AS index FROM conference_pages
179
+ ) AS pages_with_indices USING (index)
180
+ SQL
181
+ insert <<-SQL, 'Insert page parts'
182
+ INSERT INTO spina_page_parts (title, name, page_id, page_partable_id, page_partable_type, created_at, updated_at)
183
+ SELECT
184
+ spina_conferences_parts.title, spina_conferences_parts.name, spina_pages.id, partable_id, partable_type, current_timestamp,
185
+ current_timestamp
186
+ FROM spina_conferences_parts
187
+ LEFT JOIN spina_conferences_conferences
188
+ ON pageable_id = spina_conferences_conferences.id AND pageable_type = 'Spina::Conferences::Conference'
189
+ LEFT JOIN spina_conferences_presentations
190
+ ON pageable_id = spina_conferences_presentations.id AND pageable_type = 'Spina::Conferences::Presentation'
191
+ INNER JOIN spina_conferences_conference_page_parts
192
+ ON pageable_id = conference_page_partable_id AND pageable_type = conference_page_partable_type
193
+ INNER JOIN spina_pages ON conference_page_id = spina_pages.id
194
+ SQL
195
+ delete <<-SQL, 'Delete conference parts'
196
+ DELETE FROM spina_conferences_parts USING spina_page_parts WHERE page_partable_id = partable_id AND page_partable_type = partable_type
197
+ SQL
198
+ end
199
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConstraintsToColumns < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5
+ change_column_null :spina_conferences_conferences, :dates, false
6
+ change_column_null :spina_conferences_conferences, :institution_id, false
7
+ change_column_null :spina_conferences_delegates, :first_name, false
8
+ change_column_null :spina_conferences_delegates, :last_name, false
9
+ change_column_null :spina_conferences_delegates, :institution_id, false
10
+ change_column_null :spina_conferences_dietary_requirements, :name, false
11
+ change_column_null :spina_conferences_institutions, :name, false
12
+ change_column_null :spina_conferences_institutions, :city, false
13
+ change_column_null :spina_conferences_presentation_types, :name, false
14
+ change_column_null :spina_conferences_presentation_types, :duration, false
15
+ change_column_null :spina_conferences_presentation_types, :conference_id, false
16
+ change_column_null :spina_conferences_presentations, :title, false
17
+ change_column_null :spina_conferences_presentations, :abstract, false
18
+ change_column_null :spina_conferences_presentations, :start_datetime, false
19
+ change_column_null :spina_conferences_presentations, :room_use_id, false
20
+ change_column_null :spina_conferences_rooms, :number, false
21
+ change_column_null :spina_conferences_rooms, :building, false
22
+ change_column_null :spina_conferences_rooms, :institution_id, false
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesPresentationAttachmentTypes < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_presentation_attachment_types do |t|
6
+ t.string :name
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesPresentationAttachments < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change # rubocop:disable Metrics/MethodLength
5
+ create_table :spina_conferences_presentation_attachments do |t|
6
+ t.references :presentation,
7
+ null: false, foreign_key: { to_table: :spina_conferences_presentations, on_delete: :cascade },
8
+ index: { name: 'index_conferences_presentation_attachments_on_presentation_id' }
9
+ t.references :attachment_type,
10
+ null: false,
11
+ foreign_key: { to_table: :spina_conferences_presentation_attachment_types, on_delete: :cascade },
12
+ index: { name: 'index_conferences_presentation_attachments_on_type_id' }
13
+ t.references :attachment, foreign_key: { to_table: :spina_attachments, on_delete: :nullify },
14
+ index: { name: 'index_conferences_presentation_attachments_on_attachment_id' }
15
+
16
+ t.timestamps null: false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesDietaryRequirementNameTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_dietary_requirement_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :name
8
+
9
+ t.string :locale, null: false
10
+ t.references :spina_conferences_dietary_requirement, null: false, foreign_key: { on_delete: :cascade }, index: false
11
+
12
+ t.timestamps null: false
13
+ end
14
+
15
+ add_index :spina_conferences_dietary_requirement_translations, :locale, name: :index_e52faf9b7cbf3a3d55057c84094a3a10b5de6fdd
16
+ add_index :spina_conferences_dietary_requirement_translations, %i[spina_conferences_dietary_requirement_id locale],
17
+ name: :index_70c4d45aefa2ef2619dd91b976391c1025d86e89, unique: true
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesInstitutionNameAndCityTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_institution_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :name
8
+ t.string :city
9
+
10
+ t.string :locale, null: false
11
+ t.references :spina_conferences_institution, null: false, foreign_key: { on_delete: :cascade }, index: false
12
+
13
+ t.timestamps null: false
14
+ end
15
+
16
+ add_index :spina_conferences_institution_translations, :locale, name: :index_9bff91c74e064cdc801502a3787ebe9a10fdecd1
17
+ add_index :spina_conferences_institution_translations, %i[spina_conferences_institution_id locale],
18
+ name: :index_28cf5cb308f9303c2ac50856f314ece46e11d90e, unique: true
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesPresentationTitleAndAbstractTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_presentation_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :title
8
+ t.text :abstract
9
+
10
+ t.string :locale, null: false
11
+ t.references :spina_conferences_presentation, null: false, foreign_key: { on_delete: :cascade }, index: false
12
+
13
+ t.timestamps null: false
14
+ end
15
+
16
+ add_index :spina_conferences_presentation_translations, :locale, name: :index_0cda3821bc3be79968f9671e2a1d655e2307ad5b
17
+ add_index :spina_conferences_presentation_translations, %i[spina_conferences_presentation_id locale],
18
+ name: :index_a9e38adc19b163962a915fe8d3d1f2415f0c83a0, unique: true
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesPresentationAttachmentTypeNameTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_presentation_attachment_type_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :name
8
+
9
+ t.string :locale, null: false
10
+ t.references :spina_conferences_presentation_attachment_type,
11
+ null: false, foreign_key: { on_delete: :cascade }, index: false
12
+
13
+ t.timestamps null: false
14
+ end
15
+
16
+ add_index :spina_conferences_presentation_attachment_type_translations, :locale, name: :index_f3417b08c78b5a87825d3f14b49fb06e76b8bed4
17
+ add_index :spina_conferences_presentation_attachment_type_translations, %i[spina_conferences_presentation_attachment_type_id locale],
18
+ name: :index_1b650dff92fcf8462275bfd83c507ea5c40b3ebb, unique: true
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesPresentationTypeNameTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_presentation_type_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :name
8
+
9
+ t.string :locale, null: false
10
+ t.references :spina_conferences_presentation_type, null: false, foreign_key: { on_delete: :cascade }, index: false
11
+
12
+ t.timestamps null: false
13
+ end
14
+
15
+ add_index :spina_conferences_presentation_type_translations, :locale, name: :index_22c39c0f300797c95ab75d46960dc27730d2065f
16
+ add_index :spina_conferences_presentation_type_translations, %i[spina_conferences_presentation_type_id locale],
17
+ name: :index_fa3b8cb99b12895308e3fc943d6db212ce4408d0, unique: true
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSpinaConferencesRoomBuildingAndNumberTranslations < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def change
5
+ create_table :spina_conferences_room_translations do |t|
6
+ # Translated attribute(s)
7
+ t.string :building
8
+ t.string :number
9
+
10
+ t.string :locale, null: false
11
+ t.references :spina_conferences_room, null: false, foreign_key: { on_delete: :cascade }, index: false
12
+
13
+ t.timestamps null: false
14
+ end
15
+
16
+ add_index :spina_conferences_room_translations, :locale, name: :index_spina_conferences_room_translations_on_locale
17
+ add_index :spina_conferences_room_translations, %i[spina_conferences_room_id locale],
18
+ name: :index_a83edb40b92a36d42b882b3a9adf6d2be543dee7, unique: true
19
+ end
20
+ end
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MoveAttributesToTranslationTables < ActiveRecord::Migration[6.0] # :nodoc:
4
+ def up
5
+ insert_dietary_requirement_translations
6
+ insert_institution_translations
7
+ insert_presentation_translations
8
+ insert_presentation_attachment_type_translations
9
+ insert_presentation_type_translations
10
+ insert_room_translations
11
+ end
12
+
13
+ def down
14
+ update_dietary_requirements
15
+ update_institutions
16
+ update_presentations
17
+ update_presentation_attachment_types
18
+ update_presentation_types
19
+ update_rooms
20
+ add_null_constraints
21
+ end
22
+
23
+ private
24
+
25
+ def add_null_constraints
26
+ change_column_null :spina_conferences_dietary_requirements, :name, false
27
+ change_column_null :spina_conferences_institutions, :name, false
28
+ change_column_null :spina_conferences_institutions, :city, false
29
+ change_column_null :spina_conferences_presentation_types, :name, false
30
+ change_column_null :spina_conferences_presentation_attachment_types, :name, false
31
+ change_column_null :spina_conferences_presentations, :title, false
32
+ change_column_null :spina_conferences_presentations, :abstract, false
33
+ change_column_null :spina_conferences_rooms, :number, false
34
+ change_column_null :spina_conferences_rooms, :building, false
35
+ end
36
+
37
+ def update_dietary_requirements
38
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
39
+ update <<-SQL.squish, 'Add dietary requirement attributes', binds
40
+ UPDATE spina_conferences_dietary_requirements SET name = translations.name
41
+ FROM spina_conferences_dietary_requirement_translations AS translations
42
+ WHERE spina_conferences_dietary_requirement_id = spina_conferences_dietary_requirements.id AND locale = $1
43
+ SQL
44
+ delete <<-SQL.squish, 'Delete translations'
45
+ DELETE FROM spina_conferences_dietary_requirement_translations
46
+ SQL
47
+ end
48
+
49
+ def update_institutions
50
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
51
+ update <<-SQL.squish, 'Add institution attributes', binds
52
+ UPDATE spina_conferences_institutions SET (name, city) = (translations.name, translations.city)
53
+ FROM spina_conferences_institution_translations AS translations
54
+ WHERE translations.spina_conferences_institution_id = spina_conferences_institutions.id AND locale = $1
55
+ SQL
56
+ delete <<-SQL.squish, 'Delete translations'
57
+ DELETE FROM spina_conferences_institution_translations
58
+ SQL
59
+ end
60
+
61
+ def update_presentations
62
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
63
+ update <<-SQL.squish, 'Add presentation attributes', binds
64
+ UPDATE spina_conferences_presentations SET (title, abstract) = (translations.title, translations.abstract)
65
+ FROM spina_conferences_presentation_translations AS translations
66
+ WHERE spina_conferences_presentation_id = spina_conferences_presentations.id AND locale = $1
67
+ SQL
68
+ delete <<-SQL.squish, 'Delete translations'
69
+ DELETE FROM spina_conferences_presentation_translations
70
+ SQL
71
+ end
72
+
73
+ def update_presentation_attachment_types
74
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
75
+ update <<-SQL.squish, 'Add presentation attachment type attributes', binds
76
+ UPDATE spina_conferences_presentation_attachment_types SET name = translations.name
77
+ FROM spina_conferences_presentation_attachment_type_translations AS translations
78
+ WHERE spina_conferences_presentation_attachment_type_id = spina_conferences_presentation_attachment_types.id AND locale = $1
79
+ SQL
80
+ delete <<-SQL.squish, 'Delete translations'
81
+ DELETE FROM spina_conferences_presentation_attachment_type_translations
82
+ SQL
83
+ end
84
+
85
+ def update_presentation_types
86
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
87
+ update <<-SQL.squish, 'Add presentation type attributes', binds
88
+ UPDATE spina_conferences_presentation_types SET name = translations.name
89
+ FROM spina_conferences_presentation_type_translations AS translations
90
+ WHERE spina_conferences_presentation_type_id = spina_conferences_presentation_types.id AND locale = $1
91
+ SQL
92
+ delete <<-SQL.squish, 'Delete translations'
93
+ DELETE FROM spina_conferences_presentation_type_translations
94
+ SQL
95
+ end
96
+
97
+ def update_rooms
98
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
99
+ update <<-SQL.squish, 'Add room attributes', binds
100
+ UPDATE spina_conferences_rooms SET (building, number) = (translations.building, translations.number)
101
+ FROM spina_conferences_room_translations AS translations
102
+ WHERE spina_conferences_room_id = spina_conferences_rooms.id AND locale = $1
103
+ SQL
104
+ delete <<-SQL.squish, 'Delete translations'
105
+ DELETE FROM spina_conferences_room_translations
106
+ SQL
107
+ end
108
+
109
+ def insert_dietary_requirement_translations
110
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
111
+ insert <<-SQL.squish, 'Insert dietary requirement translations', nil, nil, nil, binds
112
+ INSERT INTO spina_conferences_dietary_requirement_translations
113
+ (name, locale, created_at, updated_at, spina_conferences_dietary_requirement_id)
114
+ SELECT name, $1, created_at, updated_at, id FROM spina_conferences_dietary_requirements
115
+ SQL
116
+ end
117
+
118
+ def insert_institution_translations
119
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
120
+ insert <<-SQL.squish, 'Insert institution translations', nil, nil, nil, binds
121
+ INSERT INTO spina_conferences_institution_translations
122
+ (name, city, locale, created_at, updated_at, spina_conferences_institution_id)
123
+ SELECT name, city, $1, created_at, updated_at, id FROM spina_conferences_institutions
124
+ SQL
125
+ end
126
+
127
+ def insert_presentation_translations
128
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
129
+ insert <<-SQL.squish, 'Insert presentation translations', nil, nil, nil, binds
130
+ INSERT INTO spina_conferences_presentation_translations
131
+ (title, abstract, locale, created_at, updated_at, spina_conferences_presentation_id)
132
+ SELECT title, abstract, $1, created_at, updated_at, id FROM spina_conferences_presentations
133
+ SQL
134
+ end
135
+
136
+ def insert_presentation_attachment_type_translations
137
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
138
+ insert <<-SQL.squish, 'Insert presentation attachment type translations', nil, nil, nil, binds
139
+ INSERT INTO spina_conferences_presentation_attachment_type_translations
140
+ (name, locale, created_at, updated_at, spina_conferences_presentation_attachment_type_id)
141
+ SELECT name, $1, created_at, updated_at, id FROM spina_conferences_presentation_attachment_types
142
+ SQL
143
+ end
144
+
145
+ def insert_presentation_type_translations
146
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
147
+ insert <<-SQL.squish, 'Insert presentation type translations', nil, nil, nil, binds
148
+ INSERT INTO spina_conferences_presentation_type_translations
149
+ (name, locale, created_at, updated_at, spina_conferences_presentation_type_id)
150
+ SELECT name, $1, created_at, updated_at, id FROM spina_conferences_presentation_types
151
+ SQL
152
+ end
153
+
154
+ def insert_room_translations
155
+ binds = [ActiveRecord::Relation::QueryAttribute.new('locale', I18n.default_locale, ActiveRecord::Type::String.new)]
156
+ insert <<-SQL.squish, 'Insert room translations', nil, nil, nil, binds
157
+ INSERT INTO spina_conferences_room_translations (building, number, locale, created_at, updated_at, spina_conferences_room_id)
158
+ SELECT building, number, $1, created_at, updated_at, id FROM spina_conferences_rooms
159
+ SQL
160
+ end
161
+ end