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