[refs #123] fix activity feed for commit comments; remove reply notification

This commit is contained in:
Alexander Machehin 2012-02-25 00:25:35 +06:00
parent 46a5ab1c76
commit dde81b5554
9 changed files with 29 additions and 65 deletions

View File

@ -32,25 +32,31 @@ class ActivityFeedObserver < ActiveRecord::Observer
end end
when 'Comment' when 'Comment'
subscribes = record.commentable.subscribes if record.commentable.class == Issue
subscribes.each do |subscribe| subscribes = record.commentable.subscribes.finder_hack
if record.user_id != subscribe.user_id subscribes.each do |subscribe|
if record.reply? subscribe if record.user_id != subscribe.user_id
UserMailer.delay.new_comment_reply_notification(record, subscribe.user) if record.can_notify_on_reply?(subscribe)
ActivityFeed.create(
:user => subscribe.user,
:kind => 'new_comment_reply_notification',
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :issue_title => record.commentable.title, :issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id}
)
else
UserMailer.delay.new_comment_notification(record, subscribe.user) if record.can_notify_on_new_comment?(subscribe) UserMailer.delay.new_comment_notification(record, subscribe.user) if record.can_notify_on_new_comment?(subscribe)
ActivityFeed.create( ActivityFeed.create(
:user => subscribe.user, :user => subscribe.user,
:kind => 'new_comment_notification', :kind => 'new_comment_notification',
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :issue_title => record.commentable.title, :issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id} :data => {:user_name => subscribe.user.name, :comment_body => record.body, :issue_title => record.commentable.title,
:issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id}
) )
end end
end end
elsif record.commentable.class == Grit::Commit
subscribes = Subscribe.comment_subscribes(record).where(:status => true)
subscribes.each do |subscribe|
next if record.own_comment?(subscribe.user)
UserMailer.delay.new_comment_notification(record, subscribe.user) if subscribe.user.notifier.can_notify
ActivityFeed.create(
:user => subscribe.user,
:kind => 'new_comment_commit_notification',
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :commit_message => record.commentable.message.encode_to_default,
:commit_id => record.commentable.id, :project_id => record.project.id}
)
end
end end
when 'GitHook' when 'GitHook'

View File

@ -10,7 +10,6 @@ class Comment < ActiveRecord::Base
after_create :subscribe_on_reply, :unless => "commentable_type == 'Grit::Commit'" after_create :subscribe_on_reply, :unless => "commentable_type == 'Grit::Commit'"
after_create :invoke_helper, :if => "commentable_type == 'Grit::Commit'" after_create :invoke_helper, :if => "commentable_type == 'Grit::Commit'"
after_create :subscribe_users after_create :subscribe_users
after_create {|comment| Subscribe.new_comment_notification(comment)}
def helper def helper
class_eval "def commentable; project.git_repository.commit('#{commentable_id}'); end" if commentable_type == 'Grit::Commit' class_eval "def commentable; project.git_repository.commit('#{commentable_id}'); end" if commentable_type == 'Grit::Commit'
@ -20,10 +19,6 @@ class Comment < ActiveRecord::Base
user_id == user.id user_id == user.id
end end
def reply?(subscribe)
self.commentable.comments.exists?(:user_id => subscribe.user.id)
end
def can_notify_on_reply?(subscribe) def can_notify_on_reply?(subscribe)
User.find(subscribe.user).notifier.new_comment_reply && User.find(subscribe.user).notifier.can_notify User.find(subscribe.user).notifier.new_comment_reply && User.find(subscribe.user).notifier.can_notify
end end

View File

@ -14,27 +14,6 @@ class Subscribe < ActiveRecord::Base
Subscribe.where(:subscribeable_id => comment.commentable.id, :subscribeable_type => comment.commentable.class.name, :project_id => comment.project) Subscribe.where(:subscribeable_id => comment.commentable.id, :subscribeable_type => comment.commentable.class.name, :project_id => comment.project)
end end
def self.new_comment_notification(comment)
commentable_class = comment.commentable.class
Subscribe.new_comment_issue_notification(comment) if commentable_class == Issue
Subscribe.new_comment_commit_notification(comment) if commentable_class == Grit::Commit
end
def self.new_comment_issue_notification(comment)
comment.commentable.subscribes.finder_hack.each do |subscribe|
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
UserMailer.delay.new_comment_notification(comment, subscribe.user) if subscribe.user.notifier.new_comment_reply
end
end
def self.new_comment_commit_notification(comment)
subscribes = Subscribe.comment_subscribes(comment).where(:status => true)
subscribes.each do |subscribe|
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
UserMailer.delay.new_comment_notification(comment, subscribe.user)
end
end
def self.subscribed_to_commit?(project, user, commit) def self.subscribed_to_commit?(project, user, commit)
subscribe = user.subscribes.where(:subscribeable_id => commit.id, :subscribeable_type => commit.class.name, :project_id => project.id).first subscribe = user.subscribes.where(:subscribeable_id => commit.id, :subscribeable_type => commit.class.name, :project_id => project.id).first
return subscribe.subscribed? if subscribe # return status if already subscribe present return subscribe.subscribed? if subscribe # return status if already subscribe present
@ -44,12 +23,10 @@ class Subscribe < ActiveRecord::Base
(user.committer?(commit) && user.notifier.new_comment_commit_owner) (user.committer?(commit) && user.notifier.new_comment_commit_owner)
end end
def self.subscribe_to_commit(options) def self.subscribe_to_commit(options)
Subscribe.set_subscribe_to_commit(options, true) Subscribe.set_subscribe_to_commit(options, true)
end end
def self.unsubscribe_from_commit(options) def self.unsubscribe_from_commit(options)
Subscribe.set_subscribe_to_commit(options, false) Subscribe.set_subscribe_to_commit(options, false)
end end

