decidim-conferences 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (232) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +38 -0
  3. data/Rakefile +3 -0
  4. data/app/assets/config/admin/decidim_conferences_manifest.js +2 -0
  5. data/app/assets/config/decidim_conferences_manifest.js +2 -0
  6. data/app/assets/images/decidim/conferences/conference.svg +6 -0
  7. data/app/assets/javascripts/decidim/conferences/admin/conference_invite_form.es6 +25 -0
  8. data/app/assets/javascripts/decidim/conferences/admin/conference_speakers.js.es6 +26 -0
  9. data/app/assets/javascripts/decidim/conferences/admin/conferences.js.es6 +30 -0
  10. data/app/assets/javascripts/decidim/conferences/conferences.js.es6 +0 -0
  11. data/app/cells/decidim/conferences/conference_address/show.erb +11 -0
  12. data/app/cells/decidim/conferences/conference_address_cell.rb +11 -0
  13. data/app/cells/decidim/conferences/conference_cell.rb +19 -0
  14. data/app/cells/decidim/conferences/conference_m/footer.erb +9 -0
  15. data/app/cells/decidim/conferences/conference_m/tags.erb +1 -0
  16. data/app/cells/decidim/conferences/conference_m_cell.rb +38 -0
  17. data/app/cells/decidim/conferences/conference_speaker/show.erb +84 -0
  18. data/app/cells/decidim/conferences/conference_speaker_cell.rb +86 -0
  19. data/app/cells/decidim/conferences/content_blocks/highlighted_conferences/show.erb +31 -0
  20. data/app/cells/decidim/conferences/content_blocks/highlighted_conferences_cell.rb +28 -0
  21. data/app/cells/decidim/conferences/join_conference_button/registration_confirm.erb +15 -0
  22. data/app/cells/decidim/conferences/join_conference_button/show.erb +25 -0
  23. data/app/cells/decidim/conferences/join_conference_button_cell.rb +42 -0
  24. data/app/cells/decidim/conferences/linked_participatory_spaces/show.erb +10 -0
  25. data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +44 -0
  26. data/app/cells/decidim/conferences/media_link/show.erb +9 -0
  27. data/app/cells/decidim/conferences/media_link_cell.rb +14 -0
  28. data/app/cells/decidim/conferences/partner/show.erb +11 -0
  29. data/app/cells/decidim/conferences/partner_cell.rb +24 -0
  30. data/app/cells/decidim/conferences/photo/show.erb +28 -0
  31. data/app/cells/decidim/conferences/photo_cell.rb +41 -0
  32. data/app/cells/decidim/conferences/photos_list/show.erb +8 -0
  33. data/app/cells/decidim/conferences/photos_list_cell.rb +17 -0
  34. data/app/commands/decidim/conferences/admin/copy_conference.rb +80 -0
  35. data/app/commands/decidim/conferences/admin/create_conference.rb +120 -0
  36. data/app/commands/decidim/conferences/admin/create_conference_admin.rb +112 -0
  37. data/app/commands/decidim/conferences/admin/create_conference_speaker.rb +81 -0
  38. data/app/commands/decidim/conferences/admin/create_media_link.rb +66 -0
  39. data/app/commands/decidim/conferences/admin/create_partner.rb +68 -0
  40. data/app/commands/decidim/conferences/admin/destroy_conference_admin.rb +53 -0
  41. data/app/commands/decidim/conferences/admin/destroy_conference_speaker.rb +56 -0
  42. data/app/commands/decidim/conferences/admin/destroy_media_link.rb +56 -0
  43. data/app/commands/decidim/conferences/admin/destroy_partner.rb +56 -0
  44. data/app/commands/decidim/conferences/admin/export_conference_registrations.rb +44 -0
  45. data/app/commands/decidim/conferences/admin/invite_user_to_join_conference.rb +107 -0
  46. data/app/commands/decidim/conferences/admin/publish_conference.rb +39 -0
  47. data/app/commands/decidim/conferences/admin/unpublish_conference.rb +39 -0
  48. data/app/commands/decidim/conferences/admin/update_conference.rb +161 -0
  49. data/app/commands/decidim/conferences/admin/update_conference_admin.rb +52 -0
  50. data/app/commands/decidim/conferences/admin/update_conference_speaker.rb +80 -0
  51. data/app/commands/decidim/conferences/admin/update_media_link.rb +64 -0
  52. data/app/commands/decidim/conferences/admin/update_partner.rb +63 -0
  53. data/app/commands/decidim/conferences/decline_invitation.rb +45 -0
  54. data/app/commands/decidim/conferences/join_conference.rb +88 -0
  55. data/app/commands/decidim/conferences/leave_conference.rb +52 -0
  56. data/app/constraints/decidim/conferences/current_component.rb +28 -0
  57. data/app/constraints/decidim/conferences/current_conference.rb +43 -0
  58. data/app/controllers/concerns/decidim/conferences/admin/conference_context.rb +19 -0
  59. data/app/controllers/decidim/conferences/admin/application_controller.rb +25 -0
  60. data/app/controllers/decidim/conferences/admin/categories_controller.rb +13 -0
  61. data/app/controllers/decidim/conferences/admin/component_permissions_controller.rb +14 -0
  62. data/app/controllers/decidim/conferences/admin/components_controller.rb +14 -0
  63. data/app/controllers/decidim/conferences/admin/concerns/conference_admin.rb +48 -0
  64. data/app/controllers/decidim/conferences/admin/conference_attachment_collections_controller.rb +26 -0
  65. data/app/controllers/decidim/conferences/admin/conference_attachments_controller.rb +27 -0
  66. data/app/controllers/decidim/conferences/admin/conference_copies_controller.rb +35 -0
  67. data/app/controllers/decidim/conferences/admin/conference_invites_controller.rb +55 -0
  68. data/app/controllers/decidim/conferences/admin/conference_publications_controller.rb +45 -0
  69. data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +39 -0
  70. data/app/controllers/decidim/conferences/admin/conference_speakers_controller.rb +86 -0
  71. data/app/controllers/decidim/conferences/admin/conference_user_roles_controller.rb +101 -0
  72. data/app/controllers/decidim/conferences/admin/conferences_controller.rb +103 -0
  73. data/app/controllers/decidim/conferences/admin/exports_controller.rb +14 -0
  74. data/app/controllers/decidim/conferences/admin/media_links_controller.rb +82 -0
  75. data/app/controllers/decidim/conferences/admin/moderations_controller.rb +12 -0
  76. data/app/controllers/decidim/conferences/admin/partners_controller.rb +83 -0
  77. data/app/controllers/decidim/conferences/application_controller.rb +32 -0
  78. data/app/controllers/decidim/conferences/conference_program_controller.rb +50 -0
  79. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +68 -0
  80. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +39 -0
  81. data/app/controllers/decidim/conferences/conference_widgets_controller.rb +23 -0
  82. data/app/controllers/decidim/conferences/conferences_controller.rb +59 -0
  83. data/app/controllers/decidim/conferences/media_controller.rb +41 -0
  84. data/app/events/decidim/conferences/conference_registrations_enabled_event.rb +8 -0
  85. data/app/events/decidim/conferences/conference_registrations_over_percentage_event.rb +13 -0
  86. data/app/events/decidim/conferences/upcoming_conference_event.rb +8 -0
  87. data/app/events/decidim/conferences/update_conference_event.rb +8 -0
  88. data/app/forms/decidim/conferences/admin/conference_copy_form.rb +34 -0
  89. data/app/forms/decidim/conferences/admin/conference_form.rb +109 -0
  90. data/app/forms/decidim/conferences/admin/conference_registration_invite_form.rb +24 -0
  91. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +76 -0
  92. data/app/forms/decidim/conferences/admin/conference_user_role_form.rb +30 -0
  93. data/app/forms/decidim/conferences/admin/media_link_form.rb +42 -0
  94. data/app/forms/decidim/conferences/admin/partner_form.rb +53 -0
  95. data/app/helpers/decidim/conferences/admin/conference_speakers_helper.rb +14 -0
  96. data/app/helpers/decidim/conferences/admin/conferences_helper.rb +28 -0
  97. data/app/helpers/decidim/conferences/conference_program_helper.rb +21 -0
  98. data/app/helpers/decidim/conferences/media_attachments_helper.rb +29 -0
  99. data/app/helpers/decidim/conferences/partners_helper.rb +15 -0
  100. data/app/jobs/decidim/conferences/upcoming_conference_notification_job.rb +33 -0
  101. data/app/mailers/decidim/conferences/admin/invite_join_conference_mailer.rb +43 -0
  102. data/app/mailers/decidim/conferences/conference_registration_mailer.rb +44 -0
  103. data/app/models/decidim/conference.rb +90 -0
  104. data/app/models/decidim/conference_meeting.rb +9 -0
  105. data/app/models/decidim/conference_speaker.rb +34 -0
  106. data/app/models/decidim/conference_speaker_conference_meeting.rb +8 -0
  107. data/app/models/decidim/conference_user_role.rb +30 -0
  108. data/app/models/decidim/conferences/conference_invite.rb +38 -0
  109. data/app/models/decidim/conferences/conference_registration.rb +23 -0
  110. data/app/models/decidim/conferences/media_link.rb +17 -0
  111. data/app/models/decidim/conferences/partner.rb +25 -0
  112. data/app/permissions/decidim/conferences/permissions.rb +304 -0
  113. data/app/presenters/decidim/admin/conference_speaker_presenter.rb +18 -0
  114. data/app/presenters/decidim/conference_meeting_presenter.rb +7 -0
  115. data/app/presenters/decidim/conference_speaker_presenter.rb +42 -0
  116. data/app/presenters/decidim/conferences/admin_log/conference_invite_presenter.rb +35 -0
  117. data/app/presenters/decidim/conferences/admin_log/conference_speaker_presenter.rb +52 -0
  118. data/app/presenters/decidim/conferences/admin_log/conferences_presenter.rb +55 -0
  119. data/app/presenters/decidim/conferences/admin_log/conferences_user_role_presenter.rb +53 -0
  120. data/app/presenters/decidim/conferences/admin_log/media_link_presenter.rb +45 -0
  121. data/app/presenters/decidim/conferences/admin_log/partner_presenter.rb +47 -0
  122. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +22 -0
  123. data/app/presenters/decidim/conferences/conference_invite_presenter.rb +26 -0
  124. data/app/presenters/decidim/conferences/conference_stats_presenter.rb +52 -0
  125. data/app/presenters/decidim/log/value_types/conference_presenter.rb +28 -0
  126. data/app/queries/decidim/conferences/admin/admin_users.rb +39 -0
  127. data/app/queries/decidim/conferences/admin/conference_invites.rb +59 -0
  128. data/app/queries/decidim/conferences/admin/conference_speakers.rb +40 -0
  129. data/app/queries/decidim/conferences/conference_program_meetings.rb +17 -0
  130. data/app/queries/decidim/conferences/conference_program_meetings_by_day.rb +20 -0
  131. data/app/queries/decidim/conferences/conferences_with_user_role.rb +48 -0
  132. data/app/queries/decidim/conferences/organization_conferences.rb +16 -0
  133. data/app/queries/decidim/conferences/organization_prioritized_conferences.rb +21 -0
  134. data/app/queries/decidim/conferences/organization_published_conferences.rb +21 -0
  135. data/app/queries/decidim/conferences/prioritized_conferences.rb +13 -0
  136. data/app/queries/decidim/conferences/promoted_conferences.rb +12 -0
  137. data/app/queries/decidim/conferences/published_conferences.rb +12 -0
  138. data/app/queries/decidim/conferences/visible_conferences.rb +12 -0
  139. data/app/serializers/decidim/conferences/conference_registration_serializer.rb +18 -0
  140. data/app/serializers/decidim/conferences/data_portability_conference_invite_serializer.rb +31 -0
  141. data/app/serializers/decidim/conferences/data_portability_conference_registration_serializer.rb +28 -0
  142. data/app/uploaders/decidim/conferences/partner_logo_uploader.rb +15 -0
  143. data/app/views/decidim/conference_speakers/_conference_speaker.html.erb +1 -0
  144. data/app/views/decidim/conferences/_conference.html.erb +1 -0
  145. data/app/views/decidim/conferences/_order_by_conferences.html.erb +3 -0
  146. data/app/views/decidim/conferences/admin/conference_copies/_form.html.erb +37 -0
  147. data/app/views/decidim/conferences/admin/conference_copies/new.html.erb +7 -0
  148. data/app/views/decidim/conferences/admin/conference_invites/_form.html.erb +30 -0
  149. data/app/views/decidim/conferences/admin/conference_invites/index.html.erb +83 -0
  150. data/app/views/decidim/conferences/admin/conference_invites/new.html.erb +21 -0
  151. data/app/views/decidim/conferences/admin/conference_registrations/index.html.erb +43 -0
  152. data/app/views/decidim/conferences/admin/conference_speakers/_form.html.erb +61 -0
  153. data/app/views/decidim/conferences/admin/conference_speakers/edit.html.erb +7 -0
  154. data/app/views/decidim/conferences/admin/conference_speakers/index.html.erb +68 -0
  155. data/app/views/decidim/conferences/admin/conference_speakers/new.html.erb +7 -0
  156. data/app/views/decidim/conferences/admin/conference_user_roles/_form.html.erb +22 -0
  157. data/app/views/decidim/conferences/admin/conference_user_roles/edit.html.erb +7 -0
  158. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +65 -0
  159. data/app/views/decidim/conferences/admin/conference_user_roles/new.html.erb +7 -0
  160. data/app/views/decidim/conferences/admin/conferences/_form.html.erb +122 -0
  161. data/app/views/decidim/conferences/admin/conferences/edit.html.erb +18 -0
  162. data/app/views/decidim/conferences/admin/conferences/index.html.erb +65 -0
  163. data/app/views/decidim/conferences/admin/conferences/new.html.erb +11 -0
  164. data/app/views/decidim/conferences/admin/invite_join_conference_mailer/invite.html.erb +12 -0
  165. data/app/views/decidim/conferences/admin/media_links/_form.html.erb +25 -0
  166. data/app/views/decidim/conferences/admin/media_links/edit.html.erb +7 -0
  167. data/app/views/decidim/conferences/admin/media_links/index.html.erb +51 -0
  168. data/app/views/decidim/conferences/admin/media_links/new.html.erb +7 -0
  169. data/app/views/decidim/conferences/admin/partners/_form.html.erb +30 -0
  170. data/app/views/decidim/conferences/admin/partners/edit.html.erb +7 -0
  171. data/app/views/decidim/conferences/admin/partners/index.html.erb +56 -0
  172. data/app/views/decidim/conferences/admin/partners/new.html.erb +7 -0
  173. data/app/views/decidim/conferences/conference_program/_program_item.html.erb +31 -0
  174. data/app/views/decidim/conferences/conference_program/_program_meeting.html.erb +68 -0
  175. data/app/views/decidim/conferences/conference_program/show.html.erb +54 -0
  176. data/app/views/decidim/conferences/conference_registration_mailer/confirmation.html.erb +3 -0
  177. data/app/views/decidim/conferences/conference_speakers/index.html.erb +19 -0
  178. data/app/views/decidim/conferences/conference_widgets/show.html.erb +11 -0
  179. data/app/views/decidim/conferences/conferences/_conferences_sidebar.html.erb +11 -0
  180. data/app/views/decidim/conferences/conferences/_partners.html.erb +15 -0
  181. data/app/views/decidim/conferences/conferences/_promoted_conference.html.erb +27 -0
  182. data/app/views/decidim/conferences/conferences/_statistics.html.erb +10 -0
  183. data/app/views/decidim/conferences/conferences/index.html.erb +25 -0
  184. data/app/views/decidim/conferences/conferences/show.html.erb +105 -0
  185. data/app/views/decidim/conferences/media/_attachments.html.erb +6 -0
  186. data/app/views/decidim/conferences/media/index.html.erb +31 -0
  187. data/app/views/devise/mailer/join_conference.html.erb +13 -0
  188. data/app/views/devise/mailer/join_conference.text.erb +11 -0
  189. data/app/views/layouts/decidim/_conference_hero.html.erb +44 -0
  190. data/app/views/layouts/decidim/_conferences_nav.html.erb +90 -0
  191. data/app/views/layouts/decidim/admin/conference.html.erb +100 -0
  192. data/app/views/layouts/decidim/admin/conferences.html.erb +11 -0
  193. data/app/views/layouts/decidim/conference.html.erb +28 -0
  194. data/config/locales/ca.yml +464 -0
  195. data/config/locales/de.yml +464 -0
  196. data/config/locales/en.yml +467 -0
  197. data/config/locales/es-PY.yml +464 -0
  198. data/config/locales/es.yml +464 -0
  199. data/config/locales/eu.yml +464 -0
  200. data/config/locales/fi.yml +464 -0
  201. data/config/locales/fr.yml +464 -0
  202. data/config/locales/gl.yml +464 -0
  203. data/config/locales/hu.yml +464 -0
  204. data/config/locales/it.yml +464 -0
  205. data/config/locales/nl.yml +464 -0
  206. data/config/locales/pl.yml +476 -0
  207. data/config/locales/pt-BR.yml +464 -0
  208. data/config/locales/pt.yml +464 -0
  209. data/config/locales/ru.yml +1 -0
  210. data/config/locales/sv.yml +464 -0
  211. data/config/locales/uk.yml +1 -0
  212. data/db/migrate/20180626151505_add_conferences.rb +40 -0
  213. data/db/migrate/20180626152015_add_conference_user_roles.rb +17 -0
  214. data/db/migrate/20180702084256_add_conference_speakers.rb +19 -0
  215. data/db/migrate/20180706104306_add_conference_invites.rb +16 -0
  216. data/db/migrate/20180706104825_add_conference_registrations.rb +17 -0
  217. data/db/migrate/20181004144411_add_conferences_partner.rb +18 -0
  218. data/db/migrate/20181010133930_add_relation_between_speaker_and_meeting.rb +10 -0
  219. data/db/migrate/20181015100301_add_conference_media_link.rb +15 -0
  220. data/db/seeds/Exampledocument.pdf +0 -0
  221. data/db/seeds/city.jpeg +0 -0
  222. data/db/seeds/city2.jpeg +0 -0
  223. data/db/seeds/homepage_image.jpg +0 -0
  224. data/db/seeds/logo.png +0 -0
  225. data/lib/decidim/conferences.rb +12 -0
  226. data/lib/decidim/conferences/admin.rb +10 -0
  227. data/lib/decidim/conferences/admin_engine.rb +86 -0
  228. data/lib/decidim/conferences/engine.rb +80 -0
  229. data/lib/decidim/conferences/participatory_space.rb +177 -0
  230. data/lib/decidim/conferences/test/factories.rb +153 -0
  231. data/lib/decidim/conferences/version.rb +10 -0
  232. metadata +330 -0
