Merge "Convert SpecialPrefixIndex to class HTMLForm"
[lhc/web/wiklou.git] / includes / specials / SpecialChangeCredentials.php
index 382dac7..970a2e2 100644 (file)
@@ -81,18 +81,14 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                        return;
                }
 
-               if ( $this->getRequest()->getCheck( 'wpCancel' ) ) {
-                       $returnUrl = $this->getReturnUrl() ?: Title::newMainPage()->getFullURL();
-                       $this->getOutput()->redirect( $returnUrl );
-                       return;
-               }
-
                if ( !$this->authRequests ) {
                        // messages used: changecredentials-invalidsubpage, removecredentials-invalidsubpage
                        $this->showSubpageList( $this->msg( static::$messagePrefix . '-invalidsubpage', $subPage ) );
                        return;
                }
 
+               $this->getOutput()->addBacklinkSubtitle( $this->getPageTitle() );
+
                $status = $this->trySubmit();
 
                if ( $status === false || !$status->isOK() ) {
@@ -130,7 +126,27 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                if ( !static::$loadUserData ) {
                        return [];
                } else {
-                       return parent::getAuthFormDescriptor( $requests, $action );
+                       $descriptor = parent::getAuthFormDescriptor( $requests, $action );
+
+                       $any = false;
+                       foreach ( $descriptor as &$field ) {
+                               if ( $field['type'] === 'password' && $field['name'] !== 'retype' ) {
+                                       $any = true;
+                                       if ( isset( $field['cssclass'] ) ) {
+                                               $field['cssclass'] .= ' mw-changecredentials-validate-password';
+                                       } else {
+                                               $field['cssclass'] = 'mw-changecredentials-validate-password';
+                                       }
+                               }
+                       }
+
+                       if ( $any ) {
+                               $this->getOutput()->addModules( [
+                                       'mediawiki.special.changecredentials.js'
+                               ] );
+                       }
+
+                       return $descriptor;
                }
        }
 
@@ -141,25 +157,21 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
 
                $form->addPreText(
                        Html::openElement( 'dl' )
-                       . Html::element( 'dt', [], wfMessage( 'credentialsform-provider' ) )
+                       . Html::element( 'dt', [], wfMessage( 'credentialsform-provider' )->text() )
                        . Html::element( 'dd', [], $info['provider'] )
-                       . Html::element( 'dt', [], wfMessage( 'credentialsform-account' ) )
+                       . Html::element( 'dt', [], wfMessage( 'credentialsform-account' )->text() )
                        . Html::element( 'dd', [], $info['account'] )
                        . Html::closeElement( 'dl' )
                );
 
                // messages used: changecredentials-submit removecredentials-submit
-               // changecredentials-submit-cancel removecredentials-submit-cancel
                $form->setSubmitTextMsg( static::$messagePrefix . '-submit' );
-               $form->addButton( [
-                       'name' => 'wpCancel',
-                       'value' => $this->msg( static::$messagePrefix . '-submit-cancel' )->text()
-               ] );
+               $form->showCancel()->setCancelTarget( $this->getReturnUrl() ?: Title::newMainPage() );
 
                return $form;
        }
 
-       protected function needsSubmitButton( $formDescriptor ) {
+       protected function needsSubmitButton( array $requests ) {
                // Change/remove forms show are built from a single AuthenticationRequest and do not allow
                // for redirect flow; they always need a submit button.
                return true;
@@ -194,6 +206,7 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                        $groupedRequests[(string)$info['provider']][] = $req;
                }
 
+               $linkRenderer = $this->getLinkRenderer();
                $out->addHTML( Html::openElement( 'dl' ) );
                foreach ( $groupedRequests as $group => $members ) {
                        $out->addHTML( Html::element( 'dt', [], $group ) );
@@ -201,8 +214,10 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                                /** @var AuthenticationRequest $req */
                                $info = $req->describeCredentials();
                                $out->addHTML( Html::rawElement( 'dd', [],
-                                       Linker::link( $this->getPageTitle( $req->getUniqueId() ),
-                                               htmlspecialchars( $info['account'], ENT_QUOTES ) )
+                                       $linkRenderer->makeLink(
+                                               $this->getPageTitle( $req->getUniqueId() ),
+                                               $info['account']
+                                       )
                                ) );
                        }
                }
@@ -243,7 +258,7 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                }
 
                $title = Title::newFromText( $returnTo );
-               return $title->getFullURL( $returnToQuery );
+               return $title->getFullUrlForRedirect( $returnToQuery );
        }
 
        protected function getRequestBlacklist() {