issuable_base_service.rb 2.1 KB
Newer Older
1 2 3 4
class IssuableBaseService < BaseService
  private

  def create_assignee_note(issuable)
5
    SystemNoteService.change_assignee(
6 7 8 9
      issuable, issuable.project, current_user, issuable.assignee)
  end

  def create_milestone_note(issuable)
10
    SystemNoteService.change_milestone(
11 12
      issuable, issuable.project, current_user, issuable.milestone)
  end
N
Nikita Verkhovin 已提交
13 14

  def create_labels_note(issuable, added_labels, removed_labels)
15
    SystemNoteService.change_label(
N
Nikita Verkhovin 已提交
16 17
      issuable, issuable.project, current_user, added_labels, removed_labels)
  end
18 19 20 21 22

  def create_title_change_note(issuable, old_title)
    SystemNoteService.change_title(
      issuable, issuable.project, current_user, old_title)
  end
23 24 25 26 27 28

  def create_branch_change_note(issuable, branch_type, old_branch, new_branch)
    SystemNoteService.change_branch(
      issuable, issuable.project, current_user, branch_type,
      old_branch, new_branch)
  end
29

30
  def filter_params(issuable_ability_name = :issue)
31 32 33
    params[:assignee_id]  = "" if params[:assignee_id] == IssuableFinder::NONE
    params[:milestone_id] = "" if params[:milestone_id] == IssuableFinder::NONE

34 35 36
    ability = :"admin_#{issuable_ability_name}"

    unless can?(current_user, ability, project)
37 38 39 40 41
      params.delete(:milestone_id)
      params.delete(:label_ids)
      params.delete(:assignee_id)
    end
  end
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

  def update(issuable)
    change_state(issuable)
    filter_params
    old_labels = issuable.labels.to_a

    if params.present? && issuable.update_attributes(params.merge(updated_by: current_user))
      issuable.reset_events_cache

      if issuable.labels != old_labels
        create_labels_note(
          issuable,
          issuable.labels - old_labels,
          old_labels - issuable.labels)
      end

      handle_changes(issuable)
      issuable.create_new_cross_references!(current_user)
      execute_hooks(issuable, 'update')
    end

    issuable
  end

  def change_state(issuable)
    case params.delete(:state_event)
    when 'reopen'
      reopen_service.new(project, current_user, {}).execute(issuable)
    when 'close'
      close_service.new(project, current_user, {}).execute(issuable)
    end
  end
74
end