From 283ee7238b7f9ddb58a318ab2caa4ea534467f1d Mon Sep 17 00:00:00 2001 From: Prateek Saxena Date: Sun, 2 Jul 2017 16:58:42 +0530 Subject: [PATCH] Special:ListUsers: Use HTMLForm and OOUI Also update the hooks documentation. Now that it is using HTMLForm the
is closed before the submit button is added. The old code was closing the
after adding the submit button so the documentatio made sense. Bug: T111999 Change-Id: I109065100e40fef0c56a010c444de04a40950479 --- docs/hooks.txt | 2 +- includes/specials/pagers/UsersPager.php | 134 +++++++++++++----------- 2 files changed, 76 insertions(+), 60 deletions(-) diff --git a/docs/hooks.txt b/docs/hooks.txt index 3d310c3508f..1524c5d6361 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -3112,7 +3112,7 @@ UsersPager::formatRow(). &$item: HTML to be returned. Will be wrapped in
  • after the hook finishes $row: Database row object -'SpecialListusersHeader': Called before closing the
    in +'SpecialListusersHeader': Called after adding the submit button in UsersPager::getPageHeader(). $pager: The UsersPager instance &$out: The header HTML diff --git a/includes/specials/pagers/UsersPager.php b/includes/specials/pagers/UsersPager.php index 9aef9ade4b7..7fa03bae341 100644 --- a/includes/specials/pagers/UsersPager.php +++ b/includes/specials/pagers/UsersPager.php @@ -270,71 +270,87 @@ class UsersPager extends AlphabeticPager { function getPageHeader() { list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() ); - $this->getOutput()->addModules( 'mediawiki.userSuggest' ); - - # Form tag - $out = Xml::openElement( - 'form', - [ 'method' => 'get', 'action' => wfScript(), 'id' => 'mw-listusers-form' ] - ) . - Xml::fieldset( $this->msg( 'listusers' )->text() ) . - Html::hidden( 'title', $self ); - - # Username field (with autocompletion support) - $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' . - Html::input( - 'username', - $this->requestedUser, - 'text', - [ - 'class' => 'mw-autocomplete-user', - 'id' => 'offset', - 'size' => 20, - 'autofocus' => $this->requestedUser === '' - ] - ) . ' '; - - # Group drop-down list - $sel = new XmlSelect( 'group', 'group', $this->requestedGroup ); - $sel->addOption( $this->msg( 'group-all' )->text(), '' ); + $groupOptions = [ $this->msg( 'group-all' )->text() => '' ]; foreach ( $this->getAllGroups() as $group => $groupText ) { - $sel->addOption( $groupText, $group ); + $groupOptions[ $groupText ] = $group; } - $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' '; - $out .= $sel->getHTML() . '
    '; - $out .= Xml::checkLabel( - $this->msg( 'listusers-editsonly' )->text(), - 'editsOnly', - 'editsOnly', - $this->editsOnly - ); - $out .= ' '; - $out .= Xml::checkLabel( - $this->msg( 'listusers-creationsort' )->text(), - 'creationSort', - 'creationSort', - $this->creationSort - ); - $out .= ' '; - $out .= Xml::checkLabel( - $this->msg( 'listusers-desc' )->text(), - 'desc', - 'desc', - $this->mDefaultDirection - ); - $out .= '
    '; + $optionsDefault = []; + if ( $this->editsOnly ) { + $optionsDefault[] = 'editsOnly'; + } + if ( $this->creationSort ) { + $optionsDefault[] = 'creationSort'; + } + if ( $this->mDefaultDirection ) { + $optionsDefault[] = 'desc'; + } - Hooks::run( 'SpecialListusersHeaderForm', [ $this, &$out ] ); + $formDescriptor = [ + 'user' => [ + 'class' => 'HTMLUserTextField', + 'label' => $this->msg( 'listusersfrom' )->text(), + 'name' => 'username', + 'value' => $this->requestedUser, + ], + 'dropdown' => [ + 'label' => $this->msg( 'group' ), + 'name' => 'group', + 'value' => $this->requestedGroup, + 'class' => 'HTMLSelectField', + 'options' => $groupOptions, + ], + 'options' => [ + 'class' => 'HTMLMultiSelectField', + 'options' => [ + $this->msg( 'listusers-editsonly' )->text() => 'editsOnly', + $this->msg( 'listusers-creationsort' )->text() => 'creationSort', + $this->msg( 'listusers-desc' )->text() => 'desc' + ], + 'default' => $optionsDefault + ], + 'limithiddenfield' => [ + 'class' => 'HTMLHiddenField', + 'name' => 'limit', + 'value' => $this->mLimit + ] + ]; - # Submit button and form bottom - $out .= Html::hidden( 'limit', $this->mLimit ); - $out .= Xml::submitButton( $this->msg( 'listusers-submit' )->text() ); - Hooks::run( 'SpecialListusersHeader', [ $this, &$out ] ); - $out .= Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ); + $beforeSubmitButtonHookOut = ''; + Hooks::run( 'SpecialListusersHeaderForm', [ $this, &$beforeSubmitButtonHookOut ] ); - return $out; + if ( $beforeSubmitButtonHookOut !== '' ) { + $formDescriptior[ 'beforeSubmitButtonHookOut' ] = [ + 'class' => 'HTMLInfoField', + 'raw' => true, + 'default' => $beforeSubmitButtonHookOut + ]; + } + + $formDescriptor[ 'submit' ] = [ + 'class' => 'HTMLSubmitField', + 'buttonlabel-message' => 'listusers-submit', + ]; + + $beforeClosingFieldsetHookOut = ''; + Hooks::run( 'SpecialListusersHeader', [ $this, &$beforeClosingFieldsetHookOut ] ); + + if ( $beforeClosingFieldsetHookOut !== '' ) { + $formDescriptior[ 'beforeClosingFieldsetHookOut' ] = [ + 'class' => 'HTMLInfoField', + 'raw' => true, + 'default' => $beforeClosingFieldsetHookOut + ]; + } + + $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ); + $htmlForm + ->setMethod( 'get' ) + ->setId( 'mw-listusers-form' ) + ->setFormIdentifier( 'mw-listusers-form' ) + ->suppressDefaultSubmit() + ->setWrapperLegendMsg( 'listusers' ); + return $htmlForm->prepareForm()->getHTML( true ); } /**