Feature #8568


add ability to designate default watchers by tracker/project

Added by Kioma Aldecoa over 12 years ago. Updated about 3 years ago.

Target version:
Start date:
Due date:
% Done:


Estimated time:


There is a situation we have where it would be nice to be able designate a default set of watchers for a given tracker/project. The scenario would happen like this:

  1. In the project, we would configure a tracker, for example "Bug", to have default users Aya and Bubba
  2. Later, someone creates a new issue with tracker Bug, fills out details but does not specify any watchers
  3. Upon the issue being created as tracker Bug in this specific project, Redmine automatically adds the watchers Aya and Bubba to this bug.
  4. Aya and Bubba get updates about the issue because they are watchers.

Related issues

Related to Redmine - Feature #1602: Email options for RolesNew2008-07-08

Has duplicate Redmine - Feature #12155: Default Observer in trackerClosed

Has duplicate Redmine - Feature #13787: Observateurs par défaut?Closed

Actions #1

Updated by Rahul Panwar over 12 years ago

Is there any plan for this feature, it is really a useful feature? We can define a list of default watchers per project.

Actions #2

Updated by Etienne Massip over 12 years ago

  • Category set to Issues
Actions #3

Updated by Felix Sendino over 12 years ago

Isn't there any news about this subject?

It would be very useful to manage teamwork for ticket-helpdesk purposes.

We have several workflows managed by redmine, for example to manage restore querys by final users or to manage application deployments by developers,
These are managed by different teams-groups.

When we define this kind of project an associate an email acount to it, so users can send issues through redmine,

It would be really useful that all the members in the team/project would be auto-set as watchers of the issue to coordinate the work.
Another aproach would be to have a ROL which meant that the member of the project is set as a watcher of its issues

Actions #4

Updated by Zee Prime over 12 years ago

Here's what we're using:

In Settings->Project, you can specify a role for the default watchers. You could use an existing role (e.g. "Manager") or create a new one (e.g. "Watcher"). Whenever a new issue is created, anyone who is in that role for that project is set as a default watcher for the issue. If the user creating the issue has permission to edit watchers, they can override this, but we've found that in most cases nobody even looks at the watchers list when they create a new issue and they just leave it as the default. Because this is hooked directly into the Issue constructor, it works regardless of whether you create an issue through the web interface, the API, incoming email, etc.


PS: This is a patch against redmine 1.1.1.

Index: app/views/settings/_projects.rhtml
--- app/views/settings/_projects.rhtml  (revision 505)
+++ app/views/settings/_projects.rhtml  (revision 518)
@@ -9,8 +9,11 @@
 <p><%= setting_check_box :sequential_project_identifiers %></p>

 <p><%= setting_select :new_project_user_role_id,

        Role.find_all_givable.collect {|r| [,]},

        :blank => "--- #{l(:actionview_instancetag_blank_option)} ---" %></p>
+<p><%= setting_select :default_watchers_role_id,
+       ([["", "0"]] + Role.find_all_givable.collect {|r| [,]}) %></p>

 <%= submit_tag l(:button_save) %>
Index: app/controllers/issues_controller.rb
--- app/controllers/issues_controller.rb        (revision 505)
+++ app/controllers/issues_controller.rb        (revision 518)
@@ -292,10 +292,15 @@
       return false
     @issue.start_date ||=
+    @issue.watcher_user_ids ||= []
+    @watcher_role = Role.find(Setting.default_watchers_role_id)
+    if !@watcher_role.nil?
+      @issue.watcher_user_ids |= @project.users_by_role[@watcher_role].collect{|u|}
+    end
     if params[:issue].is_a?(Hash)
       @issue.safe_attributes = params[:issue]
       if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record?
-        @issue.watcher_user_ids = params[:issue]['watcher_user_ids']
+        @issue.watcher_user_ids |= params[:issue]['watcher_user_ids']
     end = User.current
Index: config/settings.yml
--- config/settings.yml (revision 505)
+++ config/settings.yml (revision 518)
@@ -164,6 +164,10 @@
   format: int
   default: ''
+# Role that denotes the default watchers
+  format: int
+  default: 0
   default: 0
 # encodings used to convert repository files content to UTF-8
Index: config/locales/en.yml
--- config/locales/en.yml       (revision 505)
+++ config/locales/en.yml       (revision 518)
@@ -351,6 +351,7 @@
   setting_openid: Allow OpenID login and registration
   setting_password_min_length: Minimum password length
   setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_watchers_role_id: Role containing all of the default watchers for a project
   setting_default_projects_modules: Default enabled modules for new projects
   setting_issue_done_ratio: Calculate the issue done ratio with
   setting_issue_done_ratio_issue_field: Use the issue field
Actions #5

Updated by Razi Baluchi about 12 years ago

Emailed requests do not appear to pickup the default watchers.

Actions #6

Updated by j l about 12 years ago

I tested this with 1.3 and it works great IF ALL the projects have someone assigned as a default watcher. It broke creating new issues for projects that didn't have a default watcher defined. The issue (at least I think) is that @watcher_role is not nil, but returns empty if it can't find any user ids associated with that role. (in app/controllers/issues_controller.rb). My experience with ruby is less than 10 minutes, so let me know if there's a better way. Maybe there's something else going on, but this seemed to fix it.

I changed

@issue.watcher_user_ids |= @project.users_by_role[@watcher_role].collect{|u|}


if @project.users_by_role[@watcher_role]
@issue.watcher_user_ids |= @project.users_by_role[@watcher_role].collect{|u|}

Thanks for this patch, works awesome otherwise!

Actions #7

Updated by j l about 12 years ago

Also, the default watcher works for me when an email creates an issue automatically

Actions #8

Updated by Sergio Talente over 10 years ago

In my company we are trying to do the same: opening an issue by email having a default watcher notified at the same time.

I tried to apply the patch you published but it is not possible because we are using a different version of Redmine.

Could you be so kind to post the patch for Redmine version 1.4.4?

Thanks in advance.

Actions #9

Updated by Antoine Gefflot almost 10 years ago

In my company, people request to be able to define default watchers for issues

Many way to do that:
  • Add the capability for each user to be a default watcher
  • Add the capability to define many roles as default watchers
  • Add the capability to set all members as default watchers

The third one seems to be the simplest but I prefer the second one

Actions #10

Updated by Damon Tabb over 9 years ago

Has this been implemented? Our developer is running 2.3.1.stable. I handle software testing on our end of things, and it would be super useful if I could just be selected as a default watcher on ALL new issues (since testers/developers sometimes forget to select me as a watcher when creating new bugs), that way I could receive emails when bugs are added, updated, etc.... This seems like a very basic feature, no?

Actions #11

Updated by Mischa The Evil over 9 years ago

Damon Tabb wrote:

Has this been implemented?

No, it is not.

Actions #12

Updated by Blaise Alleyne over 8 years ago


Actions #13

Updated by Kevin Palm over 8 years ago


Actions #14

Updated by Alessandro Zucchi about 8 years ago


Actions #15

Updated by philip champon about 8 years ago

also, here's a patch for 3.2

diff -rub '--exclude=log' '--exclude=tmp' /tmp/foo/app/models/issue.rb ./app/models/issue.rb
--- /tmp/foo/app/models/issue.rb        2015-12-06 14:06:19.000000000 +0000
+++ ./app/models/issue.rb       2016-02-02 18:40:25.468758582 +0000
@@ -175,6 +175,10 @@
       # set default values for new records only
       self.priority ||= IssuePriority.default
       self.watcher_user_ids = []
+      # force project= method to run, generate default watchers
+      if attributes && proj = attributes[:project] || attributes["project"]
+        self.project = proj
+      end

