41 parent::__construct(
'BlockList' );
52 $out->setPageTitle( $this->
msg(
'ipblocklist' ) );
53 $out->addModuleStyles( [
'mediawiki.special' ] );
56 $par = $request->getVal(
'ip', $par );
57 $this->target = trim( $request->getVal(
'wpTarget', $par ) );
59 $this->options = $request->getArray(
'wpOptions', [] );
60 $this->blockType = $request->getVal(
'blockType' );
62 $action = $request->getText(
'action' );
64 if ( $action ==
'unblock' || $action ==
'submit' && $request->wasPosted() ) {
65 # B/C @since 1.18: Unblock interface is now at Special:Unblock
67 $out->redirect(
$title->getFullURL() );
72 # setup BlockListPager here to get the actual default Limit
75 # Just show the block list
79 'label-message' =>
'ipaddressorusername',
85 'type' =>
'multiselect',
86 'options-messages' => [
87 'blocklist-tempblocks' =>
'tempblocks',
88 'blocklist-indefblocks' =>
'indefblocks',
89 'blocklist-userblocks' =>
'userblocks',
90 'blocklist-addressblocks' =>
'addressblocks',
91 'blocklist-rangeblocks' =>
'rangeblocks',
97 if ( $this->
getConfig()->
get(
'EnablePartialBlocks' ) ) {
98 $fields[
'BlockType'] = [
100 'label-message' =>
'blocklist-type',
102 $this->
msg(
'blocklist-type-opt-all' )->escaped() =>
'',
103 $this->
msg(
'blocklist-type-opt-sitewide' )->escaped() =>
'sitewide',
104 $this->
msg(
'blocklist-type-opt-partial' )->escaped() =>
'partial',
106 'name' =>
'blockType',
107 'cssclass' =>
'mw-field-block-type',
112 'type' =>
'limitselect',
113 'label-message' =>
'table_pager_limit_label',
114 'options' => $pager->getLimitSelectList(),
116 'default' => $pager->getLimit(),
117 'cssclass' => $this->
getConfig()->get(
'EnablePartialBlocks' ) ?
118 'mw-field-limit mw-has-field-block-type' :
124 $form = HTMLForm::factory(
'ooui', $fields,
$context );
127 ->setFormIdentifier(
'blocklist' )
128 ->setWrapperLegendMsg(
'ipblocklist-legend' )
129 ->setSubmitTextMsg(
'ipblocklist-submit' )
131 ->displayForm(
false );
142 $db = $this->
getDB();
143 # Is the user allowed to see hidden blocks?
144 if ( !MediaWikiServices::getInstance()
146 ->userHasRight( $this->
getUser(),
'hideuser' )
148 $conds[
'ipb_deleted'] = 0;
151 if ( $this->target !==
'' ) {
152 list(
$target,
$type ) = DatabaseBlock::parseTarget( $this->target );
155 case DatabaseBlock::TYPE_ID:
156 case DatabaseBlock::TYPE_AUTO:
160 case DatabaseBlock::TYPE_IP:
161 case DatabaseBlock::TYPE_RANGE:
162 list( $start, $end ) = IP::parseRange(
$target );
163 $conds[] = $db->makeList(
166 DatabaseBlock::getRangeCond( $start, $end )
170 $conds[
'ipb_auto'] = 0;
173 case DatabaseBlock::TYPE_USER:
174 $conds[
'ipb_address'] =
$target->getName();
175 $conds[
'ipb_auto'] = 0;
181 if ( in_array(
'userblocks', $this->options ) ) {
182 $conds[
'ipb_user'] = 0;
184 if ( in_array(
'addressblocks', $this->options ) ) {
185 $conds[] =
"ipb_user != 0 OR ipb_range_end > ipb_range_start";
187 if ( in_array(
'rangeblocks', $this->options ) ) {
188 $conds[] =
"ipb_range_end = ipb_range_start";
191 $hideTemp = in_array(
'tempblocks', $this->options );
192 $hideIndef = in_array(
'indefblocks', $this->options );
193 if ( $hideTemp && $hideIndef ) {
196 } elseif ( $hideTemp ) {
197 $conds[
'ipb_expiry'] = $db->getInfinity();
198 } elseif ( $hideIndef ) {
199 $conds[] =
"ipb_expiry != " . $db->addQuotes( $db->getInfinity() );
202 if ( $this->blockType ===
'sitewide' ) {
203 $conds[
'ipb_sitewide'] = 1;
204 } elseif ( $this->blockType ===
'partial' ) {
205 $conds[
'ipb_sitewide'] = 0;
218 # Check for other blocks, i.e. global/tor blocks
219 $otherBlockLink = [];
220 Hooks::run(
'OtherBlockLogLink', [ &$otherBlockLink, $this->target ] );
222 # Show additional header for the local block only when other blocks exists.
223 # Not necessary in a standard installation without such extensions enabled
224 if ( count( $otherBlockLink ) ) {
226 Html::element(
'h2', [], $this->
msg(
'ipblocklist-localblock' )->text() ) .
"\n"
232 } elseif ( $this->target ) {
233 $out->addWikiMsg(
'ipblocklist-no-results' );
235 $out->addWikiMsg(
'ipblocklist-empty' );
238 if ( count( $otherBlockLink ) ) {
243 $this->
msg(
'ipblocklist-otherblocks', count( $otherBlockLink ) )->parse()
247 foreach ( $otherBlockLink as $link ) {
248 $list .= Html::rawElement(
'li', [], $link ) .
"\n";
250 $out->addHTML( Html::rawElement(
252 [
'class' =>
'mw-ipblocklist-otherblocks' ],
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
An IContextSource implementation which will inherit context from another source but allow individual ...
A special page that lists existing blocks.
getDB()
Return a IDatabase object for reading.
showList(BlockListPager $pager)
Show the list of blocked accounts matching the actual filter.
getBlockListPager()
Setup a new BlockListPager instance.
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Parent class for all special pages.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
getOutput()
Get the OutputPage being used for this instance.
getUser()
Shortcut to get the User executing this instance.
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
getContext()
Gets the context this SpecialPage is executed in.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getConfig()
Shortcut to get main config object.
getRequest()
Get the WebRequest being used for this instance.
getPageTitle( $subpage=false)
Get a self-referential title object.
addHelpLink( $to, $overrideBaseUrl=false)
Adds help link with an icon via page indicators.