summaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <zegerjan@gitlab.com>2016-04-16 21:09:08 +0200
committerZeger-Jan van de Weg <zegerjan@gitlab.com>2016-05-06 10:47:11 +0200
commit3bdc57f0a710b3769381ecad7ea4098223ecff56 (patch)
treeabfe22d7d40c7d3e2912d659b045273254767dea /app/services
parent05920a7964a039fd65d6b665c2ebd130d5ef949c (diff)
downloadgitlab-ce-3bdc57f0a710b3769381ecad7ea4098223ecff56.tar.gz
Create table for award emoji
Diffstat (limited to 'app/services')
-rw-r--r--app/services/notes/create_service.rb5
-rw-r--r--app/services/notes/post_process_service.rb2
-rw-r--r--app/services/notification_service.rb1
-rw-r--r--app/services/todo_service.rb8
-rw-r--r--app/services/toggle_award_emoji_service.rb21
5 files changed, 35 insertions, 2 deletions
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index 2bb312bb252..c5be21ba897 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -5,6 +5,11 @@ module Notes
note.author = current_user
note.system = false
+ if note.award_emoji?
+ return ToggleAwardEmojiService.new(project, current_user, params).
+ execute(note.noteable, note.note)
+ end
+
if note.save
# Finish the harder work in the background
NewNoteWorker.perform_in(2.seconds, note.id, params)
diff --git a/app/services/notes/post_process_service.rb b/app/services/notes/post_process_service.rb
index e818f58d13c..c1bf46bdfb3 100644
--- a/app/services/notes/post_process_service.rb
+++ b/app/services/notes/post_process_service.rb
@@ -8,7 +8,7 @@ module Notes
def execute
# Skip system notes, like status changes and cross-references and awards
- unless @note.system || @note.is_award
+ unless @note.system
EventCreateService.new.leave_note(@note, @note.author)
@note.create_cross_references!
execute_note_hooks
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 42ec1ac9e1a..703636658b7 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -131,7 +131,6 @@ class NotificationService
# ignore gitlab service messages
return true if note.note.start_with?('Status changed to closed')
return true if note.cross_reference? && note.system == true
- return true if note.is_award
target = note.noteable
diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb
index 42c5bca90fd..da1b77c0f9e 100644
--- a/app/services/todo_service.rb
+++ b/app/services/todo_service.rb
@@ -98,6 +98,14 @@ class TodoService
handle_note(note, current_user)
end
+ # When an emoji is awarded we should:
+ #
+ # * mark all pending todos related to the awardable for the current user as done
+ #
+ def new_award_emoji(awardable, current_user)
+ mark_pending_todos_as_done(awardable, current_user)
+ end
+
# When marking pending todos as done we should:
#
# * mark all pending todos related to the target for the current user as done
diff --git a/app/services/toggle_award_emoji_service.rb b/app/services/toggle_award_emoji_service.rb
new file mode 100644
index 00000000000..b77b4e79bf2
--- /dev/null
+++ b/app/services/toggle_award_emoji_service.rb
@@ -0,0 +1,21 @@
+require_relative 'base_service'
+
+class ToggleAwardEmojiService < BaseService
+ # For an award emoji being posted we should:
+ # - Mark the TODO as done for this issuable (skip on snippets)
+ # - Save the award emoji
+ def execute(awardable, emoji)
+ todo_service.new_award_emoji(awardable, current_user)
+
+ # Needed if its posted as a note containing only :+1:
+ emoji = award_emoji_name(emoji) if emoji.start_with? ':'
+ awardable.toggle_award_emoji(emoji, current_user)
+ end
+
+ private
+
+ def award_emoji_name(emoji)
+ original_name = emoji.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1]
+ Gitlab::AwardEmoji.normalize_emoji_name(original_name)
+ end
+end