decidim-conferences 0.28.5 → 0.29.0.rc1

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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/conferences/conference_g_cell.rb +2 -2
  3. data/app/cells/decidim/conferences/conference_speaker_cell.rb +1 -1
  4. data/app/cells/decidim/conferences/content_blocks/highlighted_conferences_cell.rb +0 -2
  5. data/app/cells/decidim/conferences/linked_participatory_spaces_cell.rb +0 -1
  6. data/app/cells/decidim/conferences/media_link/show.erb +1 -1
  7. data/app/cells/decidim/conferences/media_link_cell.rb +0 -3
  8. data/app/cells/decidim/conferences/partner/image.erb +1 -1
  9. data/app/cells/decidim/conferences/partner_cell.rb +1 -1
  10. data/app/cells/decidim/conferences/registration_type_cell.rb +1 -5
  11. data/app/commands/decidim/conferences/admin/create_conference.rb +20 -65
  12. data/app/commands/decidim/conferences/admin/create_conference_speaker.rb +17 -81
  13. data/app/commands/decidim/conferences/admin/create_media_link.rb +10 -44
  14. data/app/commands/decidim/conferences/admin/create_partner.rb +9 -62
  15. data/app/commands/decidim/conferences/admin/create_registration_type.rb +15 -51
  16. data/app/commands/decidim/conferences/admin/destroy_conference_speaker.rb +6 -38
  17. data/app/commands/decidim/conferences/admin/destroy_media_link.rb +6 -38
  18. data/app/commands/decidim/conferences/admin/destroy_partner.rb +6 -38
  19. data/app/commands/decidim/conferences/admin/destroy_registration_type.rb +6 -38
  20. data/app/commands/decidim/conferences/admin/publish_conference_speaker.rb +51 -0
  21. data/app/commands/decidim/conferences/admin/unpublish_conference_speaker.rb +44 -0
  22. data/app/commands/decidim/conferences/admin/update_conference.rb +35 -93
  23. data/app/commands/decidim/conferences/admin/update_conference_speaker.rb +17 -74
  24. data/app/commands/decidim/conferences/admin/update_media_link.rb +8 -44
  25. data/app/commands/decidim/conferences/admin/update_partner.rb +10 -61
  26. data/app/commands/decidim/conferences/admin/update_registration_type.rb +12 -47
  27. data/app/controllers/concerns/decidim/conferences/admin/conferences_invites/filterable.rb +41 -0
  28. data/app/controllers/decidim/conferences/admin/conference_invites_controller.rb +8 -3
  29. data/app/controllers/decidim/conferences/admin/conference_speakers_controller.rb +33 -1
  30. data/app/controllers/decidim/conferences/admin/conferences_controller.rb +1 -1
  31. data/app/controllers/decidim/conferences/admin/media_links_controller.rb +1 -1
  32. data/app/controllers/decidim/conferences/admin/partners_controller.rb +1 -1
  33. data/app/controllers/decidim/conferences/admin/registration_types_controller.rb +1 -1
  34. data/app/controllers/decidim/conferences/application_controller.rb +4 -1
  35. data/app/controllers/decidim/conferences/conference_program_controller.rb +1 -2
  36. data/app/controllers/decidim/conferences/conference_speakers_controller.rb +1 -4
  37. data/app/controllers/decidim/conferences/conferences_controller.rb +1 -4
  38. data/app/controllers/decidim/conferences/media_controller.rb +1 -4
  39. data/app/controllers/decidim/conferences/registration_types_controller.rb +0 -3
  40. data/app/events/decidim/conferences/conference_role_assigned_event.rb +0 -5
  41. data/app/forms/decidim/conferences/admin/conference_form.rb +5 -5
  42. data/app/forms/decidim/conferences/admin/conference_speaker_form.rb +1 -1
  43. data/app/forms/decidim/conferences/admin/registration_type_form.rb +1 -1
  44. data/app/helpers/decidim/conferences/conference_helper.rb +2 -1
  45. data/app/mailers/decidim/conferences/admin/send_conference_diploma_mailer.rb +5 -9
  46. data/app/models/decidim/conference.rb +2 -2
  47. data/app/models/decidim/conference_speaker.rb +2 -0
  48. data/app/permissions/decidim/conferences/permissions.rb +2 -2
  49. data/app/presenters/decidim/conferences/admin_log/conference_speaker_presenter.rb +2 -1
  50. data/app/views/decidim/conferences/admin/conference_invites/_form.html.erb +5 -5
  51. data/app/views/decidim/conferences/admin/conference_invites/index.html.erb +1 -33
  52. data/app/views/decidim/conferences/admin/conference_registrations/index.html.erb +2 -4
  53. data/app/views/decidim/conferences/admin/conference_speakers/index.html.erb +11 -1
  54. data/app/views/decidim/conferences/admin/conference_user_roles/index.html.erb +1 -1
  55. data/app/views/decidim/conferences/admin/invite_join_conference_mailer/invite.html.erb +1 -1
  56. data/app/views/decidim/conferences/admin/media_links/index.html.erb +1 -1
  57. data/app/views/decidim/conferences/admin/media_links/new.html.erb +1 -1
  58. data/app/views/decidim/conferences/admin/partners/index.html.erb +3 -3
  59. data/app/views/decidim/conferences/admin/registration_types/index.html.erb +1 -1
  60. data/app/views/decidim/conferences/admin/send_conference_diploma_mailer/diploma_user.html.erb +7 -11
  61. data/app/views/decidim/conferences/conference_program/_program_item.html.erb +1 -1
  62. data/app/views/decidim/conferences/conference_speakers/index.html.erb +1 -0
  63. data/app/views/decidim/conferences/conferences/_conference_hero.html.erb +1 -1
  64. data/app/views/decidim/conferences/conferences/show.html.erb +5 -3
  65. data/app/views/decidim/conferences/media/index.html.erb +1 -0
  66. data/app/views/decidim/conferences/registration_types/index.html.erb +2 -1
  67. data/app/views/devise/mailer/join_conference.html.erb +1 -1
  68. data/app/views/devise/mailer/join_conference.text.erb +1 -1
  69. data/app/views/layouts/decidim/diploma.html.erb +1 -1
  70. data/config/initializers/wicked_pdf.rb +6 -4
  71. data/config/locales/ar.yml +21 -4
  72. data/config/locales/bg.yml +27 -6
  73. data/config/locales/ca.yml +18 -20
  74. data/config/locales/cs.yml +18 -21
  75. data/config/locales/de.yml +19 -21
  76. data/config/locales/el.yml +21 -6
  77. data/config/locales/en.yml +25 -27
  78. data/config/locales/es-MX.yml +18 -20
  79. data/config/locales/es-PY.yml +21 -23
  80. data/config/locales/es.yml +14 -16
  81. data/config/locales/eu.yml +169 -171
  82. data/config/locales/fi-plain.yml +17 -19
  83. data/config/locales/fi.yml +23 -25
  84. data/config/locales/fr-CA.yml +19 -21
  85. data/config/locales/fr.yml +19 -21
  86. data/config/locales/ga-IE.yml +0 -6
  87. data/config/locales/gl.yml +21 -4
  88. data/config/locales/hu.yml +21 -6
  89. data/config/locales/id-ID.yml +21 -4
  90. data/config/locales/it.yml +21 -4
  91. data/config/locales/ja.yml +17 -17
  92. data/config/locales/lb.yml +19 -6
  93. data/config/locales/lt.yml +21 -6
  94. data/config/locales/lv.yml +21 -6
  95. data/config/locales/nl.yml +21 -4
  96. data/config/locales/no.yml +21 -6
  97. data/config/locales/pl.yml +27 -6
  98. data/config/locales/pt-BR.yml +21 -51
  99. data/config/locales/pt.yml +21 -6
  100. data/config/locales/ro-RO.yml +12 -19
  101. data/config/locales/sk.yml +21 -6
  102. data/config/locales/sv.yml +52 -37
  103. data/config/locales/tr-TR.yml +21 -4
  104. data/config/locales/zh-CN.yml +21 -4
  105. data/config/locales/zh-TW.yml +21 -6
  106. data/db/migrate/20240613095855_add_published_at_to_conference_speakers.rb +7 -0
  107. data/decidim-conferences.gemspec +3 -2
  108. data/lib/decidim/api/conference_partner_type.rb +1 -1
  109. data/lib/decidim/api/conference_speaker_type.rb +1 -1
  110. data/lib/decidim/api/conference_type.rb +6 -2
  111. data/lib/decidim/conferences/admin_engine.rb +6 -1
  112. data/lib/decidim/conferences/engine.rb +1 -0
  113. data/lib/decidim/conferences/menu.rb +11 -0
  114. data/lib/decidim/conferences/seeds.rb +4 -22
  115. data/lib/decidim/conferences/test/factories.rb +5 -0
  116. data/lib/decidim/conferences/version.rb +1 -1
  117. metadata +33 -23
  118. data/app/cells/decidim/conference_activity_cell.rb +0 -10
  119. data/app/helpers/decidim/conferences/media_attachments_helper.rb +0 -19
  120. data/app/helpers/decidim/conferences/partners_helper.rb +0 -17
  121. data/app/uploaders/decidim/cw/conferences/diploma_uploader.rb +0 -14
  122. data/app/uploaders/decidim/cw/conferences/partner_logo_uploader.rb +0 -15
  123. data/app/views/layouts/decidim/conference.html.erb +0 -17
  124. data/config/locales/bn-BD.yml +0 -1
  125. data/config/locales/bs-BA.yml +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 799db136737580b3118c90054f05f63d5ff38ced48374a73d307f20bfa331c39
