Commit a769204ff489bc750c4931ecdb22ef055eac042a

Authored by Dmitriy Zaporozhets
1 parent adcfeae1

Improved commit author notification

app/mailers/notify.rb
... ... @@ -27,8 +27,7 @@ class Notify < ActionMailer::Base
27 27 @user = user
28 28 @note = note
29 29 @project = note.project
30   - @commit = @project.repo.commits(note.noteable_id).first
31   - return unless ( note.notify or ( note.notify_author and @commit.author.email == @user.email ) )
  30 + @commit = @note.target
32 31 mail(:to => @user.email, :subject => "gitlab | note for commit | #{@note.project.name} ")
33 32 end
34 33  
... ...
app/models/mailer_observer.rb
... ... @@ -27,20 +27,25 @@ class MailerObserver < ActiveRecord::Observer
27 27 end
28 28  
29 29 def new_note(note)
30   - return unless note.notify or note.notify_author
31   - note.project.users.reject { |u| u.id == current_user.id } .each do |u|
32   - case note.noteable_type
33   - when "Commit" then
34   - Notify.note_commit_email(u, note).deliver
35   - when "Issue" then
36   - Notify.note_issue_email(u, note).deliver
37   - when "MergeRequest" then
38   - Notify.note_merge_request_email(u, note).deliver
39   - when "Snippet"
40   - true
41   - else
42   - Notify.note_wall_email(u, note).deliver
  30 + # Notify whole team except author of note
  31 + if note.notify
  32 + note.project.users.reject { |u| u.id == current_user.id } .each do |u|
  33 + case note.noteable_type
  34 + when "Commit" then
  35 + Notify.note_commit_email(u, note).deliver
  36 + when "Issue" then
  37 + Notify.note_issue_email(u, note).deliver
  38 + when "MergeRequest" then
  39 + Notify.note_merge_request_email(u, note).deliver
  40 + when "Snippet"
  41 + true
  42 + else
  43 + Notify.note_wall_email(u, note).deliver
  44 + end
43 45 end
  46 + # Notify only author of resource
  47 + elsif note.notify_author
  48 + Notify.note_commit_email(note.commit_author, note).deliver
44 49 end
45 50 end
46 51  
... ...
app/models/note.rb
... ... @@ -57,6 +57,36 @@ class Note < ActiveRecord::Base
57 57 rescue
58 58 nil
59 59 end
  60 +
  61 + # Check if we can notify commit author
  62 + # with email about our comment
  63 + #
  64 + # If commit author email exist in project
  65 + # and commit author is not passed user we can
  66 + # send email to him
  67 + #
  68 + # params:
  69 + # user - current user
  70 + #
  71 + # return:
  72 + # Boolean
  73 + #
  74 + def notify_only_author?(user)
  75 + commit? && commit_author &&
  76 + commit_author.email != user.email
  77 + end
  78 +
  79 + def commit?
  80 + noteable_type == "Commit"
  81 + end
  82 +
  83 + def commit_author
  84 + @commit_author ||=
  85 + project.users.find_by_email(target.author_email) ||
  86 + project.users.find_by_name(target.author_name)
  87 + rescue
  88 + nil
  89 + end
60 90 end
61 91 # == Schema Information
62 92 #
... ...
app/views/notes/_form.html.haml
... ... @@ -17,7 +17,7 @@
17 17 = check_box_tag :notify, 1, @note.noteable_type != "Commit"
18 18 %span Project team
19 19  
20   - -if @note.noteable_type == "Commit"
  20 + - if @note.notify_only_author?(current_user)
21 21 = label_tag :notify_author do
22 22 = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit"
23 23 %span Commit author
... ...