decidim-conferences 0.15.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +38 -0
- data/Rakefile +3 -0
- data/app/assets/config/admin/decidim_conferences_manifest.js +2 -0
- data/app/assets/config/decidim_conferences_manifest.js +2 -0
- data/app/assets/images/decidim/conferences/conference.svg +6 -0
- data/app/assets/javascripts/decidim/conferences/admin/conference_invite_form.es6 +25 -0
- data/app/assets/javascripts/decidim/conferences/admin/conference_speakers.js.es6 +26 -0
- data/app/assets/javascripts/decidim/conferences/admin/conferences.js.es6 +30 -0
- data/app/assets/javascripts/decidim/conferences/conferences.js.es6 +0 -0
- data/app/cells/decidim/conferences/conference_address/show.erb +11 -0
- data/app/cells/decidim/conferences/conference_address_cell.rb +11 -0
- data/app/cells/decidim/conferences/conference_cell.rb +19 -0
- data/app/cells/decidim/conferences/conference_m/footer.erb +9 -0
- data/app/cells/decidim/conferences/conference_m/tags.erb +1 -0
- data/app/cells/decidim/conferences/conference_m_cell.rb +38 -0
- data/app/cells/decidim/conferences/conference_speaker/show.erb +84 -0
- data/app/cells/decidim/conferences/conference_speaker_cell.rb +86 -0
- data/app/cells/decidim/conferences/content_blocks/highlighted_conferences/show.erb +31 -0
- data/app/cells/decidim/conferences/content_blocks/highlighted_conferences_cell.rb +28 -0
- data/app/cells/decidim/conferences/join_conference_button/registration_confirm.erb +15 -0
- data/app/cells/decidim/conferences/join_conference_button/show.erb +25 -0
- data/app/cells/decidim/conferences/join_conference_button_cell.rb +42 -0
- data/app/cells/decidim/conferences/linked_participatory_spaces/show.erb +10 -0
- data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +44 -0
- data/app/cells/decidim/conferences/media_link/show.erb +9 -0
- data/app/cells/decidim/conferences/media_link_cell.rb +14 -0
- data/app/cells/decidim/conferences/partner/show.erb +11 -0
- data/app/cells/decidim/conferences/partner_cell.rb +24 -0
- data/app/cells/decidim/conferences/photo/show.erb +28 -0
- data/app/cells/decidim/conferences/photo_cell.rb +41 -0
- data/app/cells/decidim/conferences/photos_list/show.erb +8 -0
- data/app/cells/decidim/conferences/photos_list_cell.rb +17 -0
- data/app/commands/decidim/conferences/admin/copy_conference.rb +80 -0
- data/app/commands/decidim/conferences/admin/create_conference.rb +120 -0
- data/app/commands/decidim/conferences/admin/create_conference_admin.rb +112 -0
- data/app/commands/decidim/conferences/admin/create_conference_speaker.rb +81 -0
- data/app/commands/decidim/conferences/admin/create_media_link.rb +66 -0
- data/app/commands/decidim/conferences/admin/create_partner.rb +68 -0
- data/app/commands/decidim/conferences/admin/destroy_conference_admin.rb +53 -0
- data/app/commands/decidim/conferences/admin/destroy_conference_speaker.rb +56 -0
- data/app/commands/decidim/conferences/admin/destroy_media_link.rb +56 -0
- data/app/commands/decidim/conferences/admin/destroy_partner.rb +56 -0
- data/app/commands/decidim/conferences/admin/export_conference_registrations.rb +44 -0
- data/app/commands/decidim/conferences/admin/invite_user_to_join_conference.rb +107 -0
- data/app/commands/decidim/conferences/admin/publish_conference.rb +39 -0
- data/app/commands/decidim/conferences/admin/unpublish_conference.rb +39 -0
- data/app/commands/decidim/conferences/admin/update_conference.rb +161 -0
- data/app/commands/decidim/conferences/admin/update_conference_admin.rb +52 -0
- data/app/commands/decidim/conferences/admin/update_conference_speaker.rb +80 -0
- data/app/commands/decidim/conferences/admin/update_media_link.rb +64 -0
- data/app/commands/decidim/conferences/admin/update_partner.rb +63 -0
- data/app/commands/decidim/conferences/decline_invitation.rb +45 -0
- data/app/commands/decidim/conferences/join_conference.rb +88 -0
- data/app/commands/decidim/conferences/leave_conference.rb +52 -0
- data/app/constraints/decidim/conferences/current_component.rb +28 -0
- data/app/constraints/decidim/conferences/current_conference.rb +43 -0
- data/app/controllers/concerns/decidim/conferences/admin/conference_context.rb +19 -0
- data/app/controllers/decidim/conferences/admin/application_controller.rb +25 -0
- data/app/controllers/decidim/conferences/admin/categories_controller.rb +13 -0
- data/app/controllers/decidim/conferences/admin/component_permissions_controller.rb +14 -0
- data/app/controllers/decidim/conferences/admin/components_controller.rb +14 -0
- data/app/controllers/decidim/conferences/admin/concerns/conference_admin.rb +48 -0
- data/app/controllers/decidim/conferences/admin/conference_attachment_collections_controller.rb +26 -0
- data/app/controllers/decidim/conferences/admin/conference_attachments_controller.rb +27 -0
- data/app/controllers/decidim/conferences/admin/conference_copies_controller.rb +35 -0
- data/app/controllers/decidim/conferences/admin/conference_invites_controller.rb +55 -0
- data/app/controllers/decidim/conferences/admin/conference_publications_controller.rb +45 -0
- data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +39 -0
- data/app/controllers/decidim/conferences/admin/conference_speakers_controller.rb +86 -0
- data/app/controllers/decidim/conferences/admin/conference_user_roles_controller.rb +101 -0
- data/app/controllers/decidim/conferences/admin/conferences_controller.rb +103 -0
- data/app/controllers/decidim/conferences/admin/exports_controller.rb +14 -0
- data/app/controllers/decidim/conferences/admin/media_links_controller.rb +82 -0
- data/app/controllers/decidim/conferences/admin/moderations_controller.rb +12 -0
- data/app/controllers/decidim/conferences/admin/partners_controller.rb +83 -0
- data/app/controllers/decidim/conferences/application_controller.rb +32 -0
- data/app/controllers/decidim/conferences/conference_program_controller.rb +50 -0
- data/app/controllers/decidim/conferences/conference_registrations_controller.rb +68 -0
- data/app/controllers/decidim/conferences/conference_speakers_controller.rb +39 -0
- data/app/controllers/decidim/conferences/conference_widgets_controller.rb +23 -0
- data/app/controllers/decidim/conferences/conferences_controller.rb +59 -0
- data/app/controllers/decidim/conferences/media_controller.rb +41 -0
- data/app/events/decidim/conferences/conference_registrations_enabled_event.rb +8 -0
- data/app/events/decidim/conferences/conference_registrations_over_percentage_event.rb +13 -0
- data/app/events/decidim/conferences/upcoming_conference_event.rb +8 -0
- data/app/events/decidim/conferences/update_conference_event.rb +8 -0
- data/app/forms/decidim/conferences/admin/conference_copy_form.rb +34 -0
- data/app/forms/decidim/conferences/admin/conference_form.rb +109 -0
- data/app/forms/decidim/conferences/admin/conference_registration_invite_form.rb +24 -0
- data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +76 -0
- data/app/forms/decidim/conferences/admin/conference_user_role_form.rb +30 -0
- data/app/forms/decidim/conferences/admin/media_link_form.rb +42 -0
- data/app/forms/decidim/conferences/admin/partner_form.rb +53 -0
- data/app/helpers/decidim/conferences/admin/conference_speakers_helper.rb +14 -0
- data/app/helpers/decidim/conferences/admin/conferences_helper.rb +28 -0
- data/app/helpers/decidim/conferences/conference_program_helper.rb +21 -0
- data/app/helpers/decidim/conferences/media_attachments_helper.rb +29 -0
- data/app/helpers/decidim/conferences/partners_helper.rb +15 -0
- data/app/jobs/decidim/conferences/upcoming_conference_notification_job.rb +33 -0
- data/app/mailers/decidim/conferences/admin/invite_join_conference_mailer.rb +43 -0
- data/app/mailers/decidim/conferences/conference_registration_mailer.rb +44 -0
- data/app/models/decidim/conference.rb +90 -0
- data/app/models/decidim/conference_meeting.rb +9 -0
- data/app/models/decidim/conference_speaker.rb +34 -0
- data/app/models/decidim/conference_speaker_conference_meeting.rb +8 -0
- data/app/models/decidim/conference_user_role.rb +30 -0
- data/app/models/decidim/conferences/conference_invite.rb +38 -0
- data/app/models/decidim/conferences/conference_registration.rb +23 -0
- data/app/models/decidim/conferences/media_link.rb +17 -0
- data/app/models/decidim/conferences/partner.rb +25 -0
- data/app/permissions/decidim/conferences/permissions.rb +304 -0
- data/app/presenters/decidim/admin/conference_speaker_presenter.rb +18 -0
- data/app/presenters/decidim/conference_meeting_presenter.rb +7 -0
- data/app/presenters/decidim/conference_speaker_presenter.rb +42 -0
- data/app/presenters/decidim/conferences/admin_log/conference_invite_presenter.rb +35 -0
- data/app/presenters/decidim/conferences/admin_log/conference_speaker_presenter.rb +52 -0
- data/app/presenters/decidim/conferences/admin_log/conferences_presenter.rb +55 -0
- data/app/presenters/decidim/conferences/admin_log/conferences_user_role_presenter.rb +53 -0
- data/app/presenters/decidim/conferences/admin_log/media_link_presenter.rb +45 -0
- data/app/presenters/decidim/conferences/admin_log/partner_presenter.rb +47 -0
- data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +22 -0
- data/app/presenters/decidim/conferences/conference_invite_presenter.rb +26 -0
- data/app/presenters/decidim/conferences/conference_stats_presenter.rb +52 -0
- data/app/presenters/decidim/log/value_types/conference_presenter.rb +28 -0
- data/app/queries/decidim/conferences/admin/admin_users.rb +39 -0
- data/app/queries/decidim/conferences/admin/conference_invites.rb +59 -0
- data/app/queries/decidim/conferences/admin/conference_speakers.rb +40 -0
- data/app/queries/decidim/conferences/conference_program_meetings.rb +17 -0
- data/app/queries/decidim/conferences/conference_program_meetings_by_day.rb +20 -0
- data/app/queries/decidim/conferences/conferences_with_user_role.rb +48 -0
- data/app/queries/decidim/conferences/organization_conferences.rb +16 -0
- data/app/queries/decidim/conferences/organization_prioritized_conferences.rb +21 -0
- data/app/queries/decidim/conferences/organization_published_conferences.rb +21 -0
- data/app/queries/decidim/conferences/prioritized_conferences.rb +13 -0
- data/app/queries/decidim/conferences/promoted_conferences.rb +12 -0
- data/app/queries/decidim/conferences/published_conferences.rb +12 -0
- data/app/queries/decidim/conferences/visible_conferences.rb +12 -0
- data/app/serializers/decidim/conferences/conference_registration_serializer.rb +18 -0
- data/app/serializers/decidim/conferences/data_portability_conference_invite_serializer.rb +31 -0
- data/app/serializers/decidim/conferences/data_portability_conference_registration_serializer.rb +28 -0
- data/app/uploaders/decidim/conferences/partner_logo_uploader.rb +15 -0
- data/app/views/decidim/conference_speakers/_conference_speaker.html.erb +1 -0
- data/app/views/decidim/conferences/_conference.html.erb +1 -0
- data/app/views/decidim/conferences/_order_by_conferences.html.erb +3 -0
- data/app/views/decidim/conferences/admin/conference_copies/_form.html.erb +37 -0
- data/app/views/decidim/conferences/admin/conference_copies/new.html.erb +7 -0
- data/app/views/decidim/conferences/admin/conference_invites/_form.html.erb +30 -0
- data/app/views/decidim/conferences/admin/conference_invites/index.html.erb +83 -0
- data/app/views/decidim/conferences/admin/conference_invites/new.html.erb +21 -0
- data/app/views/decidim/conferences/admin/conference_registrations/index.html.erb +43 -0
- data/app/views/decidim/conferences/admin/conference_speakers/_form.html.erb +61 -0
- data/app/views/decidim/conferences/admin/conference_speakers/edit.html.erb +7 -0
- data/app/views/decidim/conferences/admin/conference_speakers/index.html.erb +68 -0
- data/app/views/decidim/conferences/admin/conference_speakers/new.html.erb +7 -0
- data/app/views/decidim/conferences/admin/conference_user_roles/_form.html.erb +22 -0
- data/app/views/decidim/conferences/admin/conference_user_roles/edit.html.erb +7 -0
- data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +65 -0
- data/app/views/decidim/conferences/admin/conference_user_roles/new.html.erb +7 -0
- data/app/views/decidim/conferences/admin/conferences/_form.html.erb +122 -0
- data/app/views/decidim/conferences/admin/conferences/edit.html.erb +18 -0
- data/app/views/decidim/conferences/admin/conferences/index.html.erb +65 -0
- data/app/views/decidim/conferences/admin/conferences/new.html.erb +11 -0
- data/app/views/decidim/conferences/admin/invite_join_conference_mailer/invite.html.erb +12 -0
- data/app/views/decidim/conferences/admin/media_links/_form.html.erb +25 -0
- data/app/views/decidim/conferences/admin/media_links/edit.html.erb +7 -0
- data/app/views/decidim/conferences/admin/media_links/index.html.erb +51 -0
- data/app/views/decidim/conferences/admin/media_links/new.html.erb +7 -0
- data/app/views/decidim/conferences/admin/partners/_form.html.erb +30 -0
- data/app/views/decidim/conferences/admin/partners/edit.html.erb +7 -0
- data/app/views/decidim/conferences/admin/partners/index.html.erb +56 -0
- data/app/views/decidim/conferences/admin/partners/new.html.erb +7 -0
- data/app/views/decidim/conferences/conference_program/_program_item.html.erb +31 -0
- data/app/views/decidim/conferences/conference_program/_program_meeting.html.erb +68 -0
- data/app/views/decidim/conferences/conference_program/show.html.erb +54 -0
- data/app/views/decidim/conferences/conference_registration_mailer/confirmation.html.erb +3 -0
- data/app/views/decidim/conferences/conference_speakers/index.html.erb +19 -0
- data/app/views/decidim/conferences/conference_widgets/show.html.erb +11 -0
- data/app/views/decidim/conferences/conferences/_conferences_sidebar.html.erb +11 -0
- data/app/views/decidim/conferences/conferences/_partners.html.erb +15 -0
- data/app/views/decidim/conferences/conferences/_promoted_conference.html.erb +27 -0
- data/app/views/decidim/conferences/conferences/_statistics.html.erb +10 -0
- data/app/views/decidim/conferences/conferences/index.html.erb +25 -0
- data/app/views/decidim/conferences/conferences/show.html.erb +105 -0
- data/app/views/decidim/conferences/media/_attachments.html.erb +6 -0
- data/app/views/decidim/conferences/media/index.html.erb +31 -0
- data/app/views/devise/mailer/join_conference.html.erb +13 -0
- data/app/views/devise/mailer/join_conference.text.erb +11 -0
- data/app/views/layouts/decidim/_conference_hero.html.erb +44 -0
- data/app/views/layouts/decidim/_conferences_nav.html.erb +90 -0
- data/app/views/layouts/decidim/admin/conference.html.erb +100 -0
- data/app/views/layouts/decidim/admin/conferences.html.erb +11 -0
- data/app/views/layouts/decidim/conference.html.erb +28 -0
- data/config/locales/ca.yml +464 -0
- data/config/locales/de.yml +464 -0
- data/config/locales/en.yml +467 -0
- data/config/locales/es-PY.yml +464 -0
- data/config/locales/es.yml +464 -0
- data/config/locales/eu.yml +464 -0
- data/config/locales/fi.yml +464 -0
- data/config/locales/fr.yml +464 -0
- data/config/locales/gl.yml +464 -0
- data/config/locales/hu.yml +464 -0
- data/config/locales/it.yml +464 -0
- data/config/locales/nl.yml +464 -0
- data/config/locales/pl.yml +476 -0
- data/config/locales/pt-BR.yml +464 -0
- data/config/locales/pt.yml +464 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/sv.yml +464 -0
- data/config/locales/uk.yml +1 -0
- data/db/migrate/20180626151505_add_conferences.rb +40 -0
- data/db/migrate/20180626152015_add_conference_user_roles.rb +17 -0
- data/db/migrate/20180702084256_add_conference_speakers.rb +19 -0
- data/db/migrate/20180706104306_add_conference_invites.rb +16 -0
- data/db/migrate/20180706104825_add_conference_registrations.rb +17 -0
- data/db/migrate/20181004144411_add_conferences_partner.rb +18 -0
- data/db/migrate/20181010133930_add_relation_between_speaker_and_meeting.rb +10 -0
- data/db/migrate/20181015100301_add_conference_media_link.rb +15 -0
- data/db/seeds/Exampledocument.pdf +0 -0
- data/db/seeds/city.jpeg +0 -0
- data/db/seeds/city2.jpeg +0 -0
- data/db/seeds/homepage_image.jpg +0 -0
- data/db/seeds/logo.png +0 -0
- data/lib/decidim/conferences.rb +12 -0
- data/lib/decidim/conferences/admin.rb +10 -0
- data/lib/decidim/conferences/admin_engine.rb +86 -0
- data/lib/decidim/conferences/engine.rb +80 -0
- data/lib/decidim/conferences/participatory_space.rb +177 -0
- data/lib/decidim/conferences/test/factories.rb +153 -0
- data/lib/decidim/conferences/version.rb +10 -0
- 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
|
data/db/seeds/city.jpeg
ADDED
Binary file
|
data/db/seeds/city2.jpeg
ADDED
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,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
|