4
- data.tar.gz: c65f90582421ac958db3e72ae02fc2154b64493edeb2889865c668235539d290
3
+ metadata.gz: a1b968b73364e0893374bd0ed3f1703a40b61ab120290a16980ce8add800b884
4
+ data.tar.gz: 1159a29d1a0504aff4d859709e938081f52b026c2125dfadc7c4be0f02e2d9ba
5
5
  SHA512:
6
- metadata.gz: 189cfdff2ea5e9939381ac5402c13a53b422628f716a37d44f16bd89ba3ff949aef59fb73637b6295e43def166c5d2a27a7e5067469bc0c62ec937fad8a52952
7
- data.tar.gz: 7c93100b3b430058a66f97779eab26303e899608c49866a6054f2ffdb75aacea209c61474dc98c00fba22bc5d3fde5037182bf3730506b4679949aedbfb967ee
6
+ metadata.gz: 14d3bb61f2c51cb95870e83bdf9c0f7cf2b7860ede6393c81df860b022d4a390c476cc357e5c0457ef28c4850529b2c7e8ec5f8b10f331c1d165babc201094ec
7
+ data.tar.gz: 6fbd57e26675159b4ea3cfedcc366bf58cc44ab9053659723381db36041cca57d0bf7eea3c02d3b7efeb2adc3a47037051a98792b9435904eeea6ca81c8220a9
@@ -11,8 +11,8 @@ module Decidim
11
11
  Decidim::Conferences::Engine.routes.url_helpers.conference_path(model)
