Sha256: a41898953a27cf4c24b18d407639dfd73709d3c98aba5a476b17ecad20ae28c3

Contents?: true

Size: 1.61 KB

Versions: 20

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Decidim
  # The form object that handles the data behind updating a user's
  # notifications settings in their profile page.
  class NotificationsSettingsForm < Form
    mimic :user

    attribute :email_on_moderations, Boolean
    attribute :newsletter_notifications, Boolean
    attribute :notifications_from_followed, Boolean
    attribute :notifications_from_own_activity, Boolean
    attribute :allow_public_contact, Boolean
    attribute :notification_settings, Hash
    attribute :notifications_sending_frequency, String

    def map_model(user)
      self.newsletter_notifications = user.newsletter_notifications_at.present?
      self.notifications_from_followed = ["all", "followed-only"].include? user.notification_types
      self.notifications_from_own_activity = ["all", "own-only"].include? user.notification_types
      self.allow_public_contact = user.direct_message_types == "all"
      self.notifications_sending_frequency = user.notifications_sending_frequency
    end

    def newsletter_notifications_at
      return nil unless newsletter_notifications

      Time.current
    end

    def notification_types
      if notifications_from_followed && notifications_from_own_activity
        "all"
      elsif notifications_from_followed
        "followed-only"
      elsif notifications_from_own_activity
        "own-only"
      else
        "none"
      end
    end

    def direct_message_types
      allow_public_contact ? "all" : "followed-only"
    end

    def meet_push_notifications_requirements?
      Rails.application.secrets.dig(:vapid, :enabled) || false
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
decidim-core-0.29.2 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.5 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.1 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.4 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.27.9 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.0 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.3 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.27.8 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.0.rc4 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.0.rc3 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.0.rc2 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.29.0.rc1 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.2 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.27.7 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.1 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.27.6 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.0 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.27.5 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.0.rc5 app/forms/decidim/notifications_settings_form.rb
decidim-core-0.28.0.rc4 app/forms/decidim/notifications_settings_form.rb