Use stashed ParserOutput during saving.
[lhc/web/wiklou.git] / includes / Revision / RevisionRenderer.php
index f71f9e7..265ad13 100644 (file)
@@ -24,7 +24,6 @@ namespace MediaWiki\Revision;
 
 use Html;
 use InvalidArgumentException;
-use MediaWiki\Storage\RevisionRecord;
 use ParserOptions;
 use ParserOutput;
 use Psr\Log\LoggerInterface;
@@ -65,6 +64,13 @@ class RevisionRenderer {
                $this->saveParseLogger = new NullLogger();
        }
 
+       /**
+        * @param LoggerInterface $saveParseLogger
+        */
+       public function setLogger( LoggerInterface $saveParseLogger ) {
+               $this->saveParseLogger = $saveParseLogger;
+       }
+
        /**
         * @param RevisionRecord $rev
         * @param ParserOptions|null $options
@@ -76,6 +82,11 @@ class RevisionRenderer {
         *      - 'audience' the audience to use for content access. Default is
         *        RevisionRecord::FOR_PUBLIC if $forUser is not set, RevisionRecord::FOR_THIS_USER
         *        if $forUser is set. Can be set to RevisionRecord::RAW to disable audience checks.
+        *      - 'known-revision-output' a combined ParserOutput for the revision, perhaps from
+        *        some cache. the caller is responsible for ensuring that the ParserOutput indeed
+        *        matched the $rev and $options. This mechanism is intended as a temporary stop-gap,
+        *        for the time until caches have been changed to store RenderedRevision states instead
+        *        of ParserOutput objects.
         *
         * @return RenderedRevision|null The rendered revision, or null if the audience checks fails.
         */
@@ -127,6 +138,10 @@ class RevisionRenderer {
 
                $renderedRevision->setSaveParseLogger( $this->saveParseLogger );
 
+               if ( isset( $hints['known-revision-output'] ) ) {
+                       $renderedRevision->setRevisionParserOutput( $hints['known-revision-output'] );
+               }
+
                return $renderedRevision;
        }
 
@@ -165,15 +180,15 @@ class RevisionRenderer {
                $withHtml = $hints['generate-html'] ?? true;
 
                // short circuit if there is only the main slot
-               if ( array_keys( $slots ) === [ 'main' ] ) {
-                       return $rrev->getSlotParserOutput( 'main' );
+               if ( array_keys( $slots ) === [ SlotRecord::MAIN ] ) {
+                       return $rrev->getSlotParserOutput( SlotRecord::MAIN );
                }
 
                // TODO: put fancy layout logic here, see T200915.
 
                // move main slot to front
-               if ( isset( $slots['main'] ) ) {
-                       $slots = [ 'main' => $slots['main'] ] + $slots;
+               if ( isset( $slots[SlotRecord::MAIN] ) ) {
+                       $slots = [ SlotRecord::MAIN => $slots[SlotRecord::MAIN] ] + $slots;
                }
 
                $combinedOutput = new ParserOutput( null );