12
12
  end
13
13
 
14
- def resource_image_url
15
- model.attached_uploader(:hero_image).url
14
+ def resource_image_path
15
+ model.attached_uploader(:hero_image).path
16
16
  end
17
17
 
18
18
  def metadata_cell
@@ -50,7 +50,7 @@ module Decidim
50
50
  def short_bio
51
51
  return unless model.short_bio.presence
52
52
 
53
- decidim_sanitize_editor_admin translated_attribute model.short_bio
53
+ decidim_escape_translated model.short_bio
54
54
  end
55
55
 
56
56
  def twitter_handle
@@ -4,8 +4,6 @@ module Decidim
4
4
  module Conferences
5
5
  module ContentBlocks
6
6
  class HighlightedConferencesCell < Decidim::ContentBlocks::HighlightedParticipatorySpacesCell
7
- delegate :current_user, to: :controller
8
-
9
7
  def highlighted_spaces
10
8
  @highlighted_spaces ||= OrganizationPrioritizedConferences
11
9
  .new(current_organization, current_user)
@@ -5,7 +5,6 @@ module Decidim
5
5
  # This cell renders a collection of linked Participatory Space of current conference.
6
6
  # `model` is the current conference
7
7
  class LinkedParticipatorySpacesCell < Decidim::ViewModel
