diff --git a/app/models/issue.rb b/app/models/issue.rb index 0e634bf8b..93fbf0ea5 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1176,6 +1176,10 @@ class Issue < ActiveRecord::Base end end + def watches + @watches ||= self.watchers.count(:id) + end + # Preloads relations for a collection of issues def self.load_relations(issues) if issues.any? diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 205084074..61e2b9a70 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -45,6 +45,14 @@ class IssueQuery < Query QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name", :groupable => true), QueryColumn.new(:fixed_version, :sortable => lambda {Version.fields_for_order_statement}, :groupable => true), + QueryColumn.new( + :watches, + :sortable => + lambda do + "COALESCE((SELECT COUNT(user_id) FROM #{Watcher.table_name}" \ + " WHERE #{Watcher.table_name}.watchable_id = #{Issue.table_name}.id), 0)" + end, + :default_order => 'desc'), QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date", :groupable => true), QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date", :groupable => true), QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours", diff --git a/app/views/watchers/_set_watcher.js.erb b/app/views/watchers/_set_watcher.js.erb index 4090ef6ce..79620842e 100644 --- a/app/views/watchers/_set_watcher.js.erb +++ b/app/views/watchers/_set_watcher.js.erb @@ -1,3 +1,8 @@ -<% selector = ".#{watcher_css(watched)}" %> -$("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")}); -$('#watchers').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => watched.first})) %>'); +var back_url = $('input[name="back_url"]').val() || ''; +if (back_url.length > 0) { + window.location.href = back_url; +} else { + <% selector = ".#{watcher_css(watched)}" %> + $("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")}); + $('#watchers').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => watched.first})) %>'); +} diff --git a/app/views/watchers/create.js.erb b/app/views/watchers/create.js.erb index b0421bc3a..6bf9ffec1 100644 --- a/app/views/watchers/create.js.erb +++ b/app/views/watchers/create.js.erb @@ -3,7 +3,5 @@ $('#ajax-modal').html( render(:partial => 'watchers/new', :locals => {:watchables => @watchables, :users => @users})) %>'); -<% if @watchables.size == 1 %> - <%= render(:partial => 'watchers/set_watcher', - :locals => {:watched => @watchables, :user => User.current}) %> -<% end %> +<%= render(:partial => 'watchers/set_watcher', + :locals => {:watched => @watchables, :user => User.current}) %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 335614dfb..0ee336585 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -370,6 +370,7 @@ en: field_parent_title: Parent page field_editable: Editable field_watcher: Watcher + field_watches: Watches field_content: Content field_group_by: Group results by field_sharing: Sharing diff --git a/config/locales/ja.yml b/config/locales/ja.yml index e22651e41..68fc67f9c 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -329,6 +329,7 @@ ja: field_parent_title: 親ページ field_editable: 編集可能 field_watcher: ウォッチャー + field_watches: ウォッチ数 field_content: 内容 field_group_by: グループ条件 field_sharing: 共有