Project

General

Profile

Feature #1757 » notify_watcher_when_add_or_delete_in_issue.patch

User Redmine, 2024-04-27 13:52

View differences:

app/controllers/watchers_controller.rb
49 49
        Watcher.create(:watchable => watchable, :user => user)
50 50
      end
51 51
    end
52
    
53
    # send e-mail notify for user when he added as watcher in issue
54
    current_user_add_watcher = User.current
55
    @watchables.each do |issue|
56
      Mailer.deliver_issue_watcher_add(issue, current_user_add_watcher, users)
57
    end
58

  
52 59
    respond_to do |format|
53 60
      format.html do
54 61
        redirect_to_referer_or do
......
71 81
  end
72 82

  
73 83
  def destroy
74
    user = Principal.find(params[:user_id])
84
    user = Principal.find(params[:user_id])    # User who is being removed from the watchers
75 85
    @watchables.each do |watchable|
76 86
      watchable.set_watcher(user, false)
77 87
    end
88
  
89
    # send e-mail notify for user when he deleted as watcher in issue
90
    current_user_delete_watcher = User.current
91
    if params["object_type"] == "issue"
92
      issue = Issue.find(params['object_id'])
93
      Mailer.deliver_issue_watcher_delete(issue, user, current_user_delete_watcher)
94
    end
95

  
78 96
    respond_to do |format|
79 97
      format.html do
80 98
        redirect_to_referer_or do
app/models/mailer.rb
138 138
    end
139 139
  end
140
  # Builds a mail for notifying user about a new watcher
141
  def issue_watcher_add(user, issue, current_user_add_watcher)
142
    @current_user_add_watcher = current_user_add_watcher
143
    @issue = issue
144
    @user = user
145
    @author = issue.author
146

  
147
    @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue)
148

  
149
    @table = Text::Table.new
150
    @mail_signature = mail_signature_for(user, issue)
151
    
152
    subject = "[##{issue.id} - #{issue.tracker.name}]"
153
    subject += " (#{l(:field_watcher)})"
154
    subject += " #{issue.subject}"
155
    subject += "   [#{issue.project.name}]"
156
    
157
    mail :to => user,
158
      :subject => subject
159
  end
160

  
161
  # Notifies users about a new watchers.
162
  # Example:
163
  #   Mailer.deliver_issue_watcher_add(issue, current_user_add_watcher, users)
164

  
165
  # Notifies users when they were ADDED as an watcher to issue
166
  def self.deliver_issue_watcher_add(issue, current_user_add_watcher, users)
167
    # if 'issue_updated' in Admin -> Settings -> tab Notifications in Redmine is checkboxed
168
    if Setting.notified_events.include?('issue_updated')
169
      notified = users
170
      # if 'notified' contain <Groups> then divided into separate users
171
      notified = notified.map {|n| n.is_a?(Group) ? n.users : n}.flatten
172
      notified.uniq!
173
      users = notified
174
  
175
      users.each do |user|
176
        issue_watcher_add(user, issue, current_user_add_watcher).deliver_later
177
    end
178
    end
179
  end
180

  
181
  # Builds a mail for notifying user about a DELETE watcher
182
  def issue_watcher_delete(user, issue, current_user_delete_watcher)
183
    @current_user_delete_watcher = current_user_delete_watcher
184
    @issue = issue
185
    @user = user
186
    @author = issue.author
187

  
188
    @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue)
189

  
190
    @table = Text::Table.new
191
    @mail_signature = mail_signature_for(user, issue)
192
    
193
    subject = "[##{issue.id} - #{issue.tracker.name}]"
194
    subject += " (#{l(:field_watcher)})"
195
    subject += " #{issue.subject}"
196
    subject += "   [#{issue.project.name}]"
197
    
198
    mail :to => user,
199
      :subject => subject
200
  end
201

  
202
  # Notifies users about a deleting watchers.
203
  # Example:
204
  #   Mailer.deliver_issue_watcher_delete(issue, user, current_user_delete_watcher)
205

  
206
  # Notifies users when they were DELETED as an watcher to issue
207
  def self.deliver_issue_watcher_delete(issue, user, current_user_delete_watcher)
208
    # if 'issue_updated' in Admin -> Settings -> tab Notifications in Redmine is checkboxed
209
    if Setting.notified_events.include?('issue_updated')
210
      notified = [user]
211
      # if 'notified' contain <Groups> then divided into separate users
212
      notified = notified.map {|n| n.is_a?(Group) ? n.users : n}.flatten
213
      notified.uniq!
214
      users = notified
215
  
216
      users.each do |user|
217
        issue_watcher_delete(user, issue, current_user_delete_watcher).deliver_later
218
      end
219
    end
220
  end
221

  
222

  
223

  
140 224
  # Builds a mail to user about a new document.
141 225
  def document_added(user, document, author)
142 226
    redmine_headers 'Project' => document.project.identifier
app/views/mailer/issue_watcher_add.html.erb
1
<p>You have been added to the watchers in issue. Added <%= @current_user_add_watcher %>.</p>
2
<hr>
3

  
4
<%= l(:text_issue_added, :id => link_to("##{@issue.id}", @issue_url), :author => h(@issue.author)).html_safe %>
5
<hr>
6
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
app/views/mailer/issue_watcher_add.text.erb
1
You have been added to the watchers in issue. Added <%= @current_user_add_watcher %>.
2
------------
3

  
4
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => @issue.author) %>
5

  
6
----------------------------------------
7
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
app/views/mailer/issue_watcher_delete.html.erb
1
<p>You have been removed from the watchers in issue. Removed <%= @current_user_delete_watcher %>.</p>
2
<hr>
3

  
4
<%= l(:text_issue_added, :id => link_to("##{@issue.id}", @issue_url), :author => h(@issue.author)).html_safe %>
5
<hr>
6
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
app/views/mailer/issue_watcher_delete.text.erb
1
You have been removed from the watchers in issue. Removed <%= @current_user_delete_watcher %>.
2
------------
3

  
4
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => @issue.author) %>
5

  
6
----------------------------------------
7
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
0
- 
(2-2/2)