8
- include Decidim::ApplicationHelper
9
8
  include Decidim::CardHelper
10
9
 
11
10
  def show
@@ -1,5 +1,5 @@
1
1
  <div class="card__list-content">
2
- <%= link_to decidim_html_escape(translated_attribute(model.title)), model.link, rel: "noopener noreferrer", target: "_blank", class: "card__list-title" %>
2
+ <%= link_to decidim_escape_translated(model.title), model.link, rel: "noopener noreferrer", target: "_blank", class: "card__list-title" %>
3
3
  <div class="card__list-metadata">
4
4
  <span><%= icon "calendar-line" %><%= l(model.date, format: :decidim_short_with_month_name_short) %></span>
5
5
  <span><%= icon "link-m" %><%= model.link %></span>
@@ -4,9 +4,6 @@ module Decidim
4
4
  module Conferences
5
5
  # This cell renders the media link card for an instance of a MediaLink
6
6
  class MediaLinkCell < Decidim::ViewModel
7
- include Decidim::LayoutHelper
8
- include Decidim::SanitizeHelper
9
-
10
7
  def show
11
8
  render
12
9
  end
@@ -1,3 +1,3 @@
1
1
  <div class="conference__grid-item-img">
2
- <%= image_tag model.attached_uploader(:logo).variant_url(:medium), alt: "logo" %>
2
+ <%= image_tag model.attached_uploader(:logo).path(variant: :medium), alt: "logo" %>
3
3
  </div>
@@ -21,7 +21,7 @@ module Decidim
21
21
  def logo
22
22
  return unless model.logo.attached?
23
23
 
24
- "<div class='card p-m'> #{image_tag model.attached_uploader(:logo).variant_url(:medium), alt: "logo"} </div>"
24
+ "<div class='card p-m'> #{image_tag model.attached_uploader(:logo).path(variant: :medium), alt: "logo"} </div>"
25
25
  end
26
26
  end
27
27
  end
@@ -5,9 +5,7 @@ module Decidim
5
5
  # This cell renders the media link card for an instance of a RegistrationType
6
6
  class RegistrationTypeCell < Decidim::ViewModel
7
7
  include ActionView::Helpers::NumberHelper
8
- include Decidim::SanitizeHelper
9
8
  include Decidim::Conferences::Engine.routes.url_helpers
10
- include Decidim::LayoutHelper
11
9
 
12
10
  def show
13
11
  render
@@ -15,10 +13,8 @@ module Decidim
15
13
 
16
14
  private
17
15
 
18
- delegate :current_user, to: :controller, prefix: false
19
-
20
16
  def title
21
- decidim_sanitize translated_attribute model.title
17
+ decidim_sanitize_translated(model.title)
22
18
  end
23
19
 
24
20
  def description
@@ -5,95 +5,50 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new
7
7
  # conference in the system.
8
- class CreateConference < Decidim::Command
9
- # Public: Initializes the command.
10
- #
11
- # form - A form object with the params.
12
- def initialize(form)
13
- @form = form
14
- end
15
-
16
- # Executes the command. Broadcasts these events:
17
- #
18
- # - :ok when everything is valid.
19
- # - :invalid if the form was not valid and we could not proceed.
20
- #
21
- # Returns nothing.
22
- def call
23
- return broadcast(:invalid) if form.invalid?
8
+ class CreateConference < Decidim::Commands::CreateResource
9
+ fetch_file_attributes :hero_image, :banner_image
24
10
 
25
- if conference.persisted?
26
- add_admins_as_followers(conference)
27
- link_participatory_processes
28
- link_assemblies
29
-
30
- broadcast(:ok, conference)
31
- else
32
- form.errors.add(:hero_image, conference.errors[:hero_image]) if conference.errors.include? :hero_image
33
- form.errors.add(:banner_image, conference.errors[:banner_image]) if conference.errors.include? :banner_image
34
- broadcast(:invalid)
35
- end
36
- end
11
+ fetch_form_attributes :organization, :title, :slogan, :slug, :weight, :hashtag, :description,
12
+ :short_description, :objectives, :location, :scopes_enabled, :scope, :start_date, :end_date,
13
+ :promoted, :show_statistics, :registrations_enabled, :available_slots, :registration_terms
37
14
 
