Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
OHR Support
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
97
Issues
97
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
OHR Support
Commits
15428fc0
Commit
15428fc0
authored
Dec 14, 2010
by
Eric Davis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[#806] Add Board and Message watcher management
parent
a8d28e45
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
163 additions
and
2 deletions
+163
-2
show.rhtml
app/views/boards/show.rhtml
+10
-0
show.rhtml
app/views/messages/show.rhtml
+10
-0
redmine.rb
lib/redmine.rb
+8
-0
watchers_controller_test.rb
test/functional/watchers_controller_test.rb
+135
-2
No files found.
app/views/boards/show.rhtml
View file @
15428fc0
...
...
@@ -71,3 +71,13 @@
<%=
auto_discovery_link_tag
(
:atom
,
{
:format
=>
'atom'
,
:key
=>
User
.
current
.
rss_key
},
:title
=>
"
#{
@project
}
:
#{
@board
}
"
)
%>
<%=
stylesheet_link_tag
'scm'
%>
<%
end
%>
<%
content_for
:sidebar
do
%>
<%
if
User
.
current
.
allowed_to?
(
:add_board_watchers
,
@project
)
||
(
@board
.
watchers
.
present?
&&
User
.
current
.
allowed_to?
(
:view_board_watchers
,
@project
))
%>
<div
id=
"watchers"
>
<%=
render
:partial
=>
'watchers/watchers'
,
:locals
=>
{
:watched
=>
@board
}
%>
</div>
<%
end
%>
<%
end
%>
app/views/messages/show.rhtml
View file @
15428fc0
...
...
@@ -63,4 +63,14 @@
<%=
stylesheet_link_tag
'scm'
%>
<%
end
%>
<%
content_for
:sidebar
do
%>
<%
if
User
.
current
.
allowed_to?
(
:add_message_watchers
,
@project
)
||
(
@topic
.
watchers
.
present?
&&
User
.
current
.
allowed_to?
(
:view_message_watchers
,
@project
))
%>
<div
id=
"watchers"
>
<%=
render
:partial
=>
'watchers/watchers'
,
:locals
=>
{
:watched
=>
@topic
}
%>
</div>
<%
end
%>
<%
end
%>
<%
html_title
h
(
@topic
.
subject
)
%>
lib/redmine.rb
View file @
15428fc0
...
...
@@ -156,6 +156,14 @@ Redmine::AccessControl.map do |map|
map
.
permission
:edit_own_messages
,
{
:messages
=>
:edit
},
:require
=>
:loggedin
map
.
permission
:delete_messages
,
{
:messages
=>
:destroy
},
:require
=>
:member
map
.
permission
:delete_own_messages
,
{
:messages
=>
:destroy
},
:require
=>
:loggedin
map
.
permission
:view_board_watchers
,
{}
map
.
permission
:add_board_watchers
,
{
:watchers
=>
:new
}
map
.
permission
:delete_board_watchers
,
{
:watchers
=>
:destroy
}
map
.
permission
:view_message_watchers
,
{}
map
.
permission
:add_message_watchers
,
{
:watchers
=>
:new
}
map
.
permission
:delete_message_watchers
,
{
:watchers
=>
:destroy
}
end
map
.
project_module
:calendar
do
|
map
|
...
...
test/functional/watchers_controller_test.rb
View file @
15428fc0
...
...
@@ -168,6 +168,45 @@ class WatchersControllerTest < ActionController::TestCase
assert
@page
.
watched_by?
(
User
.
find
(
4
))
assert
@page
.
watched_by?
(
User
.
find
(
7
))
end
def
test_new_multiple_users_watching_board
Role
.
find
(
1
).
add_permission!
:add_board_watchers
@request
.
session
[
:user_id
]
=
2
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
assert
!
@board
.
watched_by?
(
User
.
find
(
2
))
assert
!
@board
.
watched_by?
(
User
.
find
(
4
))
assert_difference
(
'Watcher.count'
,
2
)
do
xhr
:post
,
:new
,
:object_type
=>
'board'
,
:object_id
=>
@board
.
id
,
:user_ids
=>
[
'2'
,
'4'
]
assert_response
:success
assert_select_rjs
:replace_html
,
'watchers'
end
@board
.
reload
assert
@board
.
watched_by?
(
User
.
find
(
2
))
assert
@board
.
watched_by?
(
User
.
find
(
4
))
end
def
test_new_multiple_users_watching_message
Role
.
find
(
1
).
add_permission!
:add_message_watchers
@request
.
session
[
:user_id
]
=
2
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
@message
=
Message
.
generate!
(
:board
=>
@board
)
assert
!
@message
.
watched_by?
(
User
.
find
(
2
))
assert
!
@message
.
watched_by?
(
User
.
find
(
4
))
assert_difference
(
'Watcher.count'
,
2
)
do
xhr
:post
,
:new
,
:object_type
=>
'message'
,
:object_id
=>
@message
.
id
,
:user_ids
=>
[
'2'
,
'4'
]
assert_response
:success
assert_select_rjs
:replace_html
,
'watchers'
end
@message
.
reload
assert
@message
.
watched_by?
(
User
.
find
(
2
))
assert
@message
.
watched_by?
(
User
.
find
(
4
))
end
def
test_new_issue_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:add_issue_watchers
...
...
@@ -181,8 +220,8 @@ class WatchersControllerTest < ActionController::TestCase
end
def
test_
remove
_wiki_page_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:
delete
_wiki_page_watchers
def
test_
new
_wiki_page_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:
add
_wiki_page_watchers
@request
.
session
[
:user_id
]
=
2
@page
=
WikiPage
.
find
(
1
)
...
...
@@ -194,6 +233,37 @@ class WatchersControllerTest < ActionController::TestCase
assert
!
WikiPage
.
find
(
1
).
watched_by?
(
User
.
find
(
2
))
end
def
test_new_board_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:add_board_watchers
@request
.
session
[
:user_id
]
=
2
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
assert_difference
(
'Watcher.count'
,
0
)
do
xhr
:post
,
:new
,
:object_type
=>
'board'
,
:object_id
=>
@board
.
id
,
:user_ids
=>
[
'2'
]
assert_response
:forbidden
end
assert
!
Board
.
find
(
@board
.
id
).
watched_by?
(
User
.
find
(
2
))
end
def
test_new_message_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:add_message_watchers
@request
.
session
[
:user_id
]
=
2
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
@message
=
Message
.
generate!
(
:board
=>
@board
)
assert_difference
(
'Watcher.count'
,
0
)
do
xhr
:post
,
:new
,
:object_type
=>
'message'
,
:object_id
=>
@message
.
id
,
:user_ids
=>
[
'2'
]
assert_response
:forbidden
end
assert
!
Message
.
find
(
@message
.
id
).
watched_by?
(
User
.
find
(
2
))
end
def
test_remove_watcher
Role
.
find
(
1
).
add_permission!
:delete_issue_watchers
...
...
@@ -241,6 +311,39 @@ class WatchersControllerTest < ActionController::TestCase
assert
!
WikiPage
.
find
(
1
).
watched_by?
(
User
.
find
(
2
))
end
def
test_remove_board_watcher
Role
.
find
(
1
).
add_permission!
:delete_board_watchers
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
Watcher
.
create!
(
:user_id
=>
2
,
:watchable
=>
@board
)
assert
@board
.
watched_by?
(
User
.
find
(
2
))
@request
.
session
[
:user_id
]
=
2
assert_difference
(
'Watcher.count'
,
-
1
)
do
xhr
:post
,
:destroy
,
:object_type
=>
'board'
,
:object_id
=>
@board
.
id
,
:user_id
=>
'2'
assert_response
:success
assert_select_rjs
:replace_html
,
'watchers'
end
assert
!
Board
.
find
(
@board
.
id
).
watched_by?
(
User
.
find
(
2
))
end
def
test_remove_message_watcher
Role
.
find
(
1
).
add_permission!
:delete_message_watchers
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
@message
=
Message
.
generate!
(
:board
=>
@board
)
Watcher
.
create!
(
:user_id
=>
2
,
:watchable
=>
@message
)
assert
@message
.
watched_by?
(
User
.
find
(
2
))
@request
.
session
[
:user_id
]
=
2
assert_difference
(
'Watcher.count'
,
-
1
)
do
xhr
:post
,
:destroy
,
:object_type
=>
'message'
,
:object_id
=>
@message
.
id
,
:user_id
=>
'2'
assert_response
:success
assert_select_rjs
:replace_html
,
'watchers'
end
assert
!
Message
.
find
(
@message
.
id
).
watched_by?
(
User
.
find
(
2
))
end
def
test_remove_issue_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:delete_issue_watchers
...
...
@@ -269,4 +372,34 @@ class WatchersControllerTest < ActionController::TestCase
end
def
test_remove_board_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:delete_board_watchers
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
Watcher
.
create!
(
:user_id
=>
2
,
:watchable
=>
@board
)
assert
@board
.
watched_by?
(
User
.
find
(
2
))
@request
.
session
[
:user_id
]
=
2
assert_difference
(
'Watcher.count'
,
0
)
do
xhr
:post
,
:destroy
,
:object_type
=>
'board'
,
:object_id
=>
@board
.
id
,
:user_id
=>
'2'
assert_response
:forbidden
end
assert
Board
.
find
(
@board
.
id
).
watched_by?
(
User
.
find
(
2
))
end
def
test_remove_message_watcher_without_permission
Role
.
find
(
1
).
remove_permission!
:delete_message_watchers
@project
=
Project
.
find
(
1
)
@board
=
Board
.
generate!
(
:project
=>
@project
)
@message
=
Message
.
generate!
(
:board
=>
@board
)
Watcher
.
create!
(
:user_id
=>
2
,
:watchable
=>
@message
)
assert
@message
.
watched_by?
(
User
.
find
(
2
))
@request
.
session
[
:user_id
]
=
2
assert_difference
(
'Watcher.count'
,
0
)
do
xhr
:post
,
:destroy
,
:object_type
=>
'message'
,
:object_id
=>
@message
.
id
,
:user_id
=>
'2'
assert_response
:forbidden
end
assert
Message
.
find
(
@message
.
id
).
watched_by?
(
User
.
find
(
2
))
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment