1# frozen_string_literal: true 2 3module Issues 4 class ReopenService < Issues::BaseService 5 def execute(issue, skip_authorization: false) 6 return issue unless can_reopen?(issue, skip_authorization: skip_authorization) 7 8 if perform_reopen(issue) 9 event_service.reopen_issue(issue, current_user) 10 create_note(issue, 'reopened') 11 notification_service.async.reopen_issue(issue, current_user) 12 perform_incident_management_actions(issue) 13 execute_hooks(issue, 'reopen') 14 invalidate_cache_counts(issue, users: issue.assignees) 15 issue.update_project_counter_caches 16 delete_milestone_closed_issue_counter_cache(issue.milestone) 17 track_incident_action(current_user, issue, :incident_reopened) 18 end 19 20 issue 21 end 22 23 private 24 25 # Overriden on EE 26 def perform_reopen(issue) 27 issue.reopen 28 end 29 30 def can_reopen?(issue, skip_authorization: false) 31 skip_authorization || can?(current_user, :reopen_issue, issue) 32 end 33 34 def perform_incident_management_actions(issue) 35 end 36 37 def create_note(issue, state = issue.state) 38 SystemNoteService.change_status(issue, issue.project, current_user, state, nil) 39 end 40 end 41end 42 43Issues::ReopenService.prepend_mod_with('Issues::ReopenService') 44