diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-24 12:10:54 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-24 12:10:54 +0000 |
commit | 35c5f0c35c83f3c5f8d33fb61713495e29bdec4d (patch) | |
tree | f9715095538242308c5ff04a92a2ff47557d7dfd /app/services/notes | |
parent | 91e247b531c89342faed387c0d312622eb8a9c93 (diff) | |
download | gitlab-ce-35c5f0c35c83f3c5f8d33fb61713495e29bdec4d.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/notes')
-rw-r--r-- | app/services/notes/build_service.rb | 30 |
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 |