Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
75.00% covered (warning)
75.00%
3 / 4
CRAP
85.71% covered (warning)
85.71%
18 / 21
SystemBlock
0.00% covered (danger)
0.00%
0 / 1
75.00% covered (warning)
75.00%
3 / 4
9.24
85.71% covered (warning)
85.71%
18 / 21
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 getSystemBlockType
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getPermissionsError
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 appliesToPasswordReset
0.00% covered (danger)
0.00%
0 / 1
6.97
70.00% covered (warning)
70.00%
7 / 10
<?php
/**
 * Class for temporary blocks created on enforcement.
 *
 * 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
 */
namespace MediaWiki\Block;
use IContextSource;
/**
 * System blocks are temporary blocks that are created on enforcement (e.g.
 * from IP blacklists) and are not saved to the database. The target of a
 * system block is an IP address. System blocks do not give rise to
 * autoblocks and are not tracked with cookies.
 *
 * @since 1.34
 */
class SystemBlock extends AbstractBlock {
    /** @var string|null */
    private $systemBlockType;
    /**
     * Create a new block with specified parameters on a user, IP or IP range.
     *
     * @param array $options Parameters of the block:
     *     systemBlock string   Indicate that this block is automatically
     *                          created by MediaWiki rather than being stored
     *                          in the database. Value is a string to return
     *                          from self::getSystemBlockType().
     */
    function __construct( $options = [] ) {
        parent::__construct( $options );
        $defaults = [
            'systemBlock' => null,
        ];
        $options += $defaults;
        $this->systemBlockType = $options['systemBlock'];
    }
    /**
     * Get the system block type, if any. A SystemBlock can have the following types:
     * - 'proxy': the IP is blacklisted in $wgProxyList
     * - 'dnsbl': the IP is associated with a blacklisted domain in $wgDnsBlacklistUrls
     * - 'wgSoftBlockRanges': the IP is covered by $wgSoftBlockRanges
     * - 'global-block': for backwards compatability with the UserIsBlockedGlobally hook
     *
     * @since 1.29
     * @return string|null
     */
    public function getSystemBlockType() {
        return $this->systemBlockType;
    }
    /**
     * @inheritDoc
     */
    public function getPermissionsError( IContextSource $context ) {
        $params = $this->getBlockErrorParams( $context );
        // TODO: Clean up error messages params so we don't have to do this
        $params[ 4 ] = $this->getSystemBlockType();
        $msg = 'systemblockedtext';
        array_unshift( $params, $msg );
        return $params;
    }
    /**
     * @inheritDoc
     */
    public function appliesToPasswordReset() {
        switch ( $this->getSystemBlockType() ) {
            case null:
            case 'global-block':
                return $this->isCreateAccountBlocked();
            case 'proxy':
                return true;
            case 'dnsbl':
            case 'wgSoftBlockRanges':
                return false;
            default:
                return true;
        }
    }
}