wiki.techinc.nl/includes/api/ApiBlockInfoTrait.php
Thalia c0e81bd69b Move $isHardblock property up to AbstractBlock from DatabaseBlock
System blocks (which tend to be against IP addresses) can apply to
anon users only, or to logged-in users too. This differs depending
on the type of system block.

This is enforced in BlockManager::getAdditionalIpBlocks by checking
whether the user is anonymous before constructing a given type of
system block. Before this commit, it is not codified in the block's
properties, meaning that there is no way to communicate via the
API whether the block blocks logged-in users too.

Database blocks have a property $isHardblock; move this up to
AbstractBlock, so that system blocks and composite blocks can set
this property too.

Bug: T261639
Change-Id: I4f6ddf6cca6e01e85c56eef1ca7496dd6fcf52e6
2020-10-07 13:23:12 +01:00

83 lines
2.5 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
use MediaWiki\Block\AbstractBlock;
use MediaWiki\Block\SystemBlock;
/**
* @ingroup API
*/
trait ApiBlockInfoTrait {
/**
* Get basic info about a given block
* @param AbstractBlock $block
* @param Language|null $language
* @return array Array containing several keys:
* - blockid - ID of the block
* - blockedby - username of the blocker
* - blockedbyid - user ID of the blocker
* - blockreason - reason provided for the block
* - blockedtimestamp - timestamp for when the block was placed/modified
* - blockexpiry - expiry time of the block
* - blockpartial - block only applies to certain pages, namespaces and/or actions
* - systemblocktype - system block type, if any
*/
private function getBlockDetails(
AbstractBlock $block,
$language = null
) {
if ( $language === null ) {
$language = $this->getLanguage();
}
$vals = [];
$vals['blockid'] = $block->getId();
$vals['blockedby'] = $block->getByName();
$vals['blockedbyid'] = $block->getBy();
$vals['blockreason'] = $block->getReasonComment()
->message->inLanguage( $language )->plain();
$vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->getTimestamp() );
$vals['blockexpiry'] = ApiResult::formatExpiry( $block->getExpiry(), 'infinite' );
$vals['blockpartial'] = !$block->isSitewide();
$vals['blocknocreate'] = $block->isCreateAccountBlocked();
$vals['blockanononly'] = !$block->isHardblock();
if ( $block instanceof SystemBlock ) {
$vals['systemblocktype'] = $block->getSystemBlockType();
}
return $vals;
}
/**
* @name Methods required from ApiBase
* @{
*/
/**
* @see IContextSource::getLanguage
* @return Language
*/
abstract public function getLanguage();
/** @} */
}