decidim-conferences 0.18.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/app/assets/stylesheet/decidim/conferences/conferences.scss +3 -0
  4. data/app/cells/decidim/conferences/conference_address/show.erb +1 -1
  5. data/app/cells/decidim/conferences/conference_speaker/show.erb +2 -2
  6. data/app/cells/decidim/conferences/conference_speaker_cell.rb +6 -2
  7. data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +6 -0
  8. data/app/cells/decidim/conferences/partner_cell.rb +2 -0
  9. data/app/cells/decidim/conferences/photos_list_cell.rb +1 -0
  10. data/app/cells/decidim/conferences/registration_type_cell.rb +2 -0
  11. data/app/commands/decidim/conferences/admin/confirm_conference_registration.rb +1 -0
  12. data/app/commands/decidim/conferences/admin/create_conference.rb +3 -13
  13. data/app/commands/decidim/conferences/admin/create_conference_admin.rb +1 -0
  14. data/app/commands/decidim/conferences/admin/publish_conference.rb +12 -0
  15. data/app/commands/decidim/conferences/admin/update_conference.rb +9 -5
  16. data/app/commands/decidim/conferences/admin/update_diploma.rb +1 -0
  17. data/app/commands/decidim/conferences/join_conference.rb +2 -0
  18. data/app/commands/decidim/conferences/leave_conference.rb +1 -0
  19. data/app/controllers/concerns/decidim/conferences/admin/filterable.rb +27 -0
  20. data/app/controllers/decidim/conferences/admin/conference_registrations_controller.rb +3 -1
  21. data/app/controllers/decidim/conferences/admin/conference_speakers_controller.rb +2 -1
  22. data/app/controllers/decidim/conferences/admin/conference_user_roles_controller.rb +2 -1
  23. data/app/controllers/decidim/conferences/admin/conferences_controller.rb +4 -4
  24. data/app/controllers/decidim/conferences/admin/media_links_controller.rb +2 -1
  25. data/app/controllers/decidim/conferences/admin/partners_controller.rb +2 -1
  26. data/app/controllers/decidim/conferences/admin/registration_types_controller.rb +2 -1
  27. data/app/controllers/decidim/conferences/conference_program_controller.rb +4 -1
  28. data/app/controllers/decidim/conferences/conference_registrations_controller.rb +1 -0
  29. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -0
  30. data/app/controllers/decidim/conferences/media_controller.rb +1 -0
  31. data/app/controllers/decidim/conferences/registration_types_controller.rb +1 -0
  32. data/app/forms/decidim/conferences/admin/conference_form.rb +4 -0
  33. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -0
  34. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -0
  35. data/app/helpers/decidim/conferences/conference_helper.rb +1 -0
  36. data/app/models/decidim/conference.rb +29 -4
  37. data/app/models/decidim/conference_user_role.rb +2 -1
  38. data/app/permissions/decidim/conferences/permissions.rb +15 -0
  39. data/app/presenters/decidim/conferences/admin_log/value_types/role_presenter.rb +1 -0
  40. data/app/presenters/decidim/log/value_types/conference_presenter.rb +1 -0
  41. data/app/queries/decidim/conferences/admin/conference_invites.rb +1 -0
  42. data/app/queries/decidim/conferences/admin/conference_speakers.rb +1 -0
  43. data/app/types/decidim/conferences/conference_media_link_type.rb +19 -0
  44. data/app/types/decidim/conferences/conference_partner_type.rb +20 -0
  45. data/app/types/decidim/conferences/conference_speaker_type.rb +24 -0
  46. data/app/types/decidim/conferences/conference_type.rb +45 -0
  47. data/app/views/decidim/conferences/admin/conference_speakers/index.html.erb +1 -0
  48. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +4 -3
  49. data/app/views/decidim/conferences/admin/conferences/index.html.erb +9 -5
  50. data/app/views/decidim/conferences/admin/partners/index.html.erb +1 -0
  51. data/app/views/decidim/conferences/admin/registration_types/index.html.erb +1 -0
  52. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +1 -1
  53. data/app/views/decidim/conferences/conference_registration_mailer/confirmation.html.erb +1 -1
  54. data/app/views/decidim/conferences/conference_registration_mailer/pending_validation.html.erb +1 -1
  55. data/app/views/decidim/conferences/conferences/_partners.html.erb +1 -1
  56. data/app/views/decidim/conferences/conferences/show.html.erb +3 -3
  57. data/app/views/decidim/conferences/media/index.html.erb +2 -2
  58. data/app/views/layouts/decidim/_conference_hero.html.erb +2 -2
  59. data/app/views/layouts/decidim/admin/conference.html.erb +2 -2
  60. data/app/views/layouts/decidim/diploma.html.erb +2 -2
  61. data/config/locales/ar.yml +4 -2
  62. data/config/locales/ca.yml +1 -0
  63. data/config/locales/cs.yml +2 -1
  64. data/config/locales/el-GR.yml +1 -0
  65. data/config/locales/el.yml +1 -0
  66. data/config/locales/en.yml +1 -0
  67. data/config/locales/es-MX.yml +1 -0
  68. data/config/locales/es-PY.yml +1 -0
  69. data/config/locales/es.yml +1 -0
  70. data/config/locales/fi-plain.yml +1 -0
  71. data/config/locales/fi.yml +1 -0
  72. data/config/locales/hu.yml +2 -1
  73. data/config/locales/is-IS.yml +1 -0
  74. data/config/locales/no.yml +566 -0
  75. data/lib/decidim/conferences/participatory_space.rb +5 -0
  76. data/lib/decidim/conferences/test/factories.rb +16 -0
  77. data/lib/decidim/conferences/version.rb +1 -1
  78. metadata +28 -20
  79. data/app/views/decidim/conferences/conference_widgets/show.html.erb +0 -11
@@ -7,11 +7,12 @@ module Decidim
7
7
  #
8
8
  class PartnersController < Decidim::Conferences::Admin::ApplicationController
9
9
  include Concerns::ConferenceAdmin
10
+ include Decidim::Paginable
10
11
 
11
12
  def index
12
13
  enforce_permission_to :index, :partner
13
14
 
14
- @partners = collection.page(params[:page]).per(15)
15
+ @partners = paginate(collection)
15
16
  end
16
17
 
17
18
  def new
@@ -8,11 +8,12 @@ module Decidim
8
8
  class RegistrationTypesController < Decidim::Conferences::Admin::ApplicationController
9
9
  include Concerns::ConferenceAdmin
10
10
  include Decidim::ApplicationHelper
11
+ include Decidim::Paginable
11
12
 
12
13
  def index
13
14
  enforce_permission_to :index, :registration_type
14
15
 
15
- @registration_types = collection.page(params[:page]).per(15)
16
+ @registration_types = paginate(collection)
16
17
  end
17
18
 
18
19
  def new
@@ -11,7 +11,8 @@ module Decidim
11
11
  helper_method :collection, :conference, :meeting_days, :meeting_component
12
12
 
13
13
  def show
14
- raise ActionController::RoutingError, "No meetings for this conference " if meetings.empty?
14
+ raise ActionController::RoutingError, "No meetings for this conference " if meetings.blank?
15
+
15
16
  enforce_permission_to :list, :program
16
17
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
17
18
  end
@@ -20,11 +21,13 @@ module Decidim
20
21
 
21
22
  def meeting_component
22
23
  return if params[:id].blank?
24
+
23
25
  @meeting_component ||= current_participatory_space.components.where(manifest_name: "meetings").find_by(id: params[:id])
24
26
  end
25
27
 
26
28
  def meetings
27
29
  return unless meeting_component.published? || !meeting_component.presence
30
+
28
31
  @meetings ||= Decidim::Meetings::Meeting.where(component: meeting_component).visible_meeting_for(current_user).order(:start_time)
29
32
  end
30
33
 
@@ -65,6 +65,7 @@ module Decidim
65
65
  def redirect_after_path
66
66
  referer = request.headers["Referer"]
67
67
  return redirect_to(conference_path(conference)) if referer =~ /invitation_token/
68
+
68
69
  redirect_back fallback_location: conference_path(conference)
69
70
  end
70
71
  end
@@ -11,6 +11,7 @@ module Decidim
11
11
 
12
12
  def index
