decidim-conferences 0.18.1 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
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