Page MenuHomeWickedGov Phorge

Block.php
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

Block.php

<?php
namespace MediaWiki\Extension\AbuseFilter\Consequences\Consequence;
use ManualLogEntry;
use MediaWiki\Block\BlockUserFactory;
use MediaWiki\Block\DatabaseBlockStore;
use MediaWiki\Extension\AbuseFilter\Consequences\Parameters;
use MediaWiki\Extension\AbuseFilter\FilterUser;
use MediaWiki\Extension\AbuseFilter\GlobalNameUtils;
use MediaWiki\Title\TitleValue;
use MediaWiki\User\UserIdentity;
use MessageLocalizer;
use Psr\Log\LoggerInterface;
/**
* Consequence that blocks a single user.
*/
class Block extends BlockingConsequence implements ReversibleConsequence {
private bool $preventsTalkEdit;
private DatabaseBlockStore $databaseBlockStore;
/**
* @param Parameters $params
* @param string $expiry
* @param bool $preventTalkEdit
* @param BlockUserFactory $blockUserFactory
* @param DatabaseBlockStore $databaseBlockStore
* @param FilterUser $filterUser
* @param MessageLocalizer $messageLocalizer
* @param LoggerInterface $logger
*/
public function __construct(
Parameters $params,
string $expiry,
bool $preventTalkEdit,
BlockUserFactory $blockUserFactory,
DatabaseBlockStore $databaseBlockStore,
FilterUser $filterUser,
MessageLocalizer $messageLocalizer,
LoggerInterface $logger
) {
parent::__construct( $params, $expiry, $blockUserFactory, $filterUser, $messageLocalizer, $logger );
$this->databaseBlockStore = $databaseBlockStore;
$this->preventsTalkEdit = $preventTalkEdit;
}
/**
* @inheritDoc
*/
public function execute(): bool {
$status = $this->doBlockInternal(
$this->parameters->getFilter()->getName(),
$this->parameters->getFilter()->getID(),
$this->parameters->getUser()->getName(),
$this->expiry,
$autoblock = true,
$this->preventsTalkEdit
);
// TODO: Should we reblock in case of partial blocks? At that point we could return
// the status of doBlockInternal
return defined( 'MW_PHPUNIT_TEST' ) ? $status->isOK() : true;
}
/**
* @inheritDoc
* @todo This could use UnblockUser, but we need to check if the block was performed by the AF user
*/
public function revert( UserIdentity $performer, string $reason ): bool {
$block = $this->databaseBlockStore->newFromTarget( $this->parameters->getUser()->getName() );
if ( !( $block && $block->getBy() === $this->filterUser->getUserIdentity()->getId() ) ) {
// Not blocked by abuse filter
return false;
}
if ( !$this->databaseBlockStore->deleteBlock( $block ) ) {
return false;
}
$logEntry = new ManualLogEntry( 'block', 'unblock' );
$logEntry->setTarget( new TitleValue( NS_USER, $this->parameters->getUser()->getName() ) );
$logEntry->setComment( $reason );
$logEntry->setPerformer( $performer );
if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
// This has a bazillion of static dependencies all around the place, and a nightmare to deal with in tests
// TODO: Remove this check once T253717 is resolved
// @codeCoverageIgnoreStart
$logEntry->publish( $logEntry->insert() );
// @codeCoverageIgnoreEnd
}
return true;
}
/**
* @inheritDoc
*/
public function getMessage(): array {
$filter = $this->parameters->getFilter();
return [
'abusefilter-blocked-display',
$filter->getName(),
GlobalNameUtils::buildGlobalName( $filter->getID(), $this->parameters->getIsGlobalFilter() )
];
}
/**
* @return string
* @internal
*/
public function getExpiry(): string {
return $this->expiry;
}
}

File Metadata

Mime Type
text/x-php
Expires
Tue, Aug 18, 20:30 (2 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
12/6a/ac2d527fa2d4be62c6c183241374
Default Alt Text
Block.php (3 KB)

Event Timeline