Let all moderators revoke blocks by editing
This commit is contained in:
parent
67a5809c8a
commit
5e7ab68721
3 changed files with 37 additions and 18 deletions
|
@ -70,8 +70,7 @@ class UserBlocksController < ApplicationController
|
|||
|
||||
def update
|
||||
if @valid_params
|
||||
if current_user != @user_block.creator &&
|
||||
current_user != @user_block.revoker
|
||||
if cannot?(:update, @user_block)
|
||||
flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
|
||||
redirect_to :action => "edit"
|
||||
else
|
||||
|
@ -81,7 +80,10 @@ class UserBlocksController < ApplicationController
|
|||
@user_block.ends_at = Time.now.utc + @block_period.hours
|
||||
@user_block.deactivates_at = (@user_block.ends_at unless @user_block.needs_view)
|
||||
@user_block.revoker = current_user if user_block_was_active && !@user_block.active?
|
||||
if !user_block_was_active && @user_block.active?
|
||||
if user_block_was_active && @user_block.active? && current_user != @user_block.creator
|
||||
flash.now[:error] = t(".only_creator_can_edit_without_revoking")
|
||||
render :action => "edit"
|
||||
elsif !user_block_was_active && @user_block.active?
|
||||
flash.now[:error] = t(".inactive_block_cannot_be_reactivated")
|
||||
render :action => "edit"
|
||||
else
|
||||
|
|
|
@ -2949,6 +2949,7 @@ en:
|
|||
flash: "Created a block on user %{name}."
|
||||
update:
|
||||
only_creator_can_edit: "Only the moderator who created this block can edit it."
|
||||
only_creator_can_edit_without_revoking: "Only the moderator who created this block can edit it without revoking."
|
||||
only_creator_or_revoker_can_edit: "Only the moderators who created or revoked this block can edit it."
|
||||
inactive_block_cannot_be_reactivated: "This block is inactive and cannot be reactivated."
|
||||
success: "Block updated."
|
||||
|
|
|
@ -391,7 +391,6 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
|||
# test the update action
|
||||
def test_update
|
||||
moderator_user = create(:moderator_user)
|
||||
second_moderator_user = create(:moderator_user)
|
||||
active_block = create(:user_block, :creator => moderator_user)
|
||||
|
||||
# Not logged in yet, so updating a block should fail
|
||||
|
@ -405,19 +404,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
|||
put user_block_path(:id => active_block)
|
||||
assert_redirected_to :controller => "errors", :action => "forbidden"
|
||||
|
||||
# Login as the wrong moderator
|
||||
session_for(second_moderator_user)
|
||||
|
||||
# Check that only the person who created a block can update it
|
||||
assert_no_difference "UserBlock.count" do
|
||||
put user_block_path(:id => active_block,
|
||||
:user_block_period => "12",
|
||||
:user_block => { :needs_view => true, :reason => "Vandalism" })
|
||||
end
|
||||
assert_redirected_to edit_user_block_path(active_block)
|
||||
assert_equal "Only the moderator who created this block can edit it.", flash[:error]
|
||||
|
||||
# Login as the correct moderator
|
||||
# Login as the moderator
|
||||
session_for(moderator_user)
|
||||
|
||||
# A bogus block period should result in an error
|
||||
|
@ -495,7 +482,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
|||
|
||||
##
|
||||
# test the update action revoking the block
|
||||
def test_revoke_using_update
|
||||
def test_revoke_using_update_by_creator
|
||||
moderator_user = create(:moderator_user)
|
||||
block = create(:user_block, :creator => moderator_user)
|
||||
|
||||
|
@ -503,6 +490,8 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
|||
put user_block_path(block,
|
||||
:user_block_period => "24",
|
||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||
assert_redirected_to user_block_path(block)
|
||||
assert_equal "Block updated.", flash[:notice]
|
||||
block.reload
|
||||
assert_predicate block, :active?
|
||||
assert_nil block.revoker
|
||||
|
@ -510,11 +499,38 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
|||
put user_block_path(block,
|
||||
:user_block_period => "0",
|
||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||
assert_redirected_to user_block_path(block)
|
||||
assert_equal "Block updated.", flash[:notice]
|
||||
block.reload
|
||||
assert_not_predicate block, :active?
|
||||
assert_equal moderator_user, block.revoker
|
||||
end
|
||||
|
||||
def test_revoke_using_update_by_other_moderator
|
||||
creator_user = create(:moderator_user)
|
||||
other_moderator_user = create(:moderator_user)
|
||||
block = create(:user_block, :creator => creator_user)
|
||||
|
||||
session_for(other_moderator_user)
|
||||
put user_block_path(block,
|
||||
:user_block_period => "24",
|
||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||
assert_response :success
|
||||
assert_equal "Only the moderator who created this block can edit it without revoking.", flash[:error]
|
||||
block.reload
|
||||
assert_predicate block, :active?
|
||||
assert_nil block.revoker
|
||||
|
||||
put user_block_path(block,
|
||||
:user_block_period => "0",
|
||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||
assert_redirected_to user_block_path(block)
|
||||
assert_equal "Block updated.", flash[:notice]
|
||||
block.reload
|
||||
assert_not_predicate block, :active?
|
||||
assert_equal other_moderator_user, block.revoker
|
||||
end
|
||||
|
||||
##
|
||||
# test the revoke action
|
||||
def test_revoke
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue