Previously it would affect all actions that use Title::userCan.
This used to be less noticable, but recently was expanded to include
the 'read' action. This only affected the case where both
$wgBlockDisablesLogin and $wgEmailConfirmedToEdit were enabled.
I don't think anyone was relying on the old behaviour as it was
undocumented, and only affected obscure permissions (checked with
Title::userCan and not depending on "edit" rights)
Follow-up
b675be2083
Bug: T143790
Change-Id: I4ad93ed78de4f1ed444f73df6dc26d405a67e553
(cherry picked from commit
d561f646b9b8424bd79cfc14729a622a143d9f12)
- if ( $wgEmailConfirmToEdit && !$user->isEmailConfirmed() ) {
+ if ( $wgEmailConfirmToEdit
+ && !$user->isEmailConfirmed()
+ && $action === 'edit'
+ ) {
$errors[] = [ 'confirmedittext' ];
}
$errors[] = [ 'confirmedittext' ];
}
* @covers Title::checkUserBlock
*/
public function testUserBlock() {
* @covers Title::checkUserBlock
*/
public function testUserBlock() {
- global $wgEmailConfirmToEdit, $wgEmailAuthentication;
- $wgEmailConfirmToEdit = true;
- $wgEmailAuthentication = true;
+ $this->setMwGlobals( [
+ 'wgEmailConfirmToEdit' => true,
+ 'wgEmailAuthentication' => true,
+ ] );
$this->setUserPerm( [ "createpage", "move" ] );
$this->setTitle( NS_HELP, "test page" );
$this->setUserPerm( [ "createpage", "move" ] );
$this->setTitle( NS_HELP, "test page" );
- # $short
- $this->assertEquals( [ [ 'confirmedittext' ] ],
+ # $wgEmailConfirmToEdit only applies to 'edit' action
+ $this->assertEquals( [],
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
- $wgEmailConfirmToEdit = false;
- $this->assertEquals( true, $this->title->userCan( 'move-target', $this->user ) );
+ $this->assertContains( [ 'confirmedittext' ],
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
+
+ $this->setMwGlobals( 'wgEmailConfirmToEdit', false );
+ $this->assertNotContains( [ 'confirmedittext' ],
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
# $wgEmailConfirmToEdit && !$user->isEmailConfirmed() && $action != 'createaccount'
$this->assertEquals( [],
# $wgEmailConfirmToEdit && !$user->isEmailConfirmed() && $action != 'createaccount'
$this->assertEquals( [],