@@ -364,6 +368,12 @@
         self.fixed_version_id = project.default_version_id
+    if new_record?
+      watcher_role = Role.find(Setting.default_watchers_role_id)
+      if !watcher_role.nil? && project.users_by_role[watcher_role]
+        self.watcher_user_ids |= project.users_by_role[watcher_role].collect &:id
+      end
+    end

diff -rub '--exclude=log' '--exclude=tmp' /tmp/foo/app/views/settings/_projects.html.erb ./app/views/settings/_projects.html.erb
--- /tmp/foo/app/views/settings/_projects.html.erb      2015-12-06 14:06:19.000000000 +0000
+++ ./app/views/settings/_projects.html.erb     2016-02-02 17:34:57.310787484 +0000
@@ -14,6 +14,9 @@
 <p><%= setting_select :new_project_user_role_id,
                       Role.find_all_givable.collect {|r| [,]},
                       :blank => "--- #{l(:actionview_instancetag_blank_option)} ---" %></p>
+<p><%= setting_select :default_watchers_role_id,
+       ([["", "0"]] + Role.find_all_givable.collect {|r| [,]}) %></p>

 <%= submit_tag l(:button_save) %>
diff -rub '--exclude=log' '--exclude=tmp' /tmp/foo/config/locales/en.yml ./config/locales/en.yml
--- /tmp/foo/config/locales/en.yml      2015-12-06 14:06:23.000000000 +0000
+++ ./config/locales/en.yml     2016-02-02 17:46:07.441171951 +0000
@@ -352,6 +352,7 @@
   field_total_estimated_hours: Total estimated time
   field_default_version: Default version

+  setting_default_watchers_role_id: Role containing all of the default watchers for a project
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
   setting_welcome_text: Welcome text
diff -rub '--exclude=log' '--exclude=tmp' /tmp/foo/config/settings.yml ./config/settings.yml
--- /tmp/foo/config/settings.yml        2015-12-06 14:06:23.000000000 +0000
+++ ./config/settings.yml       2016-02-02 17:57:32.200183079 +0000
@@ -257,3 +257,6 @@
   - '6'
   - '7'
+  format: int
+  default: 13
Actions #16

Updated by Go MAEDA almost 8 years ago

Actions #17

Updated by Vlad Belkov over 7 years ago


Actions #18

Updated by Dan MP over 7 years ago

Thank you for the patch Philippos Athanasiades Champon. Really helpful.
Unfortunately is broking the import issue functionality. I think has something to do with the Trackers, but as I'm a newbie in Redmine and 0 experience in Ruby I can't tell where the problem really is.
Also the logs are for me a mystery. If you can guide me what logs to look I can be of some help.
Again thank you for the work around it saved me some troubles.

Actions #19

Updated by Sebastian Paluch over 7 years ago

related to #1602

Actions #20

Updated by Toshi MARUYAMA over 7 years ago

Actions #21

Updated by Fred B about 7 years ago

Zee Prime wrote:

Here's what we're using:

In Settings->Project, you can specify a role for the default watchers. You could use an existing role (e.g. "Manager") or create a new one (e.g. "Watcher").

I dont see that anywhere in my redmine 2.4.

What it a wish or a feature present at the time he wrote this?

Actions #22

Updated by David Doležal over 4 years ago

Hi, fix this anybody for 3.4?

Actions #23

Updated by Taine Woo over 4 years ago

I think i will prefer to add the default watchers for Category, or maybe both tracker and category, then Redmine will collect all the values of them.

Actions #24

Updated by Jie Lio over 3 years ago

Hi, There is another way to watcher all updates of project. You can change email notification options to receive all notifications which from projects i involved, in my account page.

Actions #25

Updated by R Pommier about 3 years ago

Would it be interesting to close (reject?) the issue and redirect the users/reporters to a Redmine plugin, or another way to do the job (as Jie Lio suggested)?


Also available in: Atom PDF