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