File: assignees.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (34 lines) | stat: -rw-r--r-- 916 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# frozen_string_literal: true

module WorkItems
  module Callbacks
    class Assignees < Base
      def before_create
        set_assignee_ids
      end

      def before_update
        set_assignee_ids
      end

      private

      def set_assignee_ids
        params[:assignee_ids] = [] if excluded_in_new_type?
        return unless params.has_key?(:assignee_ids) && has_permission?(:set_work_item_metadata)

        new_assignee_ids = filter_assignee_ids(params[:assignee_ids])
        return if new_assignee_ids.sort == work_item.assignee_ids.sort

        work_item.assignee_ids = new_assignee_ids
      end

      def filter_assignee_ids(assignee_ids)
        assignee_ids = assignee_ids.first(1) unless work_item.allows_multiple_assignees?

        assignees = User.id_in(assignee_ids)
        assignees.select { |assignee| assignee.can?(:read_work_item, work_item) }.map(&:id)
      end
    end
  end
end