38
15
  private
39
16
 
40
- attr_reader :form
41
-
42
- def conference
43
- @conference ||= Decidim.traceability.create(
44
- Conference,
45
- form.current_user,
46
- organization: form.current_organization,
47
- title: form.title,
48
- slogan: form.slogan,
49
- slug: form.slug,
50
- weight: form.weight,
51
- hashtag: form.hashtag,
52
- description: form.description,
53
- short_description: form.short_description,
54
- objectives: form.objectives,
55
- location: form.location,
56
- scopes_enabled: form.scopes_enabled,
57
- scope: form.scope,
58
- start_date: form.start_date,
59
- end_date: form.end_date,
60
- hero_image: form.hero_image,
61
- banner_image: form.banner_image,
62
- promoted: form.promoted,
63
- show_statistics: form.show_statistics,
64
- registrations_enabled: form.registrations_enabled,
65
- available_slots: form.available_slots || 0,
66
- registration_terms: form.registration_terms
67
- )
17
+ def run_after_hooks
18
+ add_admins_as_followers
19
+ link_participatory_processes
20
+ link_assemblies
68
21
  end
69
22
 
70
- def add_admins_as_followers(conference)
71
- conference.organization.admins.each do |admin|
23
+ def resource_class = Decidim::Conference
24
+
25
+ def add_admins_as_followers
26
+ resource.organization.admins.each do |admin|
72
27
  form = Decidim::FollowForm
73
- .from_params(followable_gid: conference.to_signed_global_id.to_s)
28
+ .from_params(followable_gid: resource.to_signed_global_id.to_s)
74
29
  .with_context(
75
- current_organization: conference.organization,
30
+ current_organization: resource.organization,
76
31
  current_user: admin
77
32
  )
78
33
 
79
- Decidim::CreateFollow.new(form, admin).call
34
+ Decidim::CreateFollow.new(form).call
80
35
  end
81
36
  end
82
37
 
83
38
  def participatory_processes
84
- @participatory_processes ||= conference.participatory_space_sibling_scope(:participatory_processes).where(id: @form.participatory_processes_ids)
39
+ @participatory_processes ||= resource.participatory_space_sibling_scope(:participatory_processes).where(id: form.participatory_processes_ids)
85
40
  end
86
41
 
87
42
  def link_participatory_processes
88
- conference.link_participatory_space_resources(participatory_processes, "included_participatory_processes")
43
+ resource.link_participatory_space_resources(participatory_processes, "included_participatory_processes")
89
44
  end
90
45
 
91
46
  def assemblies
92
- @assemblies ||= conference.participatory_space_sibling_scope(:assemblies).where(id: @form.assemblies_ids)
47
+ @assemblies ||= resource.participatory_space_sibling_scope(:assemblies).where(id: form.assemblies_ids)
93
48
  end
94
49
 
95
50
  def link_assemblies
96
- conference.link_participatory_space_resources(assemblies, "included_assemblies")
51
+ resource.link_participatory_space_resources(assemblies, "included_assemblies")
97
52
  end
98
53
  end
99
54
  end
@@ -5,102 +5,38 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new conference
7
7
  # speaker in the system.
8
- class CreateConferenceSpeaker < Decidim::Command
9
- include ::Decidim::AttachmentAttributesMethods
8
+ class CreateConferenceSpeaker < Decidim::Commands::CreateResource
9
+ fetch_file_attributes :avatar
10
10
 
11
- # Public: Initializes the command.
12
- #
13
- # form - A form object with the params.
14
- # conference - The Conference that will hold the speaker
15
- def initialize(form, current_user, conference)
16
- @form = form
17
- @current_user = current_user
18
- @conference = conference
19
- end
20
-
21
- # Executes the command. Broadcasts these events:
22
- #
23
- # - :ok when everything is valid.
24
- # - :invalid if the form was not valid and we could not proceed.
25
- #
26
- # Returns nothing.
27
- def call
28
- return broadcast(:invalid) if form.invalid?
29
-
30
- # We are going to assign the attributes only to handle the validation of the avatar before accessing
31
- # `create_conference_speaker!` which uses `create!`, and this will render an ActiveRecord::RecordInvalid error
32
- # After we assign and check if the object is valid, we will not save the model to let it be handled the old way
33
- # If there is an error we add the error to the form
34
- # We are using this method to assign the conference because if we are trying to assign all at once, there will be thrown a
35
- # Delegation error
36
-
37
- if conference_speaker_with_attributes.valid?
38
-
39
- transaction do
40
- create_conference_speaker!
41
- link_meetings(@conference_speaker)
42
- end
43
- broadcast(:ok)
44
- else
45
- form.errors.add(:avatar, conference_speaker_with_attributes.errors[:avatar]) if conference_speaker_with_attributes.errors.include? :avatar
46
-
47
- broadcast(:invalid)
48
- end
49
- end
50
-
51
- private
52
-
53
- attr_reader :form, :conference, :current_user
11
+ fetch_form_attributes :full_name, :twitter_handle, :personal_url, :position, :affiliation, :short_bio,
12
+ :user
54
13
 
55
- def conference_speaker_attributes
56
- @conference_speaker_attributes ||= form.attributes.slice(
57
- "full_name",
58
- "twitter_handle",
59
- "personal_url",
60
- "position",
61
- "affiliation",
62
- "short_bio"
63
- ).symbolize_keys.merge(
64
- decidim_conference_id: conference.id,
65
- conference:,
66
- user: form.user
67
- ).merge(
68
- attachment_attributes(:avatar)
69
- )
70
- end
14
+ protected
71
15
 
72
- def conference_speaker_with_attributes
73
- conference_speaker = conference.speakers.build
74
- conference_speaker.conference = conference
75
- conference_speaker.assign_attributes(conference_speaker_attributes)
76
- conference_speaker
77
- end
16
+ def resource_class = Decidim::ConferenceSpeaker
78
17
 