13
13
  raise ActionController::RoutingError, "No speakers for this conference " if speakers.empty?
14
+
14
15
  enforce_permission_to :list, :speakers
15
16
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
16
17
  end
@@ -13,6 +13,7 @@ module Decidim
13
13
 
14
14
  def index
15
15
  raise ActionController::RoutingError, "No media_links for this conference " if media_links.empty? && current_participatory_space.attachments.empty?
16
+
16
17
  enforce_permission_to :list, :media_links
17
18
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
18
19
  end
@@ -11,6 +11,7 @@ module Decidim
11
11
 
12
12
  def index
13
13
  raise ActionController::RoutingError, "No registration types for this conference " if registration_types.empty? && current_participatory_space.registrations_enabled.empty?
14
+
14
15
  enforce_permission_to :list, :registration_types
15
16
  redirect_to decidim_conferences.conference_path(current_participatory_space) unless current_user_can_visit_space?
16
17
  end
@@ -62,6 +62,7 @@ module Decidim
62
62
 
63
63
  def processes_for_select
64
64
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:participatory_processes)
65
+
65
66
  @processes_for_select ||= Decidim.find_participatory_space_manifest(:participatory_processes)
66
67
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |process|
67
68
  [
@@ -73,6 +74,7 @@ module Decidim
73
74
 
74
75
  def assemblies_for_select
75
76
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:assemblies)
77
+
76
78
  @assemblies_for_select ||= Decidim.find_participatory_space_manifest(:assemblies)
