Sha256: 24a2b1b7b67df4d22d4408ab80d793ae0452b8041037e452e219d087d61263c8

Contents?: true

Size: 1.94 KB

Versions: 14

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

module Decidim
  module Plans
    # Common functionality for {Accept,Reject}AccessToPlan.
    class RespondToAccessRequest < Rectify::Command
      # Public: Initializes the command.
      #
      # form     - A form object with the params.
      # plan     - A Decidim::Plans::Plan object.
      # current_user - The current user.
      # requester_user - The user that requested to collaborate.
      def initialize(form, current_user)
        @form = form
        @plan = form.plan
        @current_user = current_user
        @requester_user = form.requester_user
      end

      # Executes the command. Broadcasts these events:
      #
      # - :ok when everything is valid.
      # - :invalid if it wasn't valid and we couldn't proceed.
      #
      # Returns nothing.
      def call
        return broadcast(:invalid) if @form.invalid?
        return broadcast(:invalid) if @current_user.nil?

        transaction do
          @plan.requesters.delete @requester_user

          Decidim::Coauthorship.create(
            coauthorable: @plan,
            author: @requester_user
          )
        end

        notify_plan_requester
        notify_plan_authors
        broadcast(:ok, @requester_user)
      end

      def notify_plan_authors
        Decidim::EventsManager.publish(
          event: authors_event,
          event_class: authors_event_class,
          resource: @plan,
          followers: recipients.uniq,
          extra: {
            requester_id: @requester_user.id
          }
        )
      end

      def notify_plan_requester
        Decidim::EventsManager.publish(
          event: requester_event,
          event_class: requester_event_class,
          resource: @plan,
          affected_users: [@requester_user]
        )
      end

      def recipients; end

      def authors_event; end

      def authors_event_class; end

      def requester_event; end

      def requester_event_class; end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
decidim-plans-0.18.2 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.18.1 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.18.0 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.17.0 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.9 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.8 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.7 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.6 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.5 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.4 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.3 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.2 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.1 app/commands/decidim/plans/respond_to_access_request.rb
decidim-plans-0.16.0 app/commands/decidim/plans/respond_to_access_request.rb