@@ -0,0 +1 @@
1
+ uk:
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferences < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conferences do |t|
6
+ t.jsonb :title, null: false
7
+ t.jsonb :slogan, null: false
8
+ t.string :slug, null: false
9
+ t.string :hashtag
10
+ t.string :reference
11
+ t.string :location
12
+ t.integer :decidim_organization_id,
13
+ foreign_key: true,
14
+ index: { name: "index_decidim_conferences_on_decidim_organization_id" }
15
+
16
+ t.jsonb :short_description, null: false
17
+ t.jsonb :description, null: false
18
+ t.string :hero_image
19
+ t.string :banner_image
20
+ t.boolean :promoted, default: false
21
+ t.datetime :published_at
22
+ t.jsonb :objectives, null: false
23
+ t.boolean :show_statistics, default: false
24
+ t.date :start_date
25
+ t.date :end_date
26
+ t.boolean :scopes_enabled, null: false, default: true
27
+ t.integer :decidim_scope_id
28
+
29
+ t.boolean :registrations_enabled, null: false, default: false
30
+ t.integer :available_slots, null: false, default: 0
31
+ t.jsonb :registration_terms
32
+
33
+ t.index [:decidim_organization_id, :slug],
34
+ name: "index_unique_conference_slug_and_organization",
35
+ unique: true
36
+
37
+ t.timestamps
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferenceUserRoles < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conference_user_roles do |t|
6
+ t.integer :decidim_user_id
7
+ t.integer :decidim_conference_id
8
+ t.string :role
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :decidim_conference_user_roles,
13
+ [:decidim_conference_id, :decidim_user_id, :role],
14
+ unique: true,
15
+ name: "index_unique_user_and_conference_role"
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferenceSpeakers < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conference_speakers do |t|
6
+ t.references :decidim_conference, index: true
7
+ t.string :full_name
8
+ t.jsonb :position
9
+ t.jsonb :affiliation
10
+ t.string :twitter_handle
11
+ t.jsonb :short_bio
12
+ t.string :personal_url
13
+ t.string :avatar
14
+ t.references :decidim_user, index: { name: "index_decidim_conference_speaker_on_decidim_user_id" }
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferenceInvites < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conferences_conference_invites do |t|
6
+ t.references :decidim_user, null: false, index: true
7
+ t.references :decidim_conference, null: false,
8
+ index: { name: "idx_decidim_conferences_invites_on_conference_id" }
9
+ t.datetime :sent_at
10
+ t.datetime :accepted_at
11
+ t.datetime :rejected_at
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferenceRegistrations < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conferences_conference_registrations do |t|
6
+ t.references :decidim_user, null: false, index: { name: "index_decidim_conferences_registrations_on_decidim_user_id" }
7
+ t.references :decidim_conference, null: false, index: { name: "index_conferences_registrations_on_decidim_conference" }
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :decidim_conferences_conference_registrations,
13
+ [:decidim_user_id, :decidim_conference_id],
14
+ unique: true,
15
+ name: "decidim_conferences_registrations_user_conference_unique"
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferencesPartner < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conferences_partners do |t|
6
+ t.references :decidim_conference, index: true
7
+ t.string :name, null: false
8
+ t.string :partner_type, null: false
9
+ t.integer :weight, null: false, default: 0
10
+ t.string :link
11
+ t.string :logo, null: false
12
+
13
+ t.timestamps
14
+ end
15
+
16
+ add_index :decidim_conferences_partners, [:weight, :partner_type]
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddRelationBetweenSpeakerAndMeeting < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conference_speaker_conference_meetings do |t|
6
+ t.belongs_to :conference_speaker, null: false, index: { name: "index_meetings_on_decidim_conference_speaker_id" }
7
+ t.belongs_to :conference_meeting, null: false, index: { name: "index_meetings_on_decidim_conference_meeting_id" }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConferenceMediaLink < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_conferences_media_links do |t|
6
+ t.references :decidim_conference, index: true
7
+ t.jsonb :title, null: false
8
+ t.string :link, null: false
9
+ t.date :date
10
+ t.integer :weight, null: false, default: 0
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
Binary file
Binary file
Binary file
Binary file
data/db/seeds/logo.png ADDED
Binary file
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/conferences/admin"
4
+ require "decidim/conferences/engine"
5
+ require "decidim/conferences/admin_engine"
6
+ require "decidim/conferences/participatory_space"
7
+
8
+ module Decidim
9
+ # Base module for the conferences engine.
10
+ module Conferences
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Conferences
5
+ # This module contains all the domain logic associated to Decidim's
6
+ # Conferences component admin panel.
7
+ module Admin
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "active_support/all"
5
+ require "decidim/core"
6
+
7
+ module Decidim
8
+ module Conferences
9
+ # Decidim's Conferences Rails Admin Engine.
10
+ class AdminEngine < ::Rails::Engine
11
+ isolate_namespace Decidim::Conferences::Admin
12
+
13
+ paths["db/migrate"] = nil
14
+ paths["lib/tasks"] = nil
15
+
16
+ routes do
17
+ resources :conferences, param: :slug, except: :show do
18
+ resource :publish, controller: "conference_publications", only: [:create, :destroy]
19
+ resources :copies, controller: "conference_copies", only: [:new, :create]
20
+ resources :speakers, controller: "conference_speakers"
21
+ resources :partners, controller: "partners", except: [:show]
22
+ resources :media_links, controller: "media_links"
23
+ resources :conference_invites, only: [:index, :new, :create]
24
+ resources :conference_registrations, only: :index do
25
+ collection do
26
+ get :export
27
+ end
28
+ end
29
+ resources :user_roles, controller: "conference_user_roles" do
30
+ member do
31
+ post :resend_invitation, to: "conference_user_roles#resend_invitation"
32
+ end
33
+ end
34
+
35
+ resources :attachment_collections, controller: "conference_attachment_collections"
36
+ resources :attachments, controller: "conference_attachments"
37
+ end
38
+
39
+ scope "/conferences/:conference_slug" do
40
+ resources :categories
41
+
42
+ resources :components do
43
+ resource :permissions, controller: "component_permissions"
44
+ member do
45
+ put :publish
46
+ put :unpublish
47
+ end
48
+ resources :exports, only: :create
49
+ end
50
+
51
+ resources :moderations do
52
+ member do
53
+ put :unreport
54
+ put :hide
55
+ end
56
+ end
57
+ end
58
+
59
+ scope "/conferences/:conference_slug/components/:component_id/manage" do
60
+ Decidim.component_manifests.each do |manifest|
61
+ next unless manifest.admin_engine
62
+
63
+ constraints CurrentComponent.new(manifest) do
64
+ mount manifest.admin_engine, at: "/", as: "decidim_admin_conference_#{manifest.name}"
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ initializer "decidim_conferences.admin_assets" do |app|
71
+ app.config.assets.precompile += %w(admin/decidim_conferences_manifest.js)
72
+ end
73
+
74
+ initializer "decidim_conferences.admin_menu" do
75
+ Decidim.menu :admin_menu do |menu|
76
+ menu.item I18n.t("menu.conferences", scope: "decidim.admin"),
77
+ decidim_admin_conferences.conferences_path,
78
+ icon_name: "dial",
79
+ position: 3.5,
80
+ active: :inclusive,
81
+ if: allowed_to?(:enter, :space_area, space_name: :conferences)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "active_support/all"
5
+ require "decidim/core"
6
+
7
+ module Decidim
8
+ module Conferences
9
+ # Decidim's Conferences Rails Engine.
10
+ class Engine < ::Rails::Engine
11
+ isolate_namespace Decidim::Conferences
12
+
13
+ routes do
14
+ get "conferences/:conference_id", to: redirect { |params, _request|
15
+ conference = Decidim::Conference.find(params[:conference_id])
16
+ conference ? "/conferences/#{conference.slug}" : "/404"
17
+ }, constraints: { conference_id: /[0-9]+/ }
18
+
19
+ get "/conferences/:conference_id/f/:component_id", to: redirect { |params, _request|
20
+ conference = Decidim::Conferences.find(params[:conference_id])
21
+ conference ? "/conferences/#{conference.slug}/f/#{params[:component_id]}" : "/404"
22
+ }, constraints: { conference_id: /[0-9]+/ }
23
+
24
+ resources :conferences, only: [:index, :show], param: :slug, path: "conferences" do
25
+ resources :conference_speakers, only: :index, path: "speakers"
26
+ resources :conference_program, only: :show, path: "program"
27
+ resource :conference_widget, only: :show, path: "embed"
28
+ resource :conference_registration, only: [:create, :destroy] do
29
+ collection do
30
+ get :create
31
+ get :decline_invitation
32
+ end
33
+ end
34
+ resources :media, only: :index
35
+ end
36
+ scope "/conferences/:conference_slug/f/:component_id" do
37
+ Decidim.component_manifests.each do |manifest|
38
+ next unless manifest.engine
39
+
40
+ constraints CurrentComponent.new(manifest) do
41
+ mount manifest.engine, at: "/", as: "decidim_conference_#{manifest.name}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ initializer "decidim_conferences.assets" do |app|
48
+ app.config.assets.precompile += %w(decidim_conferences_manifest.js)
49
+ end
50
+
51
+ initializer "decidim_conferences.add_cells_view_paths" do
52
+ Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Conferences::Engine.root}/app/cells")
53
+ Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Conferences::Engine.root}/app/views") # for partials
54
+ end
55
+
56
+ initializer "decidim.stats" do
57
+ Decidim.stats.register :conferences_count, priority: StatsRegistry::HIGH_PRIORITY do |organization, _start_at, _end_at|
58
+ Decidim::Conference.where(organization: organization).public_spaces.count
59
+ end
60
+ end
61
+
62
+ initializer "decidim_conferences.menu" do
63
+ Decidim.menu :menu do |menu|
64
+ menu.item I18n.t("menu.conferences", scope: "decidim"),
65
+ decidim_conferences.conferences_path,
66
+ position: 6,
67
+ if: Decidim::Conference.where(organization: current_organization).published.any?,
68
+ active: :inclusive
69
+ end
70
+ end
71
+
72
+ initializer "decidim_conferences.content_blocks" do
73
+ Decidim.content_blocks.register(:homepage, :highlighted_conferences) do |content_block|
74
+ content_block.cell = "decidim/conferences/content_blocks/highlighted_conferences"
75
+ content_block.public_name_key = "decidim.conferences.content_blocks.highlighted_conferences.name"
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ Decidim.register_participatory_space(:conferences) do |participatory_space|
4
+ participatory_space.icon = "decidim/conferences/conference.svg"
5
+ participatory_space.model_class_name = "Decidim::Conference"
6
+
7
+ participatory_space.participatory_spaces do |organization|
8
+ Decidim::Conferences::OrganizationConferences.new(organization).query
9
+ end
10
+
11
+ participatory_space.permissions_class_name = "Decidim::Conferences::Permissions"
12
+ participatory_space.data_portable_entities = [
13
+ "Decidim::Conferences::ConferenceRegistration",
14
+ "Decidim::Conferences::ConferenceInvite"
15
+ ]
16
+
17
+ participatory_space.register_resource(:conference) do |resource|
18
+ resource.model_class_name = "Decidim::Conference"
19
+ resource.card = "decidim/conferences/conference"
20
+ end
21
+
22
+ participatory_space.context(:public) do |context|
23
+ context.engine = Decidim::Conferences::Engine
24
+ context.layout = "layouts/decidim/conference"
25
+ end
26
+
27
+ participatory_space.context(:admin) do |context|
28
+ context.engine = Decidim::Conferences::AdminEngine
29
+ context.layout = "layouts/decidim/admin/conference"
30
+ end
31
+
32
+ participatory_space.seeds do
33
+ organization = Decidim::Organization.first
34
+ seeds_root = File.join(__dir__, "..", "..", "..", "db", "seeds")
35
+
36
+ Decidim::ContentBlock.create(
37
+ organization: organization,
38
+ weight: 33,
39
+ scope: :homepage,
40
+ manifest_name: :highlighted_conferences,
41
+ published_at: Time.current
42
+ )
43
+
44
+ 2.times do |_n|
45
+ conference = Decidim::Conference.create!(
46
+ title: Decidim::Faker::Localized.sentence(5),
47
+ slogan: Decidim::Faker::Localized.sentence(2),
48
+ slug: Faker::Internet.unique.slug(nil, "-"),
49
+ hashtag: "##{Faker::Lorem.word}",
50
+ short_description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
51
+ Decidim::Faker::Localized.sentence(3)
52
+ end,
53
+ description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
54
+ Decidim::Faker::Localized.paragraph(3)
55
+ end,
56
+ hero_image: File.new(File.join(seeds_root, "city.jpeg")),
57
+ banner_image: File.new(File.join(seeds_root, "city2.jpeg")),
58
+ promoted: true,
59
+ published_at: 2.weeks.ago,
60
+ organization: organization,
61
+ objectives: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
62
+ Decidim::Faker::Localized.paragraph(3)
63
+ end,
64
+ start_date: Time.current,
65
+ end_date: 2.months.from_now.at_midnight,
66
+ registrations_enabled: [true, false].sample,
67
+ available_slots: (10..50).step(10).to_a.sample,
68
+ registration_terms: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
69
+ Decidim::Faker::Localized.paragraph(3)
70
+ end
71
+ )
72
+
73
+ # Create users with specific roles
74
+ Decidim::ConferenceUserRole::ROLES.each do |role|
75
+ email = "conference_#{conference.id}_#{role}@example.org"
76
+
77
+ user = Decidim::User.find_or_initialize_by(email: email)
78
+ user.update!(
79
+ name: Faker::Name.name,
80
+ nickname: Faker::Twitter.unique.screen_name,
81
+ password: "decidim123456",
82
+ password_confirmation: "decidim123456",
83
+ organization: organization,
84
+ confirmed_at: Time.current,
85
+ locale: I18n.default_locale,
86
+ tos_agreement: true
87
+ )
88
+
89
+ Decidim::ConferenceUserRole.find_or_create_by!(
90
+ user: user,
91
+ conference: conference,
92
+ role: role
93
+ )
94
+ end
95
+
96
+ attachment_collection = Decidim::AttachmentCollection.create!(
97
+ name: Decidim::Faker::Localized.word,
98
+ description: Decidim::Faker::Localized.sentence(5),
99
+ collection_for: conference
100
+ )
101
+
102
+ Decidim::Attachment.create!(
103
+ title: Decidim::Faker::Localized.sentence(2),
104
+ description: Decidim::Faker::Localized.sentence(5),
105
+ file: File.new(File.join(seeds_root, "Exampledocument.pdf")),
106
+ attachment_collection: attachment_collection,
107
+ attached_to: conference
108
+ )
109
+
110
+ Decidim::Attachment.create!(
111
+ title: Decidim::Faker::Localized.sentence(2),
112
+ description: Decidim::Faker::Localized.sentence(5),
113
+ file: File.new(File.join(seeds_root, "city.jpeg")),
114
+ attached_to: conference
115
+ )
116
+
117
+ Decidim::Attachment.create!(
118
+ title: Decidim::Faker::Localized.sentence(2),
119
+ description: Decidim::Faker::Localized.sentence(5),
120
+ file: File.new(File.join(seeds_root, "Exampledocument.pdf")),
121
+ attached_to: conference
122
+ )
123
+
124
+ 2.times do
125
+ Decidim::Category.create!(
126
+ name: Decidim::Faker::Localized.sentence(5),
127
+ description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
128
+ Decidim::Faker::Localized.paragraph(3)
129
+ end,
130
+ participatory_space: conference
131
+ )
132
+ end
133
+
134
+ 5.times do
135
+ Decidim::ConferenceSpeaker.create!(
136
+ user: conference.organization.users.sample,
137
+ full_name: Faker::Name.name,
138
+ position: Decidim::Faker::Localized.word,
139
+ affiliation: Decidim::Faker::Localized.paragraph(3),
140
+ short_bio: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
141
+ Decidim::Faker::Localized.paragraph(3)
142
+ end,
143
+ twitter_handle: Faker::Twitter.unique.screen_name,
144
+ personal_url: Faker::Internet.url,
145
+ conference: conference
146
+ )
147
+ end
148
+
149
+ Decidim::Conferences::Partner::TYPES.map do |type|
150
+ 4.times do
151
+ Decidim::Conferences::Partner.create!(
152
+ name: Faker::Name.name,
153
+ weight: Faker::Number.between(1, 10),
154
+ link: Faker::Internet.url,
155
+ partner_type: type,
156
+ logo: File.new(File.join(seeds_root, "logo.png")),
157
+ conference: conference
158
+ )
159
+ end
160
+ end
161
+
162
+ 5.times do
163
+ Decidim::Conferences::MediaLink.create!(
164
+ title: Decidim::Faker::Localized.sentence(2),
165
+ link: Faker::Internet.url,
166
+ date: Date.current,
167
+ weight: Faker::Number.between(1, 10),
168
+ conference: conference
169
+ )
170
+ end
171
+
172
+ Decidim.component_manifests.each do |manifest|
173
+ manifest.seed!(conference.reload)
174
+ end
175
+ end
176
+ end
177
+ end