Addshore has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/344330 )

Change subject: Add parsed page text to special page
......................................................................

Add parsed page text to special page

This change also introduced the TextRevisions object.

Bug: T161010
Change-Id: I25948159b93f041a9958be25b6793dbb665e22af
---
M extension.json
M modules/ext.FileImporter.Special.css
M src/Generic/Data/FileRevisions.php
M src/Generic/Data/ImportDetails.php
A src/Generic/Data/TextRevisions.php
M src/Generic/Services/Importer.php
M src/Html/ImportPreviewPage.php
A src/Html/TextRevisionSnippet.php
M src/MediaWiki/ApiDetailRetriever.php
9 files changed, 138 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/FileImporter 
refs/changes/30/344330/1

diff --git a/extension.json b/extension.json
index 2c545ab..640c07a 100644
--- a/extension.json
+++ b/extension.json
@@ -41,8 +41,10 @@
                "FileImporter\\Generic\\Data\\FileRevision": 
"src/Generic/Data/FileRevision.php",
                "FileImporter\\Generic\\Data\\FileRevisions": 
"src/Generic/Data/FileRevisions.php",
                "FileImporter\\Generic\\Data\\TextRevision": 
"src/Generic/Data/TextRevision.php",
+               "FileImporter\\Generic\\Data\\TextRevisions": 
"src/Generic/Data/TextRevisions.php",
                "FileImporter\\Html\\ImportPreviewPage": 
"src/Html/ImportPreviewPage.php",
                "FileImporter\\Html\\InputFormPage": 
"src/Html/InputFormPage.php",
+               "FileImporter\\Html\\TextRevisionSnippet": 
"src/Html/TextRevisionSnippet.php",
                "FileImporter\\MediaWiki\\ApiDetailRetriever": 
"src/MediaWiki/ApiDetailRetriever.php",
                "FileImporter\\MediaWiki\\HttpApiLookup": 
"src/MediaWiki/HttpApiLookup.php",
                "FileImporter\\MediaWiki\\SiteTableSiteLookup": 
"src/MediaWiki/SiteTableSiteLookup.php",
diff --git a/modules/ext.FileImporter.Special.css 
b/modules/ext.FileImporter.Special.css
index 514c210..adf3013 100644
--- a/modules/ext.FileImporter.Special.css
+++ b/modules/ext.FileImporter.Special.css
@@ -6,6 +6,12 @@
     margin-bottom: 14px;
 }
 