77
79
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |assembly|
78
80
  [
@@ -84,6 +86,7 @@ module Decidim
84
86
 
85
87
  def consultations_for_select
86
88
  return unless Decidim.participatory_space_manifests.map(&:name).include?(:consultations)
89
+
87
90
  @consultations_for_select ||= Decidim.find_participatory_space_manifest(:consultations)
88
91
  .participatory_spaces.call(current_organization)&.order(title: :asc)&.map do |consultation|
89
92
  [
@@ -98,6 +101,7 @@ module Decidim
98
101
  def available_slots_greater_than_or_equal_to_registrations_count
99
102
  conference = OrganizationConferences.new(current_organization).query.find_by(slug: slug)
100
103
  return true if conference.blank?
104
+
101
105
  errors.add(:available_slots, :invalid) if available_slots < conference.conference_registrations.count
102
106
  end
103
107
 
@@ -50,6 +50,7 @@ module Decidim
50
50
  def conference_meetings
51
51
  meeting_components = current_participatory_space.components.where(manifest_name: "meetings")
52
52
  return unless meeting_components || conference_meeting_ids.delete("").present?
53
+
53
54
  @conference_meetings ||= Decidim::ConferenceMeeting.where(component: meeting_components).where(id: conference_meeting_ids)
54
55
  end
55
56
 
@@ -36,6 +36,7 @@ module Decidim
36
36
  def conference_meetings
37
37
  meeting_components = current_participatory_space.components.where(manifest_name: "meetings")
38
38
  return unless meeting_components || conference_meeting_ids.delete("").present?
39
+
39
40
  @conference_meetings ||= Decidim::ConferenceMeeting.where(component: meeting_components).where(id: conference_meeting_ids)
40
41
  end
41
42
  end
@@ -8,6 +8,7 @@ module Decidim
8
8
  #
9
9
  def render_date(conference)
10
10
  return l(conference.start_date, format: :decidim_with_month_name_short) if conference.start_date == conference.end_date
11
+
11
12
  "#{l(conference.start_date, format: :decidim_with_month_name_short)} - #{l(conference.end_date, format: :decidim_with_month_name_short)}"
12
13
  end
13
14
  end
@@ -16,14 +16,12 @@ module Decidim
16
16
  include Decidim::Traceable
17
17
  include Decidim::Loggable
18
18
  include Decidim::ParticipatorySpaceResourceable
19
+ include Decidim::Searchable
19
20
 
20
21
  belongs_to :organization,
21
22
  foreign_key: "decidim_organization_id",
22
23
  class_name: "Decidim::Organization"
23
- belongs_to :area,
24
- foreign_key: "decidim_area_id",
25
- class_name: "Decidim::Area",
26
- optional: true
24
+
27
25
  has_many :categories,
28
26
  foreign_key: "decidim_participatory_space_id",
29
27
  foreign_type: "decidim_participatory_space_type",
@@ -58,6 +56,18 @@ module Decidim
58
56
  mount_uploader :main_logo, Decidim::Conferences::DiplomaUploader
59
57
  mount_uploader :signature, Decidim::Conferences::DiplomaUploader
60
58
 
59
+ searchable_fields({
60
+ scope_id: :decidim_scope_id,
61
+ participatory_space: :itself,
62
+ A: :title,
63
+ B: :slogan,
64
+ C: :short_description,
65
+ D: [:description, :objectives],
66
+ datetime: :published_at
67
+ },
68
+ index_on_create: ->(_conference) { false },
69
+ index_on_update: ->(conference) { conference.visible? })
70
+
61
71
  # Scope to return only the promoted conferences.
62
72
  #
63
73
  # Returns an ActiveRecord::Relation.
@@ -87,6 +97,7 @@ module Decidim
87
97
 
88
98
  def has_available_slots?
89
99
  return true if available_slots.zero?
100
+
90
101
  available_slots > conference_registrations.count
91
102
  end
92
103
 
@@ -96,12 +107,26 @@ module Decidim
96
107
 
97
108
  def diploma_sent?
98
109
  return false if diploma_sent_at.nil?
110
+
99
111
  true
100
112
  end
101
113
 
102
114
  def closed?
103
115
  return false if end_date.blank?
116
+
104
117
  end_date < Date.current
105
118
  end
119
+
120
+ def user_roles(role_name = nil)
121
+ roles = Decidim::ConferenceUserRole.where(conference: self)
122
+ return roles if role_name.blank?
123
+
124
+ roles.where(role: role_name)
125
+ end
126
+
127
+ # Allow ransacker to search for a key in a hstore column (`title`.`en`)
128
+ ransacker :title do |parent|
129
+ Arel::Nodes::InfixOperation.new("->>", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
130
+ end
106
131
  end
107
132
  end
@@ -11,7 +11,7 @@ module Decidim
11
11
  belongs_to :conference, foreign_key: "decidim_conference_id", class_name: "Decidim::Conference", optional: true
12
12
  alias participatory_space conference
13
13
 
14
- ROLES = %w(admin collaborator moderator).freeze
14
+ ROLES = %w(admin collaborator moderator valuator).freeze
15
15
  validates :role, inclusion: { in: ROLES }, uniqueness: { scope: [:user, :conference] }
16
16
  validate :user_and_conference_same_organization
17
17
 
@@ -24,6 +24,7 @@ module Decidim
24
24
  # Private: check if the process and the user have the same organization
25
25
  def user_and_conference_same_organization
26
26
  return if !conference || !user
27
+
27
28
  errors.add(:conference, :invalid) unless user.organization == conference.organization
28
29
  end
29
30
  end
@@ -30,6 +30,7 @@ module Decidim
30
30
  end
31
31
 
32
32
  return permission_action unless user
33
+
33
34
  if !has_manageable_conferences? && !user.admin?
34
35
  disallow!
35
36
  return permission_action
@@ -50,6 +51,7 @@ module Decidim
50
51
 
51
52
  moderator_action?
52
53
  collaborator_action?
54
+ valuator_action?
53
55
  conference_admin_action?
54
56
 
55
57
  permission_action
@@ -94,12 +96,14 @@ module Decidim
94
96
  # Checks if it has any manageable conference, with any possible role.
95
97
  def has_manageable_conferences?(role: :any)
96
98
  return unless user
99
+
97
100
  conferences_with_role_privileges(role).any?
98
101
  end
99
102
 
100
103
  # Whether the user can manage the given conference or not.
101
104
  def can_manage_conference?(role: :any)
102
105
  return unless user
106
+
103
107
  conferences_with_role_privileges(role).include? conference
104
108
  end
105
109
 
@@ -123,6 +127,7 @@ module Decidim
123
127
 
124
128
  return allow! if user&.admin?
125
129
  return allow! if conference.published?
130
+
126
131
  toggle_allow(can_manage_conference?)
127
132
  end
128
133
 
@@ -222,12 +227,14 @@ module Decidim
222
227
  # Everyone can read the conference list
223
228
  def user_can_read_conference_list?
224
229
  return unless read_conference_list_permission_action?
230
+
225
231
  toggle_allow(user.admin? || has_manageable_conferences?)
226
232
  end
227
233
 
228
234
  def user_can_read_current_conference?
229
235
  return unless read_conference_list_permission_action?
230
236
  return if permission_action.subject == :conference_list
237
+
231
238
  toggle_allow(user.admin? || can_manage_conference?)
232
239
  end
233
240
 
@@ -246,6 +253,14 @@ module Decidim
246
253
  allow! if permission_action.action == :read || permission_action.action == :preview
247
254
  end
248
255
 
256
+ # Valuators can only read components
257
+ def valuator_action?
258
+ return unless can_manage_conference?(role: :valuator)
259
+
260
+ allow! if permission_action.action == :read && permission_action.subject == :component
261
+ allow! if permission_action.action == :export && permission_action.subject == :component_data
262
+ end
263
+
249
264
  # Process admins can eprform everything *inside* that conference. They cannot
250
265
  # create a conference or perform actions on conference groups or other
251
266
  # conferences.
@@ -13,6 +13,7 @@ module Decidim
13
13
  # Returns an HTML-safe String.
14
14
  def present
15
15
  return if value.blank?
16
+
16
17
  h.t(value, scope: "decidim.admin.models.conference_user_role.roles", default: value)
17
18
  end
18
19
  end
@@ -14,6 +14,7 @@ module Decidim
14
14
  def present
15
15
  return unless value
16
16
  return h.translated_attribute(conference.title) if conference
17
+
17
18
  I18n.t("not_found", id: value, scope: "decidim.log.value_types.conference_presenter")
18
19
  end
19
20
 
@@ -36,6 +36,7 @@ module Decidim
36
36
 
37
37
  def filter_by_search(conference_invites)
38
38
  return conference_invites if @query.blank?
39
+
39
40
  conference_invites.joins(:user).where(
40
41
  User.arel_table[:name].lower.matches("%#{@query}%").or(User.arel_table[:email].lower.matches("%#{@query}%"))
41
42
  )
@@ -32,6 +32,7 @@ module Decidim
32
32
 
33
33
  def filter_by_search(conference_speakers)
34
34
  return conference_speakers if @query.blank?
35
+
35
36
  conference_speakers.where("LOWER(full_name) LIKE LOWER(?)", "%#{@query}%")
36
37
  end
37
38
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Conferences
5
+ # This type represents a conference.
6
+ ConferenceMediaLinkType = GraphQL::ObjectType.define do
7
+ name "ConferenceMediaLink"
8
+ description "A conference media link"
9
+
10
+ field :id, !types.ID, "Internal ID for this media link"
11
+ field :title, Decidim::Core::TranslatedFieldType, "Title for this media link"
12
+ field :link, types.String, "URL for this media link"
13
+ field :date, Decidim::Core::DateType, "Relevant date for the media link"
14
+ field :weight, types.Int, "Order of appearance in which it should be presented"
15
+ field :createdAt, Decidim::Core::DateTimeType, "The time this entry was created", property: :created_at
16
+ field :updatedAt, Decidim::Core::DateTimeType, "The time this entry was updated", property: :updated_at
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Conferences
5
+ # This type represents a conference.
6
+ ConferencePartnerType = GraphQL::ObjectType.define do
7
+ name "ConferencePartner"
8
+ description "A conference partner"
9
+
10
+ field :id, !types.ID, "ID of the resource"
11
+ field :name, types.String, "Partner name"
12
+ field :partnerType, types.String, "Partner type", property: :partner_type
13
+ field :weight, types.Int, "Order of appearance in which it should be presented"
14
+ field :link, types.String, "Relevant URL for this partner"
15
+ field :logo, types.String, "Link to the partner's logo"
16
+ field :createdAt, Decidim::Core::DateTimeType, "The time this partner was created", property: :created_at
17
+ field :updatedAt, Decidim::Core::DateTimeType, "The time this partner was updated", property: :updated_at
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Conferences
5
+ # This type represents a conference.
6
+ ConferenceSpeakerType = GraphQL::ObjectType.define do
7
+ name "ConferenceSpeaker"
8
+ description "A conference speaker"
9
+
10
+ field :id, !types.ID, "Internal ID of the speaker"
11
+ field :fullName, types.String, "Full name of the speaker", property: :full_name
12
+ field :position, Decidim::Core::TranslatedFieldType, "Position of the speaker in the conference"
13
+ field :affiliation, Decidim::Core::TranslatedFieldType, "Affiliation of the speaker"
14
+ field :twitterHandle, types.String, "Twitter handle", property: :twitter_handle
15
+ field :shortBio, Decidim::Core::TranslatedFieldType, "Short biography of the speaker", property: :short_bio
16
+ field :personalUrl, types.String, "Personal URL of the speaker", property: :personal_url
17
+ field :avatar, types.String, "Avatar of the speaker"
18
+ field :user, Decidim::Core::UserType, "Decidim user corresponding to this speaker", property: :user
19
+
20
+ field :createdAt, Decidim::Core::DateTimeType, "The time this member was created ", property: :created_at
21
+ field :updatedAt, Decidim::Core::DateTimeType, "The time this member was updated", property: :updated_at
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Conferences
5
+ # This type represents a conference.
6
+ ConferenceType = GraphQL::ObjectType.define do
7
+ interfaces [
8
+ -> { Decidim::Core::ParticipatorySpaceInterface },
9
+ -> { Decidim::Core::ScopableInterface },
10
+ -> { Decidim::Core::AttachableInterface }
11
+ ]
12
+
13
+ name "Conference"
14
+ description "A conference"
15
+
16
+ field :id, !types.ID, "Internal ID for this conference"
17
+ field :shortDescription, Decidim::Core::TranslatedFieldType, "The short description of this conference", property: :short_description
18
+ field :description, Decidim::Core::TranslatedFieldType, "The description of this conference"
19
+ field :slug, types.String, "The slug of this conference"
20
+ field :hashtag, types.String, "The hashtag for this conference"
21
+ field :slogan, Decidim::Core::TranslatedFieldType, "The slogan of the conference"
22
+ field :location, types.String, "The location of this conference"
23
+ field :createdAt, Decidim::Core::DateTimeType, "The time this conference was created", property: :created_at
24
+ field :updatedAt, Decidim::Core::DateTimeType, "The time this conference was updated", property: :updated_at
25
+ field :publishedAt, Decidim::Core::DateTimeType, "The time this conference was published", property: :published_at
26
+ field :reference, types.String, "Reference prefix for this conference"
27
+
28
+ field :heroImage, types.String, "The hero image for this conference", property: :hero_image
29
+ field :bannerImage, types.String, "The banner image for this conference", property: :banner_image
30
+ field :promoted, types.Boolean, "If this conference is promoted (therefore in the homepage)"
31
+ field :objectives, Decidim::Core::TranslatedFieldType, "The objectives of the conference"
32
+ field :showStatistics, types.Boolean, "If this conference shows the statistics", property: :show_statistics
33
+ field :startDate, Decidim::Core::DateType, "The date this conference starts", property: :start_date
34
+ field :endDate, Decidim::Core::DateType, "The date this conference ends", property: :end_date
35
+ field :registrationsEnabled, types.Boolean, "If the registrations are enabled in this conference", property: :registrations_enabled
36
+ field :availableSlots, types.Int, "The number of available slots in this conference", property: :available_slots
37
+ field :registrationTerms, Decidim::Core::TranslatedFieldType, "The registration terms of this conference", property: :registration_terms
38
+
39
+ field :speakers, types[Decidim::Conferences::ConferenceSpeakerType], "List of speakers in this conference"
40
+ field :partners, types[Decidim::Conferences::ConferencePartnerType], "List of partners in this conference"
41
+ field :categories, types[Decidim::Core::CategoryType], "List of categories in this conference"
42
+ field :mediaLinks, types[Decidim::Conferences::ConferenceMediaLinkType], "List of media links in this conference", property: :media_links
43
+ end
44
+ end
45
+ end