diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/issuable_form.js.coffee | 8 | ||||
-rw-r--r-- | app/helpers/issues_helper.rb | 8 | ||||
-rw-r--r-- | app/services/issues/move_service.rb | 31 | ||||
-rw-r--r-- | app/services/system_note_service.rb | 10 | ||||
-rw-r--r-- | app/views/shared/issuable/_form.html.haml | 2 |
5 files changed, 25 insertions, 34 deletions
diff --git a/app/assets/javascripts/issuable_form.js.coffee b/app/assets/javascripts/issuable_form.js.coffee index 9b939985b33..d60832f90ed 100644 --- a/app/assets/javascripts/issuable_form.js.coffee +++ b/app/assets/javascripts/issuable_form.js.coffee @@ -30,11 +30,11 @@ class @IssuableForm "description" ] - handleSubmit: (e) => - @resetAutosave - + handleSubmit: => if (parseInt(@issueMoveField?.val()) ? 0) > 0 - e.preventDefault() unless confirm(ISSUE_MOVE_CONFIRM_MSG) + return false unless confirm(ISSUE_MOVE_CONFIRM_MSG) + + @resetAutosave() resetAutosave: => @titleField.data("autosave").reset() diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 62479b8d1ce..b67057ebc7c 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -60,12 +60,14 @@ module IssuesHelper def project_options(issuable, current_user, ability: :read_project) projects = current_user.authorized_projects projects = projects.select do |project| - current_user.can?(ability, project) && project != issuable.project + current_user.can?(ability, project) end - projects.unshift(OpenStruct.new(id: 0, name_with_namespace: 'No project')) + no_project = OpenStruct.new(id: 0, name_with_namespace: 'No project') + projects.unshift(no_project) + projects.delete(issuable.project) - options_from_collection_for_select(projects, :id, :name_with_namespace, 0) + options_from_collection_for_select(projects, :id, :name_with_namespace) end def status_box_class(item) diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 4abcd203407..ce31830f2d0 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -7,7 +7,7 @@ module Issues @issue_new = nil @project_old = @project - if new_project_id + if new_project_id.to_i > 0 @project_new = Project.find(new_project_id) end @@ -19,7 +19,7 @@ module Issues def execute return unless move? - # Using trasaction because of a high resources footprint + # Using transaction because of a high resources footprint # on rewriting notes (unfolding references) # ActiveRecord::Base.transaction do @@ -54,10 +54,11 @@ module Issues def create_new_issue new_params = { id: nil, iid: nil, milestone: nil, label_ids: [], project: @project_new, author: @issue_old.author, - description: rewrite_references(@issue_old) } + description: unfold_references(@issue_old.description) } + new_params = @issue_old.serializable_hash.merge(new_params) create_service = CreateService.new(@project_new, @current_user, - params.merge(new_params)) + new_params) @issue_new = create_service.execute(set_author: false) end @@ -66,7 +67,7 @@ module Issues @issue_old.notes.find_each do |note| new_note = note.dup new_params = { project: @project_new, noteable: @issue_new, - note: rewrite_references(new_note) } + note: unfold_references(new_note.note) } new_note.update(new_params) end @@ -78,30 +79,20 @@ module Issues end def add_moved_from_note - SystemNoteService.noteable_moved(:from, @issue_new, @project_new, - @issue_old, @current_user) + SystemNoteService.noteable_moved(@issue_new, @project_new, + @issue_old, @current_user, direction: :from) end def add_moved_to_note - SystemNoteService.noteable_moved(:to, @issue_old, @project_old, - @issue_new, @current_user) + SystemNoteService.noteable_moved(@issue_old, @project_old, + @issue_new, @current_user, direction: :to) end - def rewrite_references(noteable) - content = noteable_content(noteable).dup + def unfold_references(content) unfolder = Gitlab::Gfm::ReferenceUnfolder.new(content, @project_old) unfolder.unfold(@project_new) end - def noteable_content(noteable) - case noteable - when Issue then noteable.description - when Note then noteable.note - else - raise 'Unexpected noteable while moving an issue!' - end - end - def notify_participants notification_service.issue_moved(@issue_old, @issue_new, @current_user) end diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index a8d6555dec3..c679891b07c 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -3,7 +3,6 @@ # Used for creating system notes (e.g., when a user references a merge request # from an issue, an issue's assignee changes, an issue is closed, etc.) class SystemNoteService - extend GitlabMarkdownHelper # Called when commits are added to a Merge Request # # noteable - Noteable object @@ -398,16 +397,15 @@ class SystemNoteService # # Example Note text: # - # "Moved to project_new/#11" + # "Moved to some_namespace/project_new#11" # # Returns the created Note object - def self.noteable_moved(direction, noteable, project, noteable_ref, author) + def self.noteable_moved(noteable, project, noteable_ref, author, direction:) unless [:to, :from].include?(direction) - raise StandardError, "Invalid direction `#{direction}`" + raise ArgumentError, "Invalid direction `#{direction}`" end - cross_reference = cross_project_reference(noteable_ref.project, noteable_ref) - + cross_reference = noteable_ref.to_reference(project) body = "Moved #{direction} #{cross_reference}" create_note(noteable: noteable, project: project, author: author, note: body) end diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 11b8b9d44af..d3eabe9ea64 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -70,7 +70,7 @@ - if issuable.is_a?(Issue) && can?(current_user, :admin_issue, issuable.project) %hr .form-group - = f.label :move_to_project_id, 'Move', class: 'control-label' + = label_tag :move_to_project_id, 'Move', class: 'control-label' .col-sm-10 - projects = project_options(issuable, current_user, ability: :admin_issue) = select_tag(:move_to_project_id, projects, include_blank: true, |