Sha256: 17605c7f676fd7b5488021dee70710282258a62fc1c64dc6e4123e27646c8871

Contents?: true

Size: 1.71 KB

Versions: 7

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module Decidim
  # The controller to show the newsletter on the website.
  class NewslettersController < Decidim::ApplicationController
    layout "decidim/mailer", only: [:show]
    helper Decidim::SanitizeHelper
    include Decidim::NewslettersHelper

    helper_method :newsletter

    def show
      @user = current_user
      @organization = current_organization

      if newsletter.sent?
        @encrypted_token = Decidim::NewsletterEncryptor.sent_at_encrypted(@user.id, newsletter.sent_at) if @user.present?
        @body = parse_interpolations(newsletter.body[I18n.locale.to_s], @user, newsletter.id)
      else
        redirect_to "/404"
      end
    end

    def unsubscribe
      encryptor = Decidim::NewsletterEncryptor

      decrypted_string = encryptor.sent_at_decrypted(params[:u])
      user = User.find_by(decidim_organization_id: current_organization.id, id: decrypted_string.split("-").first)
      sent_at_time = Time.zone.at(decrypted_string.split("-").second.to_i)

      if sent_at_time > (Time.current - 15.days)
        UnsubscribeSettings.call(user) do
          on(:ok) do
            flash.now[:notice] = t("newsletters.unsubscribe.success", scope: "decidim")
          end

          on(:invalid) do
            flash.now[:alert] = t("newsletters.unsubscribe.error", scope: "decidim")
            render action: :unsubscribe
          end
        end
      else
        flash.now[:alert] = t("newsletters.unsubscribe.token_error", scope: "decidim")
        render action: :unsubscribe
      end
    end

    def newsletter
      @newsletter ||= collection.find(params[:id])
    end

    private

    def collection
      Newsletter.where(organization: current_organization)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
decidim-core-0.13.1 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.12.2 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.13.0 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.12.1 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.13.0.pre1 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.12.0 app/controllers/decidim/newsletters_controller.rb
decidim-core-0.12.0.pre app/controllers/decidim/newsletters_controller.rb