app/commands/decidim/conferences/admin/update_conference.rb in decidim-conferences-0.28.4 vs app/commands/decidim/conferences/admin/update_conference.rb in decidim-conferences-0.29.0.rc1

- old
+ new

@@ -3,155 +3,97 @@ module Decidim module Conferences module Admin # A command with all the business logic when creating a new participatory # conference in the system. - class UpdateConference < Decidim::Command - include ::Decidim::AttachmentAttributesMethods + class UpdateConference < Decidim::Commands::UpdateResource + fetch_file_attributes :hero_image, :banner_image - # Public: Initializes the command. - # - # conference - the Conference to update - # form - A form object with the params. - def initialize(conference, form) - @conference = conference - @form = form - end + fetch_form_attributes :title, :slogan, :slug, :weight, :hashtag, :description, :short_description, + :objectives, :location, :start_date, :end_date, :promoted, :show_statistics, + :scopes_enabled, :scope, :registrations_enabled - # Executes the command. Broadcasts these events: - # - # - :ok when everything is valid. - # - :invalid if the form was not valid and we could not proceed. - # - # Returns nothing. - def call - return broadcast(:invalid) if form.invalid? + private - update_conference + def run_after_hooks + send_notification_registrations_enabled if should_notify_followers_registrations_enabled? + send_notification_update_conference if should_notify_followers_update_conference? + schedule_upcoming_conference_notification if start_date_changed? + link_participatory_processes link_assemblies - - if @conference.valid? - broadcast(:ok, @conference) - else - form.errors.add(:hero_image, @conference.errors[:hero_image]) if @conference.errors.include? :hero_image - form.errors.add(:banner_image, @conference.errors[:banner_image]) if @conference.errors.include? :banner_image - broadcast(:invalid) - end end - private + def registration_attributes + return {} unless form.registrations_enabled - attr_reader :form, :conference - - def update_conference - @conference.assign_attributes(attributes) - save_conference if @conference.valid? - end - - def save_conference - transaction do - update_conference_registrations - @conference.save! - send_notification_registrations_enabled if should_notify_followers_registrations_enabled? - send_notification_update_conference if should_notify_followers_update_conference? - schedule_upcoming_conference_notification if start_date_changed? - Decidim.traceability.perform_action!(:update, @conference, form.current_user) do - @conference - end - end - end - - def update_conference_registrations - @conference.registrations_enabled = form.registrations_enabled - - if form.registrations_enabled - @conference.available_slots = form.available_slots - @conference.registration_terms = form.registration_terms - end - end - - def attributes { - title: form.title, - slogan: form.slogan, - slug: form.slug, - weight: form.weight, - hashtag: form.hashtag, - description: form.description, - short_description: form.short_description, - objectives: form.objectives, - location: form.location, - start_date: form.start_date, - end_date: form.end_date, - promoted: form.promoted, - scopes_enabled: form.scopes_enabled, - scope: form.scope, - show_statistics: form.show_statistics - }.merge( - attachment_attributes(:hero_image, :banner_image) - ) + available_slots: form.available_slots, + registration_terms: form.registration_terms + } end + def attributes = super.merge(registration_attributes) + def send_notification_registrations_enabled Decidim::EventsManager.publish( event: "decidim.events.conferences.registrations_enabled", event_class: Decidim::Conferences::ConferenceRegistrationsEnabledEvent, - resource: @conference, - followers: @conference.followers + resource:, + followers: resource.followers ) end def should_notify_followers_registrations_enabled? - @conference.previous_changes["registrations_enabled"].present? && - @conference.registrations_enabled? && - @conference.published? + resource.previous_changes["registrations_enabled"].present? && + resource.registrations_enabled? && + resource.published? end def send_notification_update_conference Decidim::EventsManager.publish( event: "decidim.events.conferences.conference_updated", event_class: Decidim::Conferences::UpdateConferenceEvent, - resource: @conference, - followers: @conference.followers + resource:, + followers: resource.followers ) end def should_notify_followers_update_conference? - important_attributes.any? { |attr| @conference.previous_changes[attr].present? } && - @conference.published? + important_attributes.any? { |attr| resource.previous_changes[attr].present? } && + resource.published? end def important_attributes %w(start_date end_date location) end def start_date_changed? - @conference.previous_changes["start_date"].present? + resource.previous_changes["start_date"].present? end def schedule_upcoming_conference_notification - checksum = Decidim::Conferences::UpcomingConferenceNotificationJob.generate_checksum(@conference) + checksum = Decidim::Conferences::UpcomingConferenceNotificationJob.generate_checksum(resource) Decidim::Conferences::UpcomingConferenceNotificationJob - .set(wait_until: (@conference.start_date - 2.days).to_s) - .perform_later(@conference.id, checksum) + .set(wait_until: (resource.start_date - 2.days).to_s) + .perform_later(resource.id, checksum) end def participatory_processes - @participatory_processes ||= @conference.participatory_space_sibling_scope(:participatory_processes).where(id: @form.participatory_processes_ids) + @participatory_processes ||= resource.participatory_space_sibling_scope(:participatory_processes).where(id: form.participatory_processes_ids) end def link_participatory_processes - @conference.link_participatory_space_resources(participatory_processes, "included_participatory_processes") + resource.link_participatory_space_resources(participatory_processes, "included_participatory_processes") end def assemblies - @assemblies ||= @conference.participatory_space_sibling_scope(:assemblies).where(id: @form.assemblies_ids) + @assemblies ||= resource.participatory_space_sibling_scope(:assemblies).where(id: form.assemblies_ids) end def link_assemblies - @conference.link_participatory_space_resources(assemblies, "included_assemblies") + resource.link_participatory_space_resources(assemblies, "included_assemblies") end end end end end