]> source.dussan.org Git - redmine.git/commitdiff
Ability to add watchers to Wiki pages (#7652).
authorGo MAEDA <maeda@farend.jp>
Sat, 29 May 2021 07:30:54 +0000 (07:30 +0000)
committerGo MAEDA <maeda@farend.jp>
Sat, 29 May 2021 07:30:54 +0000 (07:30 +0000)
Patch by Yuichi HARADA.

git-svn-id: http://svn.redmine.org/redmine/trunk@21016 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/wiki/show.html.erb
config/locales/en.yml
lib/redmine.rb
test/fixtures/roles.yml
test/fixtures/watchers.yml
test/functional/watchers_controller_test.rb
test/functional/wiki_controller_test.rb

index a7104967d2504074fdf7683bc625c68a87fc4baf..6a024580944ba81fe6590db33e8c92548d71ba1d 100644 (file)
 
 <% content_for :sidebar do %>
   <%= render :partial => 'sidebar' %>
+  <% if User.current.allowed_to?(:add_wiki_page_watchers, @project) ||
+    (@page.watchers.present? && User.current.allowed_to?(:view_wiki_page_watchers, @project)) %>
+    <div id="watchers">
+      <%= render :partial => 'watchers/watchers', :locals => {:watched => @page} %>
+    </div>
+  <% end %>
 <% end %>
 
 <% content_for :header_tags do %>
index 9d779a2fe08ea7e9e3df22f83af4c6cc04232ac8..2ac0affb831be27e7313e37cdcf763772b47a8d0 100644 (file)
@@ -559,6 +559,9 @@ en:
   permission_view_wiki_edits: View wiki history
   permission_edit_wiki_pages: Edit wiki pages
   permission_delete_wiki_pages_attachments: Delete attachments
+  permission_view_wiki_page_watchers: View wiki page watchers list
+  permission_add_wiki_page_watchers: Add wiki page watchers
+  permission_delete_wiki_page_watchers: Delete wiki page watchers
   permission_protect_wiki_pages: Protect wiki pages
   permission_manage_repository: Manage repository
   permission_browse_repository: Browse repository
@@ -958,6 +961,7 @@ en:
   label_generate_key: Generate a key
   label_issue_watchers: Watchers
   label_message_watchers: Watchers
+  label_wiki_page_watchers: Watchers
   label_example: Example
   label_display: Display
   label_sort: Sort
index cabbffe293e6b5773cfd2e91aa5786e118ca0562..f6d83acd92c94e07fee312ed9724c2d3b93f92ea 100644 (file)
@@ -169,6 +169,9 @@ Redmine::AccessControl.map do |map|
     map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
     map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member
     map.permission :delete_wiki_pages_attachments, {}
+    map.permission :view_wiki_page_watchers, {}, :read => true
+    map.permission :add_wiki_page_watchers, {:watchers => [:new, :create, :autocomplete_for_user]}
+    map.permission :delete_wiki_page_watchers, {:watchers => :destroy}
     map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
     map.permission :manage_wiki, {:wikis => [:edit, :destroy], :wiki => :rename}, :require => :member
   end
index 61c324b1ec46a40d12fc6c76c074979ad4d48cd9..076d347ff73ea56ac436393c3c13829c97eaea42 100644 (file)
@@ -53,6 +53,9 @@ roles_001:
     - :protect_wiki_pages
     - :delete_wiki_pages
     - :rename_wiki_pages
+    - :view_wiki_page_watchers
+    - :add_wiki_page_watchers
+    - :delete_wiki_page_watchers
     - :manage_wiki
     - :view_messages
     - :add_messages
@@ -112,6 +115,7 @@ roles_002:
     - :edit_wiki_pages
     - :protect_wiki_pages
     - :delete_wiki_pages
+    - :view_wiki_page_watchers
     - :view_messages
     - :add_messages
     - :edit_own_messages
@@ -158,6 +162,7 @@ roles_003:
     - :view_wiki_edits
     - :edit_wiki_pages
     - :delete_wiki_pages
+    - :view_wiki_page_watchers
     - :view_messages
     - :add_messages
     - :view_message_watchers
index fdcf5b38242476d15d23050cffe3b668716b5365..038318cccb2d38bbcf8acf647470520885d1b2d8 100644 (file)
@@ -11,3 +11,7 @@ watchers_003:
   watchable_type: Issue
   watchable_id: 2
   user_id: 1
+watchers_004:
+  watchable_type: WikiPage
+  watchable_id: 1
+  user_id: 1
index 21f31278d8797653d1935928bbb7f4849c82debb..0eac3801233b5722886bb8c373947102683a65d3 100644 (file)
@@ -22,7 +22,7 @@ require File.expand_path('../../test_helper', __FILE__)
 class WatchersControllerTest < Redmine::ControllerTest
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
            :issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers,
-           :boards, :messages
+           :boards, :messages, :wikis, :wiki_pages
 
   def setup
     User.current = nil
@@ -163,6 +163,13 @@ class WatchersControllerTest < Redmine::ControllerTest
     assert_match /ajax-modal/, response.body
   end
 
+  def test_new_for_wiki_page
+    @request.session[:user_id] = 2
+    get :new, :params => {:object_type => 'wiki_page', :object_id => '1'}, :xhr => true
+    assert_response :success
+    assert_match /ajax-modal/, response.body
+  end
+
   def test_new_with_multiple_objects
     @request.session[:user_id] = 2
     get :new, :params => {:object_type => 'issue', :object_id => ['1', '2']}, :xhr => true
@@ -238,6 +245,20 @@ class WatchersControllerTest < Redmine::ControllerTest
     assert Message.find(1).watched_by?(User.find(4))
   end
 
+  def test_create_for_wiki_page
+    @request.session[:user_id] = 2
+    assert_difference('Watcher.count') do
+      post :create, :params => {
+        :object_type => 'wiki_page', :object_id => '1',
+        :watcher => {:user_id => '4'}
+      }, :xhr => true
+      assert_response :success
+      assert_match /watchers/, response.body
+      assert_match /ajax-modal/, response.body
+    end
+    assert WikiPage.find(1).watched_by?(User.find(4))
+  end
+
   def test_create_with_mutiple_users
     @request.session[:user_id] = 2
     assert_difference('Watcher.count', 3) do
@@ -272,6 +293,23 @@ class WatchersControllerTest < Redmine::ControllerTest
     assert message.watched_by?(Group.find(10))
   end
 
+  def test_create_for_wiki_page_with_mutiple_users
+    @request.session[:user_id] = 2
+    assert_difference('Watcher.count', 3) do
+      post :create, :params => {
+        :object_type => 'wiki_page', :object_id => '1',
+        :watcher => {:user_ids => ['4', '7', '10']}
+      }, :xhr => true
+      assert_response :success
+      assert_match /watchers/, response.body
+      assert_match /ajax-modal/, response.body
+    end
+    wiki_page = WikiPage.find(1)
+    assert wiki_page.watched_by?(User.find(4))
+    assert wiki_page.watched_by?(User.find(7))
+    assert wiki_page.watched_by?(Group.find(10))
+  end
+
   def test_create_with_mutiple_objects
     @request.session[:user_id] = 2
     assert_difference('Watcher.count', 6) do
@@ -464,6 +502,22 @@ class WatchersControllerTest < Redmine::ControllerTest
     assert !message.watched_by?(user)
   end
 
+  def test_destroy_for_wiki_page
+    @request.session[:user_id] = 2
+    wiki_page = WikiPage.find(1)
+    user = User.find(1)
+    assert wiki_page.watched_by?(user)
+    assert_difference('Watcher.count', -1) do
+      delete :destroy, :params => {
+        :object_type => 'wiki_page', :object_id => '1', :user_id => '1'
+      }, :xhr => true
+      assert_response :success
+      assert_match /watchers/, response.body
+    end
+    wiki_page.reload
+    assert !wiki_page.watched_by?(user)
+  end
+
   def test_destroy_locked_user
     user = User.find(3)
     user.lock!
index 032d3f30e870f6d3e5a2e29a50250c8a95dd90c1..0ac5ff248d27cc81c43de143873a830cf1270bff 100644 (file)
@@ -23,7 +23,7 @@ class WikiControllerTest < Redmine::ControllerTest
   fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
            :enabled_modules, :wikis, :wiki_pages, :wiki_contents,
            :wiki_content_versions, :attachments,
-           :issues, :issue_statuses, :trackers
+           :issues, :issue_statuses, :trackers, :watchers
 
   def setup
     User.current = nil
@@ -121,6 +121,31 @@ class WikiControllerTest < Redmine::ControllerTest
     assert_select 'div#sidebar', :text => /Side bar content for test_show_with_sidebar/
   end
 
+  def test_show_should_display_watchers
+    @request.session[:user_id] = 2
+    page = Project.find(1).wiki.find_page('Another_page')
+    page.add_watcher User.find(2)
+    page.add_watcher Group.find(10)
+    [['1', true], ['0', false]].each do |(gravatar_enabled, is_display_gravatar)|
+      with_settings :gravatar_enabled => gravatar_enabled do
+        get :show, :params => {:project_id => 1, :id => 'Another_page'}
+      end
+
+      assert_select 'div#watchers ul' do
+        assert_select 'li.user-2' do
+          assert_select 'img.gravatar[title=?]', 'John Smith', is_display_gravatar
+          assert_select 'a[href="/users/2"]'
+          assert_select 'a[class*=delete]'
+        end
+        assert_select 'li.user-10' do
+          assert_select 'img.gravatar[title=?]', 'A Team', is_display_gravatar
+          assert_select 'a[href="/users/10"]', false
+          assert_select 'a[class*=delete]'
+        end
+      end
+    end
+  end
+
   def test_show_should_display_section_edit_links
     @request.session[:user_id] = 2
     get :show, :params => {:project_id => 1, :id => 'Page with sections'}