View File

@ -1,5 +0,0 @@
%p== #{ t("notifications.bodies.new_comment_reply_notification.title", :user_name => user_name) }
%p= raw t("notifications.bodies.new_comment_reply_notification.content", {:issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id))})
%p "#{ comment_body }"

View File

@ -0,0 +1,5 @@
%p== #{ t("notifications.bodies.new_commit_comment_notification.title", :user_name => user_name) }
%p= raw t("notifications.bodies.new_comment_notification.commit_content", {:commit_link => link_to(commit_message, commit_path(project_id, commit_id))})
%p "#{ comment_body }"

View File

@ -1,9 +0,0 @@
%p== Hello, #{@user.name}.
- #TODO hmm... this need to be refactored.
%p Your comment into issue #{ link_to @comment.commentable.title, project_issue_url(@comment.commentable.project, @comment.commentable) } has been answered.
%p "#{ @comment.body }"
%p== Support team «ROSA Build System»

View File

@ -6,7 +6,8 @@ en:
notifications: notifications:
subjects: subjects:
new_comment_notification: New comment to your task new_comment_notification: New comment to task
new_commit_comment_notification: New comment to commit
new_issue_notification: New task added to project new_issue_notification: New task added to project
new_user_notification: Registered on project «%{ project_name }» new_user_notification: Registered on project «%{ project_name }»
issue_assign_notification: New task assigned issue_assign_notification: New task assigned
@ -15,9 +16,7 @@ en:
new_comment_notification: new_comment_notification:
title: Hello, %{user_name}. title: Hello, %{user_name}.
content: To the issue %{issue_link} added a comment. content: To the issue %{issue_link} added a comment.
new_comment_reply_notification: commit_content: To the commit %{commit_link} added a comment.
title: Hello, %{user_name}.
content: Your comment into issue %{issue_link} has been answered.
new_issue_notification: new_issue_notification:
title: Hello, %{user_name}. title: Hello, %{user_name}.
content: To project %{project_link} has been added an issue %{issue_link} content: To project %{project_link} has been added an issue %{issue_link}

View File

@ -6,8 +6,8 @@ ru:
notifications: notifications:
subjects: subjects:
new_comment_notification: Новый комментарий к Вашей задаче new_comment_notification: Новый комментарий к задаче
new_comment_reply_notification: Новый комментарий к Вашей задаче new_commit_comment_notification: Новый комментарий к коммиту
new_issue_notification: Новая задача добавлена к проекту new_issue_notification: Новая задача добавлена к проекту
new_user_notification: Регистрация на проекте «%{ project_name }» new_user_notification: Регистрация на проекте «%{ project_name }»
issue_assign_notification: Вам назначили задачу issue_assign_notification: Вам назначили задачу
@ -16,9 +16,7 @@ ru:
new_comment_notification: new_comment_notification:
title: Здравствуйте, %{user_name}. title: Здравствуйте, %{user_name}.
content: К задаче %{issue_link} был добавлен новый комментарий. content: К задаче %{issue_link} был добавлен новый комментарий.
new_comment_reply_notification: commit_content: К коммиту %{commit_link} был добавлен новый комментарий.
title: Здравствуйте, %{user_name}.
content: На Ваш комментарий в задаче %{issue_link} был дан ответ.
new_issue_notification: new_issue_notification:
title: Здравствуйте, %{user_name}. title: Здравствуйте, %{user_name}.
content: К проекту %{project_link} была добавлена задача %{issue_link} content: К проекту %{project_link} была добавлена задача %{issue_link}
@ -30,5 +28,4 @@ ru:
issue_assign_notification: issue_assign_notification:
title: Здравствуйте, %{user_name}. title: Здравствуйте, %{user_name}.
content: Вам была назначена задача %{issue_link} content: Вам была назначена задача %{issue_link}
new_commit_comment_notification: Новый комментарий к коммиту
invite_approve_notification: Приглашение в ABF invite_approve_notification: Приглашение в ABF

View File

@ -949,7 +949,6 @@ en:
new_issue_notification: New task added to project new_issue_notification: New task added to project
new_user_notification: Registered on project «%{ project_name }» new_user_notification: Registered on project «%{ project_name }»
issue_assign_notification: New task assigned issue_assign_notification: New task assigned
new_commit_comment_notification: New comment to commit
invite_approve_notification: Invitation to ABF invite_approve_notification: Invitation to ABF
project: project: