Merge "Special:Newpages feed now shows first revision instead of latest revision"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 14 Aug 2017 16:33:19 +0000 (16:33 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 14 Aug 2017 16:33:19 +0000 (16:33 +0000)
1  2 
includes/specials/SpecialNewpages.php

@@@ -293,6 -293,19 +293,19 @@@ class SpecialNewpages extends Includabl
                );
        }
  
+       /**
+        * @param stdClass $row Result row from recent changes
+        * @return Revision|bool
+        */
+       protected function revisionFromRcResult( stdClass $result ) {
+               return new Revision( [
+                       'comment' => $result->rc_comment,
+                       'deleted' => $result->rc_deleted,
+                       'user_text' => $result->rc_user_text,
+                       'user' => $result->rc_user,
+               ] );
+       }
        /**
         * Format a row, providing the timestamp, links to the page/history,
         * size, user links, and a comment
        public function formatRow( $result ) {
                $title = Title::newFromRow( $result );
  
-               # Revision deletion works on revisions, so we should cast one
-               $row = [
-                       'comment' => $result->rc_comment,
-                       'deleted' => $result->rc_deleted,
-                       'user_text' => $result->rc_user_text,
-                       'user' => $result->rc_user,
-               ];
-               $rev = new Revision( $row );
+               // Revision deletion works on revisions,
+               // so cast our recent change row to a revision row.
+               $rev = $this->revisionFromRcResult( $result );
                $rev->setTitle( $title );
  
                $classes = [];
 +              $attribs = [ 'data-mw-revid' => $result->rev_id ];
  
                $lang = $this->getLanguage();
                $dm = $lang->getDirMark();
                        $tagDisplay = '';
                }
  
 -              $css = count( $classes ) ? ' class="' . implode( ' ', $classes ) . '"' : '';
 -
                # 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();
                        );
                }
  
 -              return "<li{$css}>{$time} {$dm}{$plink} {$hist} {$dm}{$length} "
 -                      . "{$dm}{$ulink} {$comment} {$tagDisplay} {$oldTitleText}</li>\n";
 +              return Html::rawElement( 'li', $attribs, $ret ) . "\n";
        }
  
        /**
        }
  
        protected function feedItemDesc( $row ) {
-               $revision = Revision::newFromId( $row->rev_id );
+               $revision = $this->revisionFromRcResult( $row );
                if ( $revision ) {
                        // XXX: include content model/type in feed item?
                        return '<p>' . htmlspecialchars( $revision->getUserText() ) .