jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/355883 )
Change subject: Uses IndexContent in ProofreadIndexPage
......................................................................
Uses IndexContent in ProofreadIndexPage
Change-Id: I85b0aaa72fcf696c903f80c48701624c1e9ef305
---
M includes/index/EditIndexPage.php
M includes/index/ProofreadIndexPage.php
M includes/page/PageContentBuilder.php
M tests/phpunit/index/IndexContentHandlerTest.php
M tests/phpunit/index/ProofreadIndexPageTest.php
5 files changed, 89 insertions(+), 68 deletions(-)
Approvals:
jenkins-bot: Verified
Tpt: Looks good to me, approved
Amritsreekumar: Looks good to me, but someone else must approve
diff --git a/includes/index/EditIndexPage.php b/includes/index/EditIndexPage.php
index 819389e..909b96f 100644
--- a/includes/index/EditIndexPage.php
+++ b/includes/index/EditIndexPage.php
@@ -2,6 +2,7 @@
namespace ProofreadPage\Index;
+use ContentHandler;
use EditPage;
use Html;
use OutputPage;
@@ -41,8 +42,7 @@
$inputAttributes['readonly'] = '';
}
- $index = new ProofreadIndexPage( $this->mTitle,
ProofreadIndexPage::getDataConfig(), $this->textbox1 );
- $entries = $index->getIndexEntries();
+ $entries = $this->getActualContent()->getIndexEntries();
$out->addHTML( Html::openElement( 'table', [ 'id' =>
'prp-formTable' ] ) );
$i = 10;
@@ -178,7 +178,7 @@
* @see EditPage::internalAttemptSave
*/
public function internalAttemptSave( &$result, $bot = false ) {
- $index = new ProofreadIndexPage( $this->mTitle,
ProofreadIndexPage::getDataConfig(), $this->textbox1 );
+ $index = $this->getActualContent();
// Get list of pages titles
$links = $index->getLinksToPageNamespace();
@@ -198,4 +198,12 @@
return parent::internalAttemptSave( $result, $bot );
}
+
+ private function getActualContent() {
+ return new ProofreadIndexPage(
+ $this->mTitle,
+ ProofreadIndexPage::getDataConfig(),
+ ContentHandler::getForModelID( $this->contentModel
)->unserializeContent( $this->textbox1, $this->contentFormat )
+ );
+ }
}
diff --git a/includes/index/ProofreadIndexPage.php
b/includes/index/ProofreadIndexPage.php
index e1543f6..b82374e 100644
--- a/includes/index/ProofreadIndexPage.php
+++ b/includes/index/ProofreadIndexPage.php
@@ -21,6 +21,7 @@
use ProofreadPage\Context;
use ProofreadPage\FileNotFoundException;
+use ProofreadPage\Index\IndexContent;
use ProofreadPage\Pagination\PageList;
/**
@@ -34,14 +35,9 @@
protected $title;
/**
- * @var string content of the page
+ * @var IndexContent|null content of the page
*/
- protected $text;
-
- /**
- * @var ProofreadIndexEntry[] entries of the page
- */
- protected $entries;
+ protected $content;
/**
* @var array configuration array
@@ -51,12 +47,12 @@
/**
* @param Title $title Reference to a Title object.
* @param array $config the configuration array (see
ProofreadIndexPage::getDataConfig)
- * @param string $text content of the page. Warning: only done for
EditProofreadIndexPage use.
+ * @param IndexContent|null $content content of the page. Warning: only
done for EditProofreadIndexPage use.
*/
- public function __construct( Title $title, $config, $text = null ) {
+ public function __construct( Title $title, $config, IndexContent
$content = null ) {
$this->title = $title;
$this->config = $config;
- $this->text = $text;
+ $this->content = $content;
}
/**
@@ -65,7 +61,7 @@
* @return ProofreadIndexPage
*/
public static function newFromTitle( Title $title ) {
- return new self( $title, self::getDataConfig(), null );
+ return new self( $title, self::getDataConfig() );
}
/**
@@ -102,18 +98,23 @@
/**
* Return content of the page
- * @return string
+ * @return IndexContent
*/
- protected function getText() {
- if ( $this->text === null ) {
+ private function getContent() {
+ if ( $this->content === null ) {
$rev = Revision::newFromTitle( $this->title );
if ( $rev === null ) {
- $this->text = '';
+ $this->content = new IndexContent( [] );
} else {
- $this->text = ContentHandler::getContentText(
$rev->getContent() );
+ $content = $rev->getContent();
+ if ( $content instanceof IndexContent ) {
+ $this->content = $content;
+ } else {
+ $this->content = new IndexContent( [] );
+ }
}
}
- return $this->text;
+ return $this->content;
}
/**
@@ -215,38 +216,24 @@
/**
* Return metadata from an index page.
- * @param array $values key => value
- * @return array of ProofreadIndexEntry
- */
- protected function getIndexEntriesFromIndexContent( $values ) {
- $metadata = [];
- foreach ( $this->config as $varName => $property ) {
- if ( isset( $values[$varName] ) ) {
- $metadata[$varName] = new ProofreadIndexEntry(
$varName, $values[$varName], $property );
- } else {
- $metadata[$varName] = new ProofreadIndexEntry(
$varName, '', $property );
- }
- }
- return $metadata;
- }
-
- /**
- * Return metadata from an index page.
* @return array of ProofreadIndexEntry
*/
public function getIndexEntries() {
- if ( $this->entries === null ) {
- $text = $this->getText();
- $values = [];
- foreach ( $this->config as $varName => $property ) {
- $tagPattern = "/\n\|" . preg_quote( $varName,
'/' ) . "=(.*?)\n(\||\}\})/is";
- if ( preg_match( $tagPattern, $text, $matches )
) {
- $values[$varName] = $matches[1];
- }
- }
- $this->entries =
$this->getIndexEntriesFromIndexContent( $values );
+ $contentFields = [];
+ foreach ( $this->getContent()->getFields() as $key => $value ) {
+ $contentFields[strtolower( $key )] = $value;
}
- return $this->entries;
+
+ $values = [];
+ foreach ( $this->config as $varName => $property ) {
+ $key = strtolower( $varName );
+ if ( array_key_exists( $key, $contentFields ) ) {
+ $values[$varName] = new ProofreadIndexEntry(
$varName, $contentFields[$key]->getNativeData(), $property );
+ } else {
+ $values[$varName] = new ProofreadIndexEntry(
$varName, '', $property );
+ }
+ }
+ return $values;
}
/**
@@ -298,39 +285,59 @@
* @return array of array( Title title of the pointed page, the label
of the link )
*/
public function getLinksToMainNamespace() {
- $rtext = self::getParser()->preprocess( $this->getText(),
$this->title, new ParserOptions() );
- return $this->getLinksToNamespace( $rtext, NS_MAIN );
+ return $this->getLinksToNamespaceFromContent( NS_MAIN );
}
/**
- * @return array( Title[], string[] )
+ * @return array of array( Title title of the pointed page, the label
of the link )
*/
public function getLinksToPageNamespace() {
- return $this->getLinksToNamespace( $this->getText(),
Context::getDefaultContext()->getPageNamespaceId() );
+ return $this->getLinksToNamespaceFromContent(
Context::getDefaultContext()->getPageNamespaceId() );
}
/**
- * @return array|null
+ * @return PageList|null
*/
public function getPagelistTagContent() {
- preg_match_all( '/<pagelist([^<]*?)\/>/is', $this->getText(),
$m, PREG_PATTERN_ORDER );
-
- if ( !$m[1] ) {
- return null;
+ $tagParameters = null;
+ foreach ( $this->getContent()->getFields() as $field ) {
+ preg_match_all( '/<pagelist([^<]*?)\/>/is',
$field->serialize( CONTENT_FORMAT_WIKITEXT ), $m, PREG_PATTERN_ORDER );
+ if ( $m[1] ) {
+ if ( $tagParameters === null ) {
+ $tagParameters = $m[1];
+ } else {
+ $tagParameters = array_merge(
$tagParameters, $m[1] );
+ }
+ }
+ }
+ if ( $tagParameters === null ) {
+ return $tagParameters;
}
- return new PageList( Sanitizer::decodeTagAttributes( implode(
$m[1] ) ) );
+ return new PageList( Sanitizer::decodeTagAttributes( implode(
$tagParameters ) ) );
}
/**
* Return all links in a given namespace
- * @param string $text
* @param integer $namespace the default namespace id
+ * @param bool $withPrepossessing apply preprocessor before looking for
links
* @return array of array( Title title of the pointed page, the label
of the link )
* @todo add an abstraction for links (Title + label)
*/
- protected function getLinksToNamespace( $text, $namespace ) {
- preg_match_all( '/\[\[(.*?)(\|(.*?)|)\]\]/i', $text,
$textLinks, PREG_PATTERN_ORDER );
+ private function getLinksToNamespaceFromContent( $namespace,
$withPrepossessing = false ) {
+ $links = [];
+ foreach ( $this->getContent()->getFields() as $field ) {
+ $wikitext = $field->serialize( CONTENT_FORMAT_WIKITEXT
);
+ if ( $withPrepossessing ) {
+ $wikitext = self::getParser()->preprocess(
$wikitext, $this->title, new ParserOptions() );
+ }
+ $links = array_merge( $links,
$this->getLinksToNamespaceFromWikitext( $wikitext, $namespace ) );
+ }
+ return $links;
+ }
+
+ private function getLinksToNamespaceFromWikitext( $wikitext, $namespace
) {
+ preg_match_all( '/\[\[(.*?)(\|(.*?)|)\]\]/i', $wikitext,
$textLinks, PREG_PATTERN_ORDER );
$links = [];
$num = 0;
$textLinksCount = count( $textLinks[1] );
@@ -354,9 +361,9 @@
* the function called for 'header' will returns 'Page page my book
number 23'
* @param string $name entry name
* @param array $otherParams associative array other possible values to
replace
- * @return string the value with variables replaced
+ * @return string|null the value with variables replaced or null if the
entry does not exists
*/
- public function replaceVariablesWithIndexEntries( $name, $otherParams )
{
+ public function getIndexEntryWithVariablesReplacedWithIndexEntries(
$name, $otherParams ) {
$entry = $this->getIndexEntry( $name );
if ( $entry === null ) {
return null;
diff --git a/includes/page/PageContentBuilder.php
b/includes/page/PageContentBuilder.php
index 9b8c5e8..d70bff1 100644
--- a/includes/page/PageContentBuilder.php
+++ b/includes/page/PageContentBuilder.php
@@ -56,8 +56,8 @@
} catch ( OutOfBoundsException $e ) {
} // should not happen
- $header = $index->replaceVariablesWithIndexEntries(
'header', $params );
- $footer = $index->replaceVariablesWithIndexEntries(
'footer', $params );
+ $header =
$index->getIndexEntryWithVariablesReplacedWithIndexEntries( 'header', $params );
+ $footer =
$index->getIndexEntryWithVariablesReplacedWithIndexEntries( 'footer', $params );
} else {
$header = $this->contextSource->msg(
'proofreadpage_default_header' )->inContentLanguage()->plain();
$footer = $this->contextSource->msg(
'proofreadpage_default_footer' )->inContentLanguage()->plain();
diff --git a/tests/phpunit/index/IndexContentHandlerTest.php
b/tests/phpunit/index/IndexContentHandlerTest.php
index 5453246..c20e801 100644
--- a/tests/phpunit/index/IndexContentHandlerTest.php
+++ b/tests/phpunit/index/IndexContentHandlerTest.php
@@ -60,7 +60,9 @@
[ new IndexContent( [ 'foo' => new WikitextContent(
'{{bar|bat=foo}}' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo={{bar|bat=foo}}|bar=z\n}}" ],
[ new IndexContent( [ 'foo' => new WikitextContent(
'[[bar]]' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo=[[bar]]|bar=z\n}}" ],
[ new IndexContent( [ 'foo' => new WikitextContent(
'[[foo|bar]]' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo=[[foo|bar]]|bar=z\n}}" ],
- [ new IndexContent( [ 'foo' => new WikitextContent(
'{{baz|bat=[[foo|bar]]}}' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo={{baz|bat=[[foo|bar]]}}|bar=z}}\n}}"
],
+ [ new IndexContent( [ 'foo' => new WikitextContent(
'{{baz|bat=[[foo|bar]]}}' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo={{baz|bat=[[foo|bar]]}}|bar=z}}"
],
+ [ new IndexContent( [ 'header' => new WikitextContent(
'{{{pagenum}}}' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|header={{{pagenum}}}\n|bar=z}}\n}}"
],
+ [ new IndexContent( [ 'header' => new WikitextContent(
'{{{pagenum|}}}' ), 'bar' => new WikitextContent( 'z' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|header={{{pagenum|}}}\n|bar=z}}\n}}"
],
[ new IndexRedirectContent( Title::newFromText( 'Foo' )
), '#REDIRECT [[Foo]]' ],
[ new IndexContent( [] ), '#REDIRECT
[[Special:UserLogout]]' ],
[ new IndexContent( [ 'foo' => new WikitextContent(
'#REDIRECT [[Foo]]' ) ] ),
"{{:MediaWiki:Proofreadpage_index_template\n|foo=#REDIRECT [[Foo]]\n}}" ],
diff --git a/tests/phpunit/index/ProofreadIndexPageTest.php
b/tests/phpunit/index/ProofreadIndexPageTest.php
index 55be1a9..9c0bc1a 100644
--- a/tests/phpunit/index/ProofreadIndexPageTest.php
+++ b/tests/phpunit/index/ProofreadIndexPageTest.php
@@ -1,4 +1,5 @@
<?php
+use ProofreadPage\Index\IndexContent;
use ProofreadPage\Pagination\PageList;
/**
@@ -83,12 +84,15 @@
/**
* Constructor of a new ProofreadIndexPage
* @param Title|string $title
- * @param string|null $content
+ * @param string|IndexContent|null $content
* @return ProofreadIndexPage
*/
public static function newIndexPage( $title = 'test.djvu', $content =
null ) {
if ( is_string( $title ) ) {
$title = Title::makeTitle( 252, $title );
+ }
+ if ( is_string( $content ) ) {
+ $content = ContentHandler::getForModelID(
CONTENT_MODEL_PROOFREAD_INDEX )->unserializeContent( $content );
}
return new ProofreadIndexPage( $title, self::$config, $content
);
}
@@ -265,6 +269,6 @@
*/
public function testReplaceVariablesWithIndexEntries( $pageContent,
$result, $entry, $extraparams ) {
$page = self::newIndexPage( 'Test.djvu', $pageContent );
- $this->assertEquals( $result,
$page->replaceVariablesWithIndexEntries( $entry, $extraparams ) );
+ $this->assertEquals( $result,
$page->getIndexEntryWithVariablesReplacedWithIndexEntries( $entry, $extraparams
) );
}
}
--
To view, visit https://gerrit.wikimedia.org/r/355883
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I85b0aaa72fcf696c903f80c48701624c1e9ef305
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ProofreadPage
Gerrit-Branch: master
Gerrit-Owner: Tpt <[email protected]>
Gerrit-Reviewer: Amritsreekumar <[email protected]>
Gerrit-Reviewer: Tpt <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits