Sha256: 62a81f56f927af068a51a77e73fcba35a0d7091b876b00e70afa52066b51f7ba

Contents?: true

Size: 1.62 KB

Versions: 9

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

module Decidim
  module Admin
    # A form object to select which users will be sent the selective newsletters
    class SelectiveNewsletterForm < Decidim::Form
      mimic :newsletter

      attribute :participatory_space_types, Array[SelectiveNewsletterParticipatorySpaceTypeForm]
      attribute :scope_ids, Array
      attribute :send_to_all_users, Boolean
      attribute :send_to_participants, Boolean
      attribute :send_to_followers, Boolean

      validates :send_to_all_users, presence: true, unless: ->(form) { form.send_to_participants.present? || form.send_to_followers.present? }
      validates :send_to_followers, presence: true, if: ->(form) { form.send_to_all_users.blank? && form.send_to_participants.blank? }
      validates :send_to_participants, presence: true, if: ->(form) { form.send_to_all_users.blank? && form.send_to_followers.blank? }

      validate :at_least_one_participatory_space_selected

      def map_model(_newsletter)
        self.participatory_space_types = Decidim.participatory_space_manifests.map do |manifest|
          SelectiveNewsletterParticipatorySpaceTypeForm.from_model(manifest: manifest)
        end
      end

      private

      def at_least_one_participatory_space_selected
        return if send_to_all_users && current_user.admin?

        errors.add(:base, "Select atleast one participatory space") if spaces_selected.blank?
      end

      def spaces_selected
        participatory_space_types.map do |type|
          spaces = type.ids.reject(&:empty?)
          [type.manifest_name, spaces] if spaces.present?
        end.compact
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
decidim-admin-0.23.1 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.23.1.rc1 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.23.0 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.22.0 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.21.0 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.20.1 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.20.0 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.19.1 app/forms/decidim/admin/selective_newsletter_form.rb
decidim-admin-0.19.0 app/forms/decidim/admin/selective_newsletter_form.rb