+.mw-importfile-parsedContent {
+    background-color: #f8f9fa;
+    border: 1px solid #c8ccd1;
+    padding: 1em 1em 1.5em 1em;
+}
+
 .mw-importfile-importOptions {
     background-color: #f8f9fa;
     border: 1px solid #c8ccd1;
diff --git a/src/Generic/Data/FileRevisions.php 
b/src/Generic/Data/FileRevisions.php
index 2b59f95..44da1d3 100644
--- a/src/Generic/Data/FileRevisions.php
+++ b/src/Generic/Data/FileRevisions.php
@@ -41,10 +41,10 @@
 
        private function calculateLatestKey() {
                $latestTimestamp = 0;
-               foreach ( $this->fileRevisions as $key => $fileRevision ) {
-                       $fileTimestamp = strtotime( $fileRevision->getField( 
'timestamp' ) );
-                       if ( $latestTimestamp < $fileTimestamp ) {
-                               $latestTimestamp = $fileTimestamp;
+               foreach ( $this->fileRevisions as $key => $revision ) {
+                       $timestamp = strtotime( $revision->getField( 
'timestamp' ) );
+                       if ( $latestTimestamp < $timestamp ) {
+                               $latestTimestamp = $timestamp;
                                $this->latestKey = $key;
                        }
                }
diff --git a/src/Generic/Data/ImportDetails.php 
b/src/Generic/Data/ImportDetails.php
index 16b0359..a09b772 100644
--- a/src/Generic/Data/ImportDetails.php
+++ b/src/Generic/Data/ImportDetails.php
@@ -22,7 +22,7 @@
        private $imageDisplayUrl;
 
        /**
-        * @var TextRevision[]
+        * @var TextRevisions
         */
        private $textRevisions;
 
@@ -35,19 +35,18 @@
         * @param TargetUrl $targetUrl
         * @param string $titleText
         * @param string $imageDisplayUrl
-        * @param TextRevision[] $textRevisions
+        * @param TextRevisions $textRevisions
         * @param FileRevisions $fileRevisions
         */
        public function __construct(
                TargetUrl $targetUrl,
                $titleText,
                $imageDisplayUrl,
-               array $textRevisions,
+               TextRevisions $textRevisions,
                FileRevisions $fileRevisions
        ) {
                Assert::parameterType( 'string', $titleText, '$titleText' );
                Assert::parameterType( 'string', $imageDisplayUrl, 
'$imageDisplayUrl' );
-               Assert::parameterElementType( TextRevision::class, 
$textRevisions, '$textRevisions' );
 
                $this->targetUrl = $targetUrl;
                $this->titleText = $titleText;
@@ -89,11 +88,11 @@
        public function getHash() {
                $hashes = [
                        sha1( $this->targetUrl->getUrl() ),
-                       sha1( count( $this->getTextRevisions() ) ),
+                       sha1( count( $this->getTextRevisions()->toArray() ) ),
                        sha1( count( $this->getFileRevisions()->toArray() ) ),
                ];
 
-               foreach ( $this->getTextRevisions() as $textRevision ) {
+               foreach ( $this->getTextRevisions()->toArray() as $textRevision 
) {
                        $hashes[] = $textRevision->getField( 'sha1' );
                }
 
diff --git a/src/Generic/Data/TextRevisions.php 
b/src/Generic/Data/TextRevisions.php
new file mode 100644
index 0000000..fb73f5c
--- /dev/null
+++ b/src/Generic/Data/TextRevisions.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace FileImporter\Generic\Data;
+
+use Wikimedia\Assert\Assert;
+
+class TextRevisions {
+
+       /**
+        * @var TextRevision[]
+        */
+       private $textRevisions;
+
+       private $latestKey = null;
+
+       /**
+        * @param TextRevision[] $textRevisions
+        */
+       public function __construct( array $textRevisions ) {
+               Assert::parameterElementType( TextRevision::class, 
$textRevisions, '$textRevisions' );
+               $this->textRevisions = $textRevisions;
+       }
+
+       /**
+        * @return TextRevision[]
+        */
+       public function toArray() {
+               return $this->textRevisions;
+       }
+
+       /**
+        * @return TextRevision|null
+        */
+       public function getLatest() {
+               if ( $this->latestKey === null ) {
+                       $this->calculateLatestKey();
+               }
+
+               return $this->latestKey !== null ? 
$this->textRevisions[$this->latestKey] : null;
+       }
+
+       private function calculateLatestKey() {
+               $latestTimestamp = 0;
+               foreach ( $this->textRevisions as $key => $revision ) {
+                       $timestamp = strtotime( $revision->getField( 
'timestamp' ) );
+                       if ( $latestTimestamp < $timestamp ) {
+                               $latestTimestamp = $timestamp;
+                               $this->latestKey = $key;
+                       }
+               }
+       }
+
+}
diff --git a/src/Generic/Services/Importer.php 
b/src/Generic/Services/Importer.php
index f9b7482..9b6f8ab 100644
--- a/src/Generic/Services/Importer.php
+++ b/src/Generic/Services/Importer.php
@@ -111,7 +111,7 @@
                        }
                }
 
-               foreach ( $importDetails->getTextRevisions() as $textRevision ) 
{
+               foreach ( $importDetails->getTextRevisions()->toArray() as 
$textRevision ) {
                        $wikiRevision = 
$this->wikiRevisionFactory->newFromTextRevision( $textRevision );
                        $importSuccess = $wikiRevision->importOldRevision();
                        if ( !$importSuccess ) {
diff --git a/src/Html/ImportPreviewPage.php b/src/Html/ImportPreviewPage.php
index 238547c..98855d4 100644
--- a/src/Html/ImportPreviewPage.php
+++ b/src/Html/ImportPreviewPage.php
@@ -2,13 +2,17 @@
 
 namespace FileImporter\Html;
 
+use ContentHandler;
 use FileImporter\Generic\Data\ImportDetails;
 use Html;
 use Linker;
 use Message;
+use MWContentSerializationException;
 use OOUI\ButtonInputWidget;
 use OOUI\TextInputWidget;
+use ParserOptions;
 use SpecialPage;
+use Title;
 
 /**
  * Page displaying the preview of the import before it has happened.
@@ -65,6 +69,11 @@
                        [],
                        ( new Message( 'fileimporter-heading-fileinfo' ) 
)->plain()
                ) .
+               Html::rawElement(
+                       'div',
+                       [ 'class' => 'mw-importfile-parsedContent' ],
+                       ( new TextRevisionSnippet( 
$importDetails->getTextRevisions()->getLatest() ) )->getHtml()
+               ) .
                Html::element(
                        'h2',
                        [],
@@ -75,7 +84,7 @@
                        [],
                        ( new Message(
                                'fileimporter-textrevisions',
-                               [ count( $importDetails->getTextRevisions() ) ]
+                               [ count( 
$importDetails->getTextRevisions()->toArray() ) ]
                        ) )->parse()
                ) .
                Html::openElement(
diff --git a/src/Html/TextRevisionSnippet.php b/src/Html/TextRevisionSnippet.php
new file mode 100644
index 0000000..2acf0bb
--- /dev/null
+++ b/src/Html/TextRevisionSnippet.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace FileImporter\Html;
+
+use ContentHandler;
+use FileImporter\Generic\Data\TextRevision;
+use MWContentSerializationException;
+use ParserOptions;
+use Title;
+
+class TextRevisionSnippet {
+
+       /**
+        * @var TextRevision
+        */
+       private $textRevision;
+
+       public function __construct( TextRevision $textRevision ) {
+               $this->textRevision = $textRevision;
+       }
+
+       public function getHtml() {
+               $textRevision = $this->textRevision;
+               $title = Title::newFromText( $textRevision->getField( 'title' 
), NS_FILE );
+
+               $content = null;
+               try {
+                       $content = ContentHandler::makeContent(
+                               $textRevision->getField( '*' ),
+                               $title,
+                               $textRevision->getField( 'contentmodel' ),
+                               $textRevision->getField( 'contentformat' )
+                       );
+               } catch ( MWContentSerializationException $ex ) {
+                       die( 'failed to parse content of latest revision' );
+               }
+
+               $parseResult = $content->getParserOutput(
+                       $title,
+                       null,
+                       $this->getParserOptions(),
+                       true
+               );
+
+               return $parseResult->getText();
+       }
+
+       private function getParserOptions() {
+               $parserOptions = new ParserOptions();
+               $parserOptions->setEditSection( false );
+               return $parserOptions;
+       }
+
+}
diff --git a/src/MediaWiki/ApiDetailRetriever.php 
b/src/MediaWiki/ApiDetailRetriever.php
index d32798b..aab7a20 100644
--- a/src/MediaWiki/ApiDetailRetriever.php
+++ b/src/MediaWiki/ApiDetailRetriever.php
@@ -3,6 +3,7 @@
 namespace FileImporter\MediaWiki;
 
 use FileImporter\Generic\Data\FileRevisions;
+use FileImporter\Generic\Data\TextRevisions;
 use FileImporter\Generic\Exceptions\HttpRequestException;
 use FileImporter\Generic\Exceptions\ImportException;
 use FileImporter\Generic\Data\FileRevision;
@@ -195,7 +196,7 @@
         * @param array $revisionsInfo
         * @param string $pageTitle
         *
-        * @return TextRevision[]
+        * @return TextRevisions
         */
        private function getTextRevisionsFromRevisionsInfo( array 
$revisionsInfo, $pageTitle ) {
                $revisions = [];
@@ -204,7 +205,7 @@
                        $revisionInfo['title'] = $pageTitle;
                        $revisions[] = new TextRevision( $revisionInfo );
                }
-               return $revisions;
+               return new TextRevisions( $revisions );
        }
 
        private function getParams( TargetUrl $targetUrl ) {

-- 
To view, visit https://gerrit.wikimedia.org/r/344330
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I25948159b93f041a9958be25b6793dbb665e22af
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/FileImporter
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to