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

Reply via email to