summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/issuable_form.js.coffee8
-rw-r--r--app/helpers/issues_helper.rb8
-rw-r--r--app/services/issues/move_service.rb31
-rw-r--r--app/services/system_note_service.rb10
-rw-r--r--app/views/shared/issuable/_form.html.haml2
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,