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
|
def update
|
||||||
if @valid_params
|
if @valid_params
|
||||||
if current_user != @user_block.creator &&
|
if cannot?(:update, @user_block)
|
||||||
current_user != @user_block.revoker
|
|
||||||
flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
|
flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
|
||||||
redirect_to :action => "edit"
|
redirect_to :action => "edit"
|
||||||
else
|
else
|
||||||
|
@ -81,7 +80,10 @@ class UserBlocksController < ApplicationController
|
||||||
@user_block.ends_at = Time.now.utc + @block_period.hours
|
@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.deactivates_at = (@user_block.ends_at unless @user_block.needs_view)
|
||||||
@user_block.revoker = current_user if user_block_was_active && !@user_block.active?
|
@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")
|
flash.now[:error] = t(".inactive_block_cannot_be_reactivated")
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
else
|
else
|
||||||
|
|
|
@ -2949,6 +2949,7 @@ en:
|
||||||
flash: "Created a block on user %{name}."
|
flash: "Created a block on user %{name}."
|
||||||
update:
|
update:
|
||||||
only_creator_can_edit: "Only the moderator who created this block can edit it."
|
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."
|
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."
|
inactive_block_cannot_be_reactivated: "This block is inactive and cannot be reactivated."
|
||||||
success: "Block updated."
|
success: "Block updated."
|
||||||
|
|
|
@ -391,7 +391,6 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
||||||
# test the update action
|
# test the update action
|
||||||
def test_update
|
def test_update
|
||||||
moderator_user = create(:moderator_user)
|
moderator_user = create(:moderator_user)
|
||||||
second_moderator_user = create(:moderator_user)
|
|
||||||
active_block = create(:user_block, :creator => moderator_user)
|
active_block = create(:user_block, :creator => moderator_user)
|
||||||
|
|
||||||
# Not logged in yet, so updating a block should fail
|
# 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)
|
put user_block_path(:id => active_block)
|
||||||
assert_redirected_to :controller => "errors", :action => "forbidden"
|
assert_redirected_to :controller => "errors", :action => "forbidden"
|
||||||
|
|
||||||
# Login as the wrong moderator
|
# Login as the 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
|
|
||||||
session_for(moderator_user)
|
session_for(moderator_user)
|
||||||
|
|
||||||
# A bogus block period should result in an error
|
# A bogus block period should result in an error
|
||||||
|
@ -495,7 +482,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
##
|
##
|
||||||
# test the update action revoking the block
|
# test the update action revoking the block
|
||||||
def test_revoke_using_update
|
def test_revoke_using_update_by_creator
|
||||||
moderator_user = create(:moderator_user)
|
moderator_user = create(:moderator_user)
|
||||||
block = create(:user_block, :creator => moderator_user)
|
block = create(:user_block, :creator => moderator_user)
|
||||||
|
|
||||||
|
@ -503,6 +490,8 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
||||||
put user_block_path(block,
|
put user_block_path(block,
|
||||||
:user_block_period => "24",
|
:user_block_period => "24",
|
||||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||||
|
assert_redirected_to user_block_path(block)
|
||||||
|
assert_equal "Block updated.", flash[:notice]
|
||||||
block.reload
|
block.reload
|
||||||
assert_predicate block, :active?
|
assert_predicate block, :active?
|
||||||
assert_nil block.revoker
|
assert_nil block.revoker
|
||||||
|
@ -510,11 +499,38 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
|
||||||
put user_block_path(block,
|
put user_block_path(block,
|
||||||
:user_block_period => "0",
|
:user_block_period => "0",
|
||||||
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
:user_block => { :needs_view => false, :reason => "Updated Reason" })
|
||||||
|
assert_redirected_to user_block_path(block)
|
||||||
|
assert_equal "Block updated.", flash[:notice]
|
||||||
block.reload
|
block.reload
|
||||||
assert_not_predicate block, :active?
|
assert_not_predicate block, :active?
|
||||||
assert_equal moderator_user, block.revoker
|
assert_equal moderator_user, block.revoker
|
||||||
end
|
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
|
# test the revoke action
|
||||||
def test_revoke
|
def test_revoke
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue