Sha256: 9305db0eb0a300f2a3b4c5d153c5e0100add532d138ca43f181f8c90a691334d

Contents?: true

Size: 1.53 KB

Versions: 17

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Decidim
  # A class used to find the ParticipatoryProcesses that the given user has
  # the specific role privilege.
  class ParticipatoryProcessesWithUserRole < Decidim::Query
    # Syntactic sugar to initialize the class and return the queried objects.
    #
    # user - a User that needs to find which processes can manage
    # role - (optional) a Symbol to specify the role privilege
    def self.for(user, role = :any)
      new(user, role).query
    end

    # Initializes the class.
    #
    # user - a User that needs to find which processes can manage
    # role - (optional) a Symbol to specify the role privilege
    def initialize(user, role = :any)
      @user = user
      @role = role
    end

    # Finds the ParticipatoryProcesses that the given user has role privileges.
    # If the special role ':any' is provided it returns all processes where
    # the user has some kind of role privilege.
    #
    # Returns an ActiveRecord::Relation.
    def query
      # Admin users have all role privileges for all organization processes
      return ParticipatoryProcesses::OrganizationParticipatoryProcesses.new(user.organization).query if user.admin?

      ParticipatoryProcess.where(id: process_ids)
    end

    private

    attr_reader :user, :role

    def process_ids
      user_roles = ParticipatoryProcessUserRole.where(user:) if role == :any
      user_roles = ParticipatoryProcessUserRole.where(user:, role:) if role != :any
      user_roles.pluck(:decidim_participatory_process_id)
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
decidim-core-0.30.0.rc2 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.30.0.rc1 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.2 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.5 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.1 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.4 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.0 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.3 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.0.rc4 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.0.rc3 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.0.rc2 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.29.0.rc1 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.2 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.1 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.0 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.0.rc5 app/queries/decidim/participatory_processes_with_user_role.rb
decidim-core-0.28.0.rc4 app/queries/decidim/participatory_processes_with_user_role.rb