Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/notes/build_service.rb')
-rw-r--r--app/services/notes/build_service.rb30
1 files changed, 20 insertions, 10 deletions
diff --git a/app/services/notes/build_service.rb b/app/services/notes/build_service.rb
index cf21818a886..8c250526efc 100644
--- a/app/services/notes/build_service.rb
+++ b/app/services/notes/build_service.rb
@@ -3,32 +3,36 @@
module Notes
class BuildService < ::BaseService
def execute
- should_resolve = false
in_reply_to_discussion_id = params.delete(:in_reply_to_discussion_id)
+ discussion = nil
if in_reply_to_discussion_id.present?
discussion = find_discussion(in_reply_to_discussion_id)
- unless discussion && can?(current_user, :create_note, discussion.noteable)
- note = Note.new
- note.errors.add(:base, _('Discussion to reply to cannot be found'))
- return note
- end
+ return discussion_not_found unless discussion && can?(current_user, :create_note, discussion.noteable)
discussion = discussion.convert_to_discussion! if discussion.can_convert_to_discussion?
params.merge!(discussion.reply_attributes)
- should_resolve = discussion.resolved?
end
+ new_note(params, discussion)
+ end
+
+ private
+
+ def new_note(params, discussion)
note = Note.new(params)
note.project = project
note.author = current_user
- if should_resolve
- note.resolve_without_save(current_user)
- end
+ parent_confidential = discussion&.confidential?
+ can_set_confidential = can?(current_user, :mark_note_as_confidential, note)
+ return discussion_not_found if parent_confidential && !can_set_confidential
+
+ note.confidential = (parent_confidential.nil? && can_set_confidential ? params.delete(:confidential) : parent_confidential)
+ note.resolve_without_save(current_user) if discussion&.resolved?
note
end
@@ -39,5 +43,11 @@ module Notes
Note.find_discussion(discussion_id)
end
end
+
+ def discussion_not_found
+ note = Note.new
+ note.errors.add(:base, _('Discussion to reply to cannot be found'))
+ note
+ end
end
end