setHeaders();
$this->outputHeader();
$this->addHelpLink( 'Help:Protected_pages' );
$request = $this->getRequest();
$type = $request->getVal( $this->IdType );
$level = $request->getVal( $this->IdLevel );
$sizetype = $request->getVal( 'sizetype' );
$size = $request->getIntOrNull( 'size' );
$NS = $request->getIntOrNull( 'namespace' );
$pager = new ProtectedTitlesPager( $this, [], $type, $level, $NS, $sizetype, $size );
$this->getOutput()->addHTML( $this->showOptions( $NS, $type, $level ) );
if ( $pager->getNumRows() ) {
$this->getOutput()->addHTML(
$pager->getNavigationBar() .
'
' . $pager->getBody() . '
' .
$pager->getNavigationBar()
);
} else {
$this->getOutput()->addWikiMsg( 'protectedtitlesempty' );
}
}
/**
* Callback function to output a restriction
*
* @param object $row Database row
* @return string
*/
public function formatRow( $row ) {
$title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
if ( !$title ) {
return Html::rawElement(
'li',
[],
Html::element(
'span',
[ 'class' => 'mw-invalidtitle' ],
Linker::getInvalidTitleDescription(
$this->getContext(),
$row->pt_namespace,
$row->pt_title
)
)
) . "\n";
}
$link = $this->getLinkRenderer()->makeLink( $title );
// Messages: restriction-level-sysop, restriction-level-autoconfirmed
$description = $this->msg( 'restriction-level-' . $row->pt_create_perm )->escaped();
$lang = $this->getLanguage();
$expiry = strlen( $row->pt_expiry ) ?
$lang->formatExpiry( $row->pt_expiry, TS_MW ) :
'infinity';
if ( $expiry !== 'infinity' ) {
$user = $this->getUser();
$description .= $this->msg( 'comma-separator' )->escaped() . $this->msg(
'protect-expiring-local',
$lang->userTimeAndDate( $expiry, $user ),
$lang->userDate( $expiry, $user ),
$lang->userTime( $expiry, $user )
)->escaped();
}
return '' . $lang->specialList( $link, $description ) . "\n";
}
/**
* @param int $namespace
* @param string $type
* @param string $level
* @return string
* @internal
*/
private function showOptions( $namespace, $type, $level ) {
$formDescriptor = [
'namespace' => [
'class' => 'HTMLSelectNamespace',
'name' => 'namespace',
'id' => 'namespace',
'cssclass' => 'namespaceselector',
'all' => '',
'label' => $this->msg( 'namespace' )->text()
],
'levelmenu' => $this->getLevelMenu( $level )
];
$htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
$htmlForm
->setMethod( 'get' )
->setWrapperLegendMsg( 'protectedtitles' )
->setSubmitText( $this->msg( 'protectedtitles-submit' )->text() );
return $htmlForm->prepareForm()->getHTML( false );
}
/**
* @param string $pr_level Determines which option is selected as default
* @return string|array
* @internal
*/
private function getLevelMenu( $pr_level ) {
// Temporary array
$m = [ $this->msg( 'restriction-level-all' )->text() => 0 ];
$options = [];
// First pass to load the log names
foreach ( $this->getConfig()->get( 'RestrictionLevels' ) as $type ) {
if ( $type != '' && $type != '*' ) {
// Messages: restriction-level-sysop, restriction-level-autoconfirmed
$text = $this->msg( "restriction-level-$type" )->text();
$m[$text] = $type;
}
}
// Is there only one level (aside from "all")?
if ( count( $m ) <= 2 ) {
return '';
}
// Third pass generates sorted XHTML content
foreach ( $m as $text => $type ) {
$options[ $text ] = $type;
}
return [
'type' => 'select',
'options' => $options,
'label' => $this->msg( 'restriction-level' )->text(),
'name' => $this->IdLevel,
'id' => $this->IdLevel
];
}
protected function getGroupName() {
return 'maintenance';
}
}