79
- def create_conference_speaker!
80
- log_info = {
18
+ def extra_params
19
+ {
81
20
  resource: {
82
21
  title: form.full_name
83
22
  },
84
23
  participatory_space: {
85
- title: conference.title
24
+ title: form.participatory_space.title
86
25
  }
87
26
  }
27
+ end
88
28
 
89
- @conference_speaker = Decidim.traceability.create!(
90
- Decidim::ConferenceSpeaker,
91
- current_user,
92
- conference_speaker_attributes,
93
- log_info
94
- )
29
+ def attributes
30
+ super.merge(conference: form.participatory_space)
95
31
  end
96
32
 
97
- def conference_meetings(speaker)
98
- meeting_components = speaker.conference.components.where(manifest_name: "meetings")
99
- Decidim::ConferenceMeeting.where(component: meeting_components).where(id: @form.attributes[:conference_meeting_ids])
33
+ def conference_meetings
34
+ meeting_components = resource.conference.components.where(manifest_name: "meetings")
35
+ Decidim::ConferenceMeeting.where(component: meeting_components).where(id: form.conference_meeting_ids)
100
36
  end
101
37
 
102
- def link_meetings(conference_speaker)
103
- conference_speaker.conference_meetings = conference_meetings(conference_speaker)
38
+ def run_after_hooks
39
+ resource.conference_meetings = conference_meetings
104
40
  end
105
41
  end
106
42
  end
@@ -5,60 +5,26 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new
7
7
  # media link for conference in the system.
8
- class CreateMediaLink < Decidim::Command
9
- # Public: Initializes the command.
10
- #
11
- # form - A form object with the params.
12
- # conference - The Conference that will hold the speaker
13
- def initialize(form, current_user, conference)
14
- @form = form
15
- @current_user = current_user
16
- @conference = conference
17
- end
18
-
19
- # Executes the command. Broadcasts these events:
20
- #
21
- # - :ok when everything is valid.
22
- # - :invalid if the form was not valid and we could not proceed.
23
- #
24
- # Returns nothing.
25
- def call
26
- return broadcast(:invalid) if form.invalid?
27
-
28
- transaction do
29
- create_media_link!
30
- end
8
+ class CreateMediaLink < Decidim::Commands::CreateResource
9
+ fetch_form_attributes :title, :link, :weight, :date
31
10
 
32
- broadcast(:ok)
33
- end
34
-
35
- private
11
+ protected
36
12
 
37
- attr_reader :form, :conference, :current_user
13
+ def resource_class = Decidim::Conferences::MediaLink
38
14
 
39
- def create_media_link!
40
- log_info = {
15
+ def extra_params
16
+ {
41
17
  resource: {
42
18
  title: form.title
43
19
  },
44
20
  participatory_space: {
45
- title: conference.title
21
+ title: form.current_participatory_space.title
46
22
  }
47
23
  }
24
+ end
48
25
 
49
- @media_link = Decidim.traceability.create!(
50
- Decidim::Conferences::MediaLink,
51
- current_user,
52
- form.attributes.slice(
53
- "title",
54
- "link",
55
- "weight",
56
- "date"
57
- ).symbolize_keys.merge(
58
- conference:
59
- ),
60
- log_info
61
- )
26
+ def attributes
27
+ super.merge(conference: form.current_participatory_space)
62
28
  end
63
29
  end
64
30
  end
@@ -5,81 +5,28 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new partner
7
7
  # in the system.
8
- class CreatePartner < Decidim::Command
9
- # Public: Initializes the command.
10
- #
11
- # form - A form object with the params.
12
- # conference - The Conference that will hold the speaker
13
- def initialize(form, current_user, conference)
14
- @form = form
15
- @current_user = current_user
16
- @conference = conference
17
- end
18
-
19
- # Executes the command. Broadcasts these events:
20
- #
21
- # - :ok when everything is valid.
22
- # - :invalid if the form was not valid and we could not proceed.
23
- #
24
- # Returns nothing.
25
- def call
26
- return broadcast(:invalid) if form.invalid?
27
-
28
- if conference_partner.valid?
29
- transaction do
30
- create_partner!
31
- end
8
+ class CreatePartner < Decidim::Commands::CreateResource
9
+ fetch_file_attributes :logo
32
10
 
33
- broadcast(:ok)
34
- else
35
- form.errors.add(:logo, conference_partner.errors[:logo]) if conference_partner.errors.include? :logo
36
-
37
- broadcast(:invalid)
38
- end
39
- end
11
+ fetch_form_attributes :name, :weight, :link, :partner_type
40
12
 
41
- private
13
+ protected
42
14
 
43
- attr_reader :form, :conference, :current_user
15
+ def resource_class = Decidim::Conferences::Partner
44
16
 
45
- def create_partner!
46
- log_info = {
17
+ def extra_params
18
+ {
47
19
  resource: {
48
20
  title: form.name
49
21
  },
50
22
  participatory_space: {
51
- title: conference.title
23
+ title: form.current_participatory_space.title
52
24
  }
53
25
  }
54
-
55
- @partner = Decidim.traceability.create!(
56
- Decidim::Conferences::Partner,
57
- form.current_user,
58
- attributes,
59
- log_info
60
- )
61
- end
62
-
63
- def conference_partner
64
- return @conference_partner if defined?(@conference_partner)
65
-
66
- @conference_partner = conference.partners.build
67
- @conference_partner.conference = conference
68
- @conference_partner.assign_attributes(attributes)
69
- @conference_partner
70
26
  end
71
27
 
72
28
  def attributes
73
- { conference: }.merge(
74
- form.attributes.slice(
75
- "name",
76
- "weight",
77
- "link",
78
- "partner_type",
79
- "logo",
80
- "remove_avatar"
81
- ).symbolize_keys
82
- )
29
+ super.merge(conference: form.participatory_space)
83
30
  end
84
31
  end
85
32
  end
@@ -5,71 +5,35 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new registration type
7
7
  # in the system.
8
- class CreateRegistrationType < Decidim::Command
9
- # Public: Initializes the command.
10
- #
11
- # form - A form object with the params.
12
- # current_user - The current user hwo do the action of create
13
- # conference - The Conference that will hold the speaker
14
- def initialize(form, current_user, conference)
15
- @form = form
16
- @current_user = current_user
17
- @conference = conference
18
- end
19
-
20
- # Executes the command. Broadcasts these events:
21
- #
22
- # - :ok when everything is valid.
23
- # - :invalid if the form was not valid and we could not proceed.
24
- #
25
- # Returns nothing.
26
- def call
27
- return broadcast(:invalid) if form.invalid?
28
-
29
- transaction do
30
- create_registration_type!
31
- link_meetings(@registration_type)
32
- end
8
+ class CreateRegistrationType < Decidim::Commands::CreateResource
9
+ fetch_form_attributes :title, :description, :price, :weight
33
10
 
34
- broadcast(:ok)
35
- end
36
-
37
- private
11
+ protected
38
12
 
39
- attr_reader :form, :conference, :current_user
13
+ def resource_class = Decidim::Conferences::RegistrationType
40
14
 
41
- def create_registration_type!
42
- log_info = {
15
+ def extra_params
16
+ {
43
17
  resource: {
44
18
  title: form.title
45
19
  },
46
20
  participatory_space: {
47
- title: conference.title
21
+ title: form.participatory_space.title
48
22
  }
49
23
  }
24
+ end
50
25
 
51
- @registration_type = Decidim.traceability.create!(
52
- Decidim::Conferences::RegistrationType,
53
- form.current_user,
54
- form.attributes.slice(
55
- "title",
56
- "description",
57
- "price",
58
- "weight"
59
- ).symbolize_keys.merge(
60
- conference:
61
- ),
62
- log_info
63
- )
26
+ def attributes
27
+ super.merge({ conference: form.participatory_space })
64
28
  end
65
29
 
66
- def conference_meetings(registration_type)
67
- meeting_components = registration_type.conference.components.where(manifest_name: "meetings")
68
- Decidim::ConferenceMeeting.where(component: meeting_components).where(id: @form.attributes[:conference_meeting_ids])
30
+ def conference_meetings
31
+ meeting_components = resource.conference.components.where(manifest_name: "meetings")
32
+ Decidim::ConferenceMeeting.where(component: meeting_components).where(id: form.conference_meeting_ids)
69
33
  end
70
34
 
71
- def link_meetings(registration_type)
72
- registration_type.conference_meetings = conference_meetings(registration_type)
35
+ def run_after_hooks
36
+ resource.conference_meetings = conference_meetings
73
37
  end
74
38
  end
75
39
  end
@@ -5,50 +5,18 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when destroying a conference
7
7
  # speaker in the system.
8
- class DestroyConferenceSpeaker < Decidim::Command
9
- # Public: Initializes the command.
10
- #
11
- # conference_speaker - the ConferenceSpeaker to destroy
12
- # current_user - the user performing this action
13
- def initialize(conference_speaker, current_user)
14
- @conference_speaker = conference_speaker
15
- @current_user = current_user
16
- end
17
-
18
- # Executes the command. Broadcasts these events:
19
- #
20
- # - :ok when everything is valid.
21
- # - :invalid if the form was not valid and we could not proceed.
22
- #
23
- # Returns nothing.
24
- def call
25
- destroy_speaker!
26
- broadcast(:ok)
27
- end
8
+ class DestroyConferenceSpeaker < Decidim::Commands::DestroyResource
9
+ protected
28
10
 
29
- private
30
-
31
- attr_reader :conference_speaker, :current_user
32
-
33
- def destroy_speaker!
34
- log_info = {
11
+ def extra_params
12
+ {
35
13
  resource: {
36
- title: conference_speaker.full_name
14
+ title: resource.full_name
37
15
  },
38
16
  participatory_space: {
39
- title: conference_speaker.conference.title
17
+ title: resource.conference.title
40
18
  }
41
19
  }
42
-
43
- Decidim.traceability.perform_action!(
44
- "delete",
45
- conference_speaker,
46
- current_user,
47
- log_info
48
- ) do
49
- conference_speaker.destroy!
50
- conference_speaker
51
- end
52
20
  end
53
21
  end
54
22
  end