Merge "SpecialNewPages: Fix omitted Show/Hide redirect value"
[lhc/web/wiklou.git] / includes / specials / SpecialNewpages.php
index e378bcf..33a1990 100644 (file)
@@ -214,7 +214,6 @@ class SpecialNewpages extends IncludableSpecialPage {
 
        protected function form() {
                $out = $this->getOutput();
-               $out->addModules( 'mediawiki.userSuggest' );
 
                // Consume values
                $this->opts->consumeValue( 'offset' ); // don't carry offset, DWIW
@@ -237,7 +236,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                }
                $hidden = implode( "\n", $hidden );
 
-               $form = [
+               $formDescriptor = [
                        'namespace' => [
                                'type' => 'namespaceselect',
                                'name' => 'namespace',
@@ -258,13 +257,12 @@ class SpecialNewpages extends IncludableSpecialPage {
                                'default' => $tagFilterVal,
                        ],
                        'username' => [
-                               'type' => 'text',
+                               'type' => 'user',
                                'name' => 'username',
                                'label-message' => 'newpages-username',
                                'default' => $userText,
                                'id' => 'mw-np-username',
                                'size' => 30,
-                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ],
                        'size' => [
                                'type' => 'sizefilter',
@@ -273,44 +271,41 @@ class SpecialNewpages extends IncludableSpecialPage {
                        ],
                ];
 
-               $htmlForm = new HTMLForm( $form, $this->getContext() );
-
-               $htmlForm->setSubmitText( $this->msg( 'newpages-submit' )->text() );
-               $htmlForm->setSubmitProgressive();
-               // The form should be visible on each request (inclusive requests with submitted forms), so
-               // return always false here.
-               $htmlForm->setSubmitCallback(
-                       function () {
-                               return false;
-                       }
-               );
-               $htmlForm->setMethod( 'get' );
-
-               $out->addHTML( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
-
-               $htmlForm->show();
-
-               $out->addHTML(
-                       Html::rawElement(
+               $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+               $htmlForm
+                       ->setMethod( 'get' )
+                       ->setFormIdentifier( 'newpagesform' )
+                       // The form should be visible on each request (inclusive requests with submitted forms), so
+                       // return always false here.
+                       ->setSubmitCallback(
+                               function () {
+                                       return false;
+                               }
+                       )
+                       ->setSubmitText( $this->msg( 'newpages-submit' )->text() )
+                       ->setWrapperLegend( $this->msg( 'newpages' )->text() )
+                       ->addFooterText( Html::rawElement(
                                'div',
                                null,
                                $this->filterLinks()
-                       ) .
-                       Xml::closeElement( 'fieldset' )
-               );
+                       ) )
+                       ->show();
+               $out->addModuleStyles( 'mediawiki.special' );
        }
 
        /**
-        * @param stdClass $row Result row from recent changes
-        * @return Revision|bool
+        * @param stdClass $result Result row from recent changes
+        * @param Title $title
+        * @return bool|Revision
         */
-       protected function revisionFromRcResult( stdClass $result ) {
+       protected function revisionFromRcResult( stdClass $result, Title $title ) {
                return new Revision( [
-                       'comment' => $result->rc_comment,
+                       'comment' => CommentStore::getStore()->getComment( 'rc_comment', $result )->text,
                        'deleted' => $result->rc_deleted,
                        'user_text' => $result->rc_user_text,
                        'user' => $result->rc_user,
-               ] );
+                       'actor' => $result->rc_actor,
+               ], 0, $title );
        }
 
        /**
@@ -325,8 +320,7 @@ class SpecialNewpages extends IncludableSpecialPage {
 
                // Revision deletion works on revisions,
                // so cast our recent change row to a revision row.
-               $rev = $this->revisionFromRcResult( $result );
-               $rev->setTitle( $title );
+               $rev = $this->revisionFromRcResult( $result, $title );
 
                $classes = [];
                $attribs = [ 'data-mw-revid' => $result->rev_id ];
@@ -397,16 +391,6 @@ class SpecialNewpages extends IncludableSpecialPage {
                # Display the old title if the namespace/title has been changed
                $oldTitleText = '';
                $oldTitle = Title::makeTitle( $result->rc_namespace, $result->rc_title );
-               $ret = "{$time} {$dm}{$plink} {$hist} {$dm}{$length} {$dm}{$ulink} {$comment} "
-                       . "{$tagDisplay} {$oldTitleText}";
-
-               // Let extensions add data
-               Hooks::run( 'NewPagesLineEnding', [ $this, &$ret, $result, &$classes, &$attribs ] );
-               $attribs = wfArrayFilterByKey( $attribs, [ Sanitizer::class, 'isReservedDataAttribute' ] );
-
-               if ( count( $classes ) ) {
-                       $attribs['class'] = implode( ' ', $classes );
-               }
 
                if ( !$title->equals( $oldTitle ) ) {
                        $oldTitleText = $oldTitle->getPrefixedText();
@@ -417,6 +401,20 @@ class SpecialNewpages extends IncludableSpecialPage {
                        );
                }
 
+               $ret = "{$time} {$dm}{$plink} {$hist} {$dm}{$length} {$dm}{$ulink} {$comment} "
+                       . "{$tagDisplay} {$oldTitleText}";
+
+               // Let extensions add data
+               Hooks::run( 'NewPagesLineEnding', [ $this, &$ret, $result, &$classes, &$attribs ] );
+               $attribs = array_filter( $attribs,
+                       [ Sanitizer::class, 'isReservedDataAttribute' ],
+                       ARRAY_FILTER_USE_KEY
+               );
+
+               if ( count( $classes ) ) {
+                       $attribs['class'] = implode( ' ', $classes );
+               }
+
                return Html::rawElement( 'li', $attribs, $ret ) . "\n";
        }
 
@@ -496,21 +494,26 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function feedItemAuthor( $row ) {
-               return isset( $row->rc_user_text ) ? $row->rc_user_text : '';
+               return $row->rc_user_text ?? '';
        }
 
        protected function feedItemDesc( $row ) {
-               $revision = $this->revisionFromRcResult( $row );
-               if ( $revision ) {
-                       // XXX: include content model/type in feed item?
-                       return '<p>' . htmlspecialchars( $revision->getUserText() ) .
-                               $this->msg( 'colon-separator' )->inContentLanguage()->escaped() .
-                               htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
-                               "</p>\n<hr />\n<div>" .
-                               nl2br( htmlspecialchars( $revision->getContent()->serialize() ) ) . "</div>";
+               $revision = Revision::newFromId( $row->rev_id );
+               if ( !$revision ) {
+                       return '';
+               }
+
+               $content = $revision->getContent();
+               if ( $content === null ) {
+                       return '';
                }
 
-               return '';
+               // XXX: include content model/type in feed item?
+               return '<p>' . htmlspecialchars( $revision->getUserText() ) .
+                       $this->msg( 'colon-separator' )->inContentLanguage()->escaped() .
+                       htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
+                       "</p>\n<hr />\n<div>" .
+                       nl2br( htmlspecialchars( $content->serialize() ) ) . "</div>";
        }
 
        protected function getGroupName() {