Daniel Kinzler has uploaded a new change for review.
https://gerrit.wikimedia.org/r/72078
Change subject: Factor string normalization functions out of Utils.
......................................................................
Factor string normalization functions out of Utils.
This introduces a StringNormalizer service and replaces
any use of the static normalization functions in Utils.
Change-Id: Ieeba2470dccf797b37243355ddcb2ccf5e5b18c0
---
M client/includes/WikibaseClient.php
M lib/WikibaseLib.classes.php
A lib/includes/StringNormalizer.php
M lib/includes/Term.php
M lib/includes/Utils.php
M lib/includes/specials/SpecialWikibasePage.php
A lib/tests/phpunit/StringNormalizerTest.php
M lib/tests/phpunit/UtilsTest.php
M repo/includes/Summary.php
M repo/includes/WikibaseRepo.php
M repo/includes/api/EditEntity.php
M repo/includes/api/GetEntities.php
M repo/includes/api/ModifyEntity.php
M repo/includes/api/SetAliases.php
M repo/includes/api/SetDescription.php
M repo/includes/api/SetLabel.php
M repo/includes/api/SetSiteLink.php
M repo/includes/specials/SpecialItemByTitle.php
M repo/includes/specials/SpecialNewEntity.php
19 files changed, 321 insertions(+), 131 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/78/72078/1
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index a7767a2..f6a8434 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -19,6 +19,7 @@
use Wikibase\RepoLinker;
use Wikibase\Settings;
use Wikibase\SettingsArray;
+use Wikibase\StringNormalizer;
use Wikibase\Test\MockRepository;
/**
@@ -68,6 +69,11 @@
protected $isInTestMode;
private $storeInstances = array();
+
+ /**
+ * @var StringNormalizer
+ */
+ private $stringNormalizer;
/**
* @since 0.4
@@ -191,6 +197,19 @@
/**
* @since 0.4
*
+ * @return StringNormalizer
+ */
+ public function getStringNormalizer() {
+ if ( $this->stringNormalizer === null ) {
+ $this->stringNormalizer = new StringNormalizer();
+ }
+
+ return $this->stringNormalizer;
+ }
+
+ /**
+ * @since 0.4
+ *
* @return RepoLinker
*/
public function newRepoLinker() {
diff --git a/lib/WikibaseLib.classes.php b/lib/WikibaseLib.classes.php
index b5f2b4f..e2b3122 100644
--- a/lib/WikibaseLib.classes.php
+++ b/lib/WikibaseLib.classes.php
@@ -63,6 +63,7 @@
'Wikibase\Term' => 'includes/Term.php',
'Wikibase\Lib\TermsToClaimsTranslator' =>
'includes/TermsToClaimsTranslator.php',
'Wikibase\Lib\TypedValueFormatter' =>
'includes/TypedValueFormatter.php',
+ 'Wikibase\StringNormalizer' => 'includes/StringNormalizer.php',
'Wikibase\Utils' => 'includes/Utils.php',
'Wikibase\WikibaseDiffOpFactory' =>
'includes/WikibaseDiffOpFactory.php',
'Wikibase\Lib\WikibaseDataTypeBuilders' =>
'includes/WikibaseDataTypeBuilders.php',
diff --git a/lib/includes/StringNormalizer.php
b/lib/includes/StringNormalizer.php
new file mode 100644
index 0000000..269d7ea
--- /dev/null
+++ b/lib/includes/StringNormalizer.php
@@ -0,0 +1,82 @@
+<?php
+ /**
+ *
+ * Copyright © 03.07.13 by the authors listed below.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @license GPL 2+
+ * @file
+ *
+ * @author Daniel Kinzler
+ * @author John Erling Blad < [email protected] >
+ */
+
+
+namespace Wikibase;
+
+
+use UtfNormal;
+
+/**
+ * StringNormalizer provides several methods for normalizing strings.
+ *
+ * @since 0.4
+ *
+ * @package Wikibase
+ */
+class StringNormalizer {
+
+
+ /**
+ * Trim initial and trailing whitespace and control chars, and
optionally compress internal ones.
+ *
+ * @param string $inputString The actual string to process.
+ *
+ * @return string where whitespace possibly are removed.
+ */
+ public function trimWhitespace( $inputString ) {
+ // \p{Z} - whitespace
+ // \p{Cc} - control chars
+ $trimmed = preg_replace( '/^[\p{Z}\p{Cc}]+|[\p{Z}\p{Cc}]+$/u',
'', $inputString );
+ $trimmed = preg_replace( '/[\p{Cc}]+/u', ' ', $trimmed );
+ return $trimmed;
+ }
+
+ /**
+ * Normalize string into NFC by using the cleanup metod from UtfNormal.
+ *
+ * @param string $inputString The actual string to process.
+ *
+ * @return string where whitespace possibly are removed.
+ */
+ public function cleanupToNFC( $inputString ) {
+ return UtfNormal::cleanUp( $inputString );
+ }
+
+ /**
+ * Do a cleanupToNFC after the string is trimmed
+ *
+ * @param string $inputString
+ *
+ * @return string on NFC form
+ */
+ public function trimToNFC( $inputString ) {
+ return $this->cleanupToNFC( $this->trimWhitespace( $inputString
) );
+ }
+
+
+}
\ No newline at end of file
diff --git a/lib/includes/Term.php b/lib/includes/Term.php
index 6b25347..603cf47 100644
--- a/lib/includes/Term.php
+++ b/lib/includes/Term.php
@@ -2,6 +2,7 @@
namespace Wikibase;
use MWException;
+use Wikibase\Repo\WikibaseRepo;
/**
* Object representing a term.
@@ -227,21 +228,55 @@
* for specialized normalization.
*
* @return string
+ *
+ * @todo: Move this to TermSqlIndex
*/
public static function normalizeText( $text, $lang = 'en' ) {
- // \p{Z} - whitespace
- // \p{C} - control chars
- $text = preg_replace( '/^[\p{Z}\p{C}]+|[\p{Z}\p{C}]+$/u', '',
$text );
- $text = preg_replace( '/[\p{C}]+/u', ' ', $text );
+ if ( $text === '' ) {
+ return '';
+ }
+
+ //FIXME: move normalizeText to TermSqlIndex to avoid this mess!
+ if ( class_exists( 'Wikibase\Repo\WikibaseRepo' ) ) {
+ $normalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+ } elseif ( class_exists( 'Wikibase\Client\WikibaseClient' ) ) {
+ $normalizer =
WikibaseClient::getDefaultInstance()->getStringNormalizer();
+ } else {
+ throw new \RuntimeException( "Found nither WikibaseRepo
not WikibaseClient" );
+ }
// composed normal form
- $text = Utils::cleanupToNFC( $text );
+ $nfcText = $normalizer->cleanupToNFC( $text );
+
+ if ( !is_string( $nfcText ) || $nfcText === '' ) {
+ wfWarn( "Unicode normalization failed for `$text`" );
+ }
+
+ // \p{Z} - whitespace
+ // \p{C} - control chars
+ // WARNING: *any* invalid UTF8 sequence causes preg_replace to
return an empty string.
+ $strippedText = $nfcText;
+ $strippedText = preg_replace( '/[\p{Cc}\p{Cf}\p{Cn}\p{Cs}]+/u',
' ', $strippedText );
+ $strippedText = preg_replace( '/^[\p{Z}]+|[\p{Z}]+$/u', '',
$strippedText );
+
+ if ( $strippedText === '' ) {
+ // NOTE: This happens when there is only whitespace in
the string.
+ // However, preg_replace will also return an
empty string if it
+ // encounters any invalid utf-8 sequence.
+ return '';
+ }
//TODO: Use Language::lc to convert to lower case.
// But that requires us to load ALL the language objects,
// which loads ALL the messages, which makes us run out
// of RAM (see bug 41103).
- return mb_strtolower( $text, 'UTF-8' );
+ $normalized = mb_strtolower( $strippedText, 'UTF-8' );
+
+ if ( !is_string( $normalized ) || $normalized === '' ) {
+ wfWarn( "mb_strtolower normalization failed for
`$strippedText`" );
+ }
+
+ return $normalized;
}
/**
diff --git a/lib/includes/Utils.php b/lib/includes/Utils.php
index c6ce523..b6fcd4a 100644
--- a/lib/includes/Utils.php
+++ b/lib/includes/Utils.php
@@ -189,49 +189,6 @@
}
/**
- * Trim initial and trailing whitespace and control chars, and
optionally compress internal ones.
- *
- * @since 0.1
- *
- * @param string $inputString The actual string to process.
- *
- * @return string where whitespace possibly are removed.
- */
- static public function trimWhitespace( $inputString ) {
- // \p{Z} - whitespace
- // \p{Cc} - control chars
- $trimmed = preg_replace( '/^[\p{Z}\p{Cc}]+|[\p{Z}\p{Cc}]+$/u',
'', $inputString );
- $trimmed = preg_replace( '/[\p{Cc}]+/u', ' ', $trimmed );
- return $trimmed;
- }
-
- /**
- * Normalize string into NFC by using the cleanup metod from UtfNormal.
- *
- * @since 0.1
- *
- * @param string $inputString The actual string to process.
- *
- * @return string where whitespace possibly are removed.
- */
- static public function cleanupToNFC( $inputString ) {
- return UtfNormal::cleanUp( $inputString );
- }
-
- /**
- * Do a toNFC after the string is squashed
- *
- * @since 0.1
- *
- * @param string $inputString
- *
- * @return string on NFC form
- */
- static public function trimToNFC( $inputString ) {
- return self::cleanupToNFC( self::trimWhitespace( $inputString )
);
- }
-
- /**
* Reorder an array with keys with the order given by a second array.
*
* Note that this function will do an intersection and then organize
diff --git a/lib/includes/specials/SpecialWikibasePage.php
b/lib/includes/specials/SpecialWikibasePage.php
index 9d29d46..e2067b0 100644
--- a/lib/includes/specials/SpecialWikibasePage.php
+++ b/lib/includes/specials/SpecialWikibasePage.php
@@ -29,9 +29,32 @@
* @licence GNU GPL v2+
* @author Jeroen De Dauw < [email protected] >
*/
+use Wikibase\Repo\WikibaseRepo;
+use Wikibase\StringNormalizer;
+
abstract class SpecialWikibasePage extends SpecialPage {
/**
+ * @var StringNormalizer
+ */
+ protected $stringNormalizer;
+
+ /**
+ * Constructor.
+ *
+ * @since 0.4
+ *
+ * @param string $name
+ * @param string $restriction
+ * @param bool $listed
+ */
+ public function __construct( $name = '', $restriction = '', $listed =
true ) {
+ parent::__construct( $name, $restriction, $listed );
+
+ $this->stringNormalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+ }
+
+ /**
* The subpage, ie the part after Special:PageName/
* Empty string if none is provided.
*
diff --git a/lib/tests/phpunit/StringNormalizerTest.php
b/lib/tests/phpunit/StringNormalizerTest.php
new file mode 100644
index 0000000..6d2cd68
--- /dev/null
+++ b/lib/tests/phpunit/StringNormalizerTest.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Wikibase\Test;
+use Wikibase\StringNormalizer;
+use Wikibase\Utils;
+
+/**
+ * Tests for the Wikibase\StringNormalizer class.
+ *
+ * @file
+ * @since 0.4
+ *
+ * @ingroup WikibaseLib
+ * @ingroup Test
+ *
+ * @group WikibaseLib
+ * @group Wikibase
+ *
+ * @licence GNU GPL v2+
+ * @author John Erling Blad < [email protected] >
+ * @author Daniel Kinzler
+ */
+class StringNormalizerTest extends \MediaWikiTestCase {
+
+ /**
+ * @dataProvider providerTrimWhitespace
+ */
+ public function testTrimWhitespace( $string, $expected ) {
+ $normalizer = new StringNormalizer();
+ $this->assertEquals( $expected, $normalizer->trimWhitespace(
$string ) );
+ }
+
+ public static function providerTrimWhitespace() {
+ return array(
+ array( 'foo bar', 'foo bar'), // #0
+ array( ' foo bar ', 'foo bar'), // #1
+ array( ' foo bar ', 'foo bar'), // #2
+ array( "foo\tbar", 'foo bar'), // #3, both a space and
control char
+ array( "foo\nbar", 'foo bar'), // #4, both a space and
control char
+ array( "foo\rbar", 'foo bar'), // #5, both a space and
control char
+ array( "\r \t\nfoo\r\t\t\tbar\n\n\n\r\r", 'foo bar'),
// #6, both space and control chars
+ array( "\r \t\nfoo\r\t\t\t bar\n\n\n\r\r", 'foo bar'),
// #7, both space and control chars
+ array( html_entity_decode( "foo‌bar", ENT_QUOTES,
"utf-8"), html_entity_decode( "foo‌bar", ENT_QUOTES, "utf-8") ), // #8
+ array( html_entity_decode( "foo‌‌bar",
ENT_QUOTES, "utf-8"), html_entity_decode( "foo‌‌bar", ENT_QUOTES,
"utf-8") ), // #9
+ );
+ }
+
+ /**
+ * @dataProvider providerCleanupToNFC
+ */
+ public function testCleanupToNFC( $src, $dst, $expected ) {
+ $normalizer = new StringNormalizer();
+
+ if ($expected) {
+ $this->assertEquals( $dst, $normalizer->cleanupToNFC(
$src ), "String '$src' is not the same as the expected '$dst'" );
+ }
+ else {
+ $this->assertFalse( $dst === $normalizer->cleanupToNFC(
$src ), "String '$src' (" . urlencode( $src ) . ") is the same as the expected
'$dst' (" . urlencode( $dst ) . "). This is unusual, but correct." );
+ }
+ }
+
+ public static function providerCleanupToNFC() {
+ return array(
+ array( "\xC3\x85land", 'Åland', true ),
+ array( "A\xCC\x8Aland", 'Åland', true ),
+ array( "\xE2\x84\xABngstrom (unit)", 'Ångstrom (unit)',
false ),
+ );
+ }
+
+ /**
+ * @dataProvider providerTrimToNFC
+ */
+ public function testTrimToNFC( $src, $dst ) {
+ $normalizer = new StringNormalizer();
+ $this->assertEquals( $dst, $normalizer->trimToNFC( $src ),
"String '$src' is not the same as the expected '$dst'" );
+ }
+
+ public static function providerTrimToNFC() {
+ return array(
+ array( " \xC3\x85land øyene ", 'Åland øyene' ), //
#0
+ array( " A\xCC\x8Aland øyene ", 'Åland øyene' ), //
#1
+ array( " \xC3\x85land øyene ", 'Åland øyene' ),
// #2
+ array( " A\xCC\x8Aland øyene ", 'Åland øyene'
), // #3
+ );
+ }
+}
diff --git a/lib/tests/phpunit/UtilsTest.php b/lib/tests/phpunit/UtilsTest.php
index 6c0e61c..17b8288 100644
--- a/lib/tests/phpunit/UtilsTest.php
+++ b/lib/tests/phpunit/UtilsTest.php
@@ -45,67 +45,6 @@
);
}
- /**
- * @group WikibaseUtils
- * @dataProvider providerTrimWhitespace
- */
- public function testTrimWhitespace( $string, $expected ) {
- $this->assertEquals( $expected, Utils::trimWhitespace( $string
) );
- }
-
- public static function providerTrimWhitespace() {
- return array(
- array( 'foo bar', 'foo bar'), // #0
- array( ' foo bar ', 'foo bar'), // #1
- array( ' foo bar ', 'foo bar'), // #2
- array( "foo\tbar", 'foo bar'), // #3, both a space and
control char
- array( "foo\nbar", 'foo bar'), // #4, both a space and
control char
- array( "foo\rbar", 'foo bar'), // #5, both a space and
control char
- array( "\r \t\nfoo\r\t\t\tbar\n\n\n\r\r", 'foo bar'),
// #6, both space and control chars
- array( "\r \t\nfoo\r\t\t\t bar\n\n\n\r\r", 'foo bar'),
// #7, both space and control chars
- array( html_entity_decode( "foo‌bar", ENT_QUOTES,
"utf-8"), html_entity_decode( "foo‌bar", ENT_QUOTES, "utf-8") ), // #8
- array( html_entity_decode( "foo‌‌bar",
ENT_QUOTES, "utf-8"), html_entity_decode( "foo‌‌bar", ENT_QUOTES,
"utf-8") ), // #9
- );
- }
-
- /**
- * @group WikibaseUtils
- * @dataProvider providerCleanupToNFC
- */
- public function testCleanupToNFC( $src, $dst, $expected ) {
- if ($expected) {
- $this->assertEquals( $dst, Utils::cleanupToNFC( $src ),
"String '$src' is not the same as the expected '$dst'" );
- }
- else {
- $this->assertFalse( $dst === Utils::cleanupToNFC( $src
), "String '$src' (" . urlencode( $src ) . ") is the same as the expected
'$dst' (" . urlencode( $dst ) . "). This is unusual, but correct." );
- }
- }
-
- public static function providerCleanupToNFC() {
- return array(
- array( "\xC3\x85land", 'Åland', true ),
- array( "A\xCC\x8Aland", 'Åland', true ),
- array( "\xE2\x84\xABngstrom (unit)", 'Ångstrom (unit)',
false ),
- );
- }
-
- /**
- * @group WikibaseUtils
- * @dataProvider providerTrimToNFC
- */
- public function testTrimToNFC( $src, $dst ) {
- $this->assertEquals( $dst, Utils::trimToNFC( $src ), "String
'$src' is not the same as the expected '$dst'" );
- }
-
- public static function providerTrimToNFC() {
- return array(
- array( " \xC3\x85land øyene ", 'Åland øyene' ), //
#0
- array( " A\xCC\x8Aland øyene ", 'Åland øyene' ), //
#1
- array( " \xC3\x85land øyene ", 'Åland øyene' ),
// #2
- array( " A\xCC\x8Aland øyene ", 'Åland øyene'
), // #3
- );
- }
-
public static function provideFetchLanguageName() {
return array(
array( // #0
diff --git a/repo/includes/Summary.php b/repo/includes/Summary.php
index 82cf4f3..989aefe 100644
--- a/repo/includes/Summary.php
+++ b/repo/includes/Summary.php
@@ -4,6 +4,7 @@
use Language;
use DataValues\StringValue;
+use Wikibase\Repo\WikibaseRepo;
/**
* File defining the handler for autocomments and additional utility functions
@@ -374,9 +375,10 @@
*/
public static function formatTotalSummary( $comment, $summary, $length
= SUMMARY_MAX_LENGTH ) {
global $wgContLang;
+ $normalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
- $comment = Utils::trimToNFC( $comment );
- $summary = Utils::trimToNFC( $summary );
+ $comment = $normalizer->trimToNFC( $comment );
+ $summary = $normalizer->trimToNFC( $summary );
$mergedString = '';
if ( $comment !== '' ) {
$mergedString .= "/* $comment */";
@@ -411,8 +413,10 @@
)
);
- $comment = ( $format & self::USE_COMMENT) ? Utils::trimToNFC(
$comment ) : '';
- $summary = ( $format & self::USE_SUMMARY) ? Utils::trimToNFC(
$summary ) : '';
+ $normalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+
+ $comment = ( $format & self::USE_COMMENT) ?
$normalizer->trimToNFC( $comment ) : '';
+ $summary = ( $format & self::USE_SUMMARY) ?
$normalizer->trimToNFC( $summary ) : '';
$totalSummary = self::formatTotalSummary( $comment, $summary,
$length );
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 3b87e11..baf59c6 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -19,6 +19,7 @@
use Wikibase\Store;
use Wikibase\StoreFactory;
use Wikibase\SnakFactory;
+use Wikibase\StringNormalizer;
/**
* Top level factory for the WikibaseRepo extension.
@@ -76,6 +77,11 @@
* @var PropertyDataTypeLookup
*/
private $propertyDataTypeLookup;
+
+ /**
+ * @var StringNormalizer
+ */
+ private $stringNormalizer;
/**
* @since 0.4
@@ -162,6 +168,19 @@
/**
* @since 0.4
*
+ * @return StringNormalizer
+ */
+ public function getStringNormalizer() {
+ if ( $this->stringNormalizer === null ) {
+ $this->stringNormalizer = new StringNormalizer();
+ }
+
+ return $this->stringNormalizer;
+ }
+
+ /**
+ * @since 0.4
+ *
* @return EntityLookup
*/
public function getEntityLookup() {
diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index 543b042..9355f86 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -202,7 +202,7 @@
$status->merge( $this->checkMultilangArgs( $arg,
$langCode ) );
$language = $arg['language'];
- $newLabel = Utils::trimToNFC( $arg['value'] );
+ $newLabel = $this->stringNormalizer->trimToNFC(
$arg['value'] );
if ( array_key_exists( 'remove', $arg ) || $newLabel
=== "" ) {
$labelChangeOps[] = new ChangeOpLabel(
$language, null );
@@ -235,7 +235,7 @@
$status->merge( $this->checkMultilangArgs( $arg,
$langCode ) );
$language = $arg['language'];
- $newDescription = Utils::trimToNFC( $arg['value'] );
+ $newDescription = $this->stringNormalizer->trimToNFC(
$arg['value'] );
if ( array_key_exists( 'remove', $arg ) ||
$newDescription === "" ) {
$descriptionChangeOps[] = new
ChangeOpDescription( $language, null );
@@ -278,7 +278,7 @@
foreach ( $args as $arg ) {
$status->merge( $this->checkMultilangArgs(
$arg, $langCode ) );
- $alias = array( Utils::trimToNFC( $arg['value']
) );
+ $alias = array(
$this->stringNormalizer->trimToNFC( $arg['value'] ) );
$language = $arg['language'];
if ( array_key_exists( 'remove', $arg ) ) {
@@ -333,7 +333,7 @@
if ( array_key_exists( 'remove', $arg ) ||
$arg['title'] === "" ) {
$siteLinksChangeOps[] = new ChangeOpSiteLink(
$globalSiteId, null );
} else {
- $linkPage = $linkSite->normalizePageName(
Utils::trimWhitespace( $arg['title'] ) );
+ $linkPage = $linkSite->normalizePageName(
$this->stringNormalizer->trimWhitespace( $arg['title'] ) );
if ( $linkPage === false ) {
wfProfileOut( __METHOD__ );
diff --git a/repo/includes/api/GetEntities.php
b/repo/includes/api/GetEntities.php
index 9969088..d78109e 100644
--- a/repo/includes/api/GetEntities.php
+++ b/repo/includes/api/GetEntities.php
@@ -30,6 +30,17 @@
class GetEntities extends ApiWikibase {
/**
+ * @var \Wikibase\StringNormalizer
+ */
+ protected $stringNormalizer;
+
+ public function __construct( \ApiMain $main, $name, $prefix = '' ) {
+ parent::__construct( $main, $name, $prefix );
+
+ $this->stringNormalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+ }
+
+ /**
* @see \ApiBase::execute()
*/
public function execute() {
@@ -59,7 +70,7 @@
for ( $k = 0; $k < $max; $k++ ) {
$siteId = $params['sites'][$idxSites++
% $numSites];
- $title = Utils::trimToNFC(
$params['titles'][$idxTitles++ % $numTitles] );
+ $title =
$this->stringNormalizer->trimToNFC( $params['titles'][$idxTitles++ %
$numTitles] );
$id =
StoreFactory::getStore()->newSiteLinkCache()->getItemIdForLink( $siteId, $title
);
diff --git a/repo/includes/api/ModifyEntity.php
b/repo/includes/api/ModifyEntity.php
index 2719811..3052e34 100644
--- a/repo/includes/api/ModifyEntity.php
+++ b/repo/includes/api/ModifyEntity.php
@@ -12,6 +12,8 @@
use Wikibase\EntityContent;
use Wikibase\EntityContentFactory;
use Wikibase\ItemHandler;
+use Wikibase\Repo\WikibaseRepo;
+use Wikibase\StringNormalizer;
use Wikibase\Summary;
use Wikibase\Utils;
@@ -29,6 +31,17 @@
* @author Daniel Kinzler
*/
abstract class ModifyEntity extends ApiWikibase {
+
+ /**
+ * @var StringNormalizer
+ */
+ protected $stringNormalizer;
+
+ public function __construct( \ApiMain $main, $name, $prefix = '' ) {
+ parent::__construct( $main, $name, $prefix );
+
+ $this->stringNormalizer =
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+ }
/**
* Flags to pass to EditEntity::attemptSave; use with the EDIT_XXX
constants.
@@ -83,7 +96,7 @@
$entityTitle = $itemHandler->getTitleFromSiteLink(
$params['site'],
- Utils::trimToNFC( $params['title'] )
+ $this->stringNormalizer->trimToNFC(
$params['title'] )
);
if ( is_null( $entityTitle ) ) {
@@ -257,7 +270,7 @@
protected function addNormalizationInfoToOutput( $title ) {
$normalized = array();
- $normTitle = Utils::trimToNFC( $title );
+ $normTitle = $this->stringNormalizer->trimToNFC( $title );
if ( $normTitle !== $title ) {
$normalized['from'] = $title;
$normalized['to'] = $normTitle;
diff --git a/repo/includes/api/SetAliases.php b/repo/includes/api/SetAliases.php
index 1140183..4107116 100644
--- a/repo/includes/api/SetAliases.php
+++ b/repo/includes/api/SetAliases.php
@@ -76,7 +76,7 @@
$entityContent->getEntity()->setAliases(
$params['language'],
array_map(
- function( $str ) { return
Utils::trimToNFC( $str ); },
+ function( $str ) { return
$this->stringNormalizer->trimToNFC( $str ); },
$params['set']
)
);
@@ -87,7 +87,7 @@
$entityContent->getEntity()->addAliases(
$params['language'],
array_map(
- function( $str ) { return
Utils::trimToNFC( $str ); },
+ function( $str ) { return
$this->stringNormalizer->trimToNFC( $str ); },
$params['add']
)
);
@@ -97,7 +97,7 @@
$entityContent->getEntity()->removeAliases(
$params['language'],
array_map(
- function( $str ) { return
Utils::trimToNFC( $str ); },
+ function( $str ) { return
$this->stringNormalizer->trimToNFC( $str ); },
$params['remove']
)
);
diff --git a/repo/includes/api/SetDescription.php
b/repo/includes/api/SetDescription.php
index 6a9f789..c7243c3 100644
--- a/repo/includes/api/SetDescription.php
+++ b/repo/includes/api/SetDescription.php
@@ -45,7 +45,7 @@
if ( isset( $params['value'] ) ) {
- $description = Utils::trimToNFC( $params['value'] );
+ $description = $this->stringNormalizer->trimToNFC(
$params['value'] );
$language = $params['language'];
if ( 0 < strlen( $description ) ) {
diff --git a/repo/includes/api/SetLabel.php b/repo/includes/api/SetLabel.php
index a25e6e4..92e5324 100644
--- a/repo/includes/api/SetLabel.php
+++ b/repo/includes/api/SetLabel.php
@@ -45,7 +45,7 @@
if ( isset( $params['value'] ) ) {
- $label = Utils::trimToNFC( $params['value'] );
+ $label = $this->stringNormalizer->trimToNFC(
$params['value'] );
$language = $params['language'];
if ( 0 < strlen( $label ) ) {
$summary->addAutoSummaryArgs( $label );
diff --git a/repo/includes/api/SetSiteLink.php
b/repo/includes/api/SetSiteLink.php
index ca4be9a..0429a01 100644
--- a/repo/includes/api/SetSiteLink.php
+++ b/repo/includes/api/SetSiteLink.php
@@ -84,7 +84,7 @@
$item = $entityContent->getItem();
if ( isset( $params['linksite'] ) && ( $params['linktitle'] ===
'' ) ) {
- $linksite = Utils::trimToNFC( $params['linksite'] );
+ $linksite = $this->stringNormalizer->trimToNFC(
$params['linksite'] );
try {
$link = $item->getSimpleSiteLink( $linksite );
@@ -108,7 +108,7 @@
$this->dieUsage( $this->msg(
'wikibase-api-not-recognized-siteid' )->text(), 'not-recognized-siteid' );
}
- $page = $site->normalizePageName(
Utils::trimWhitespace( $params['linktitle'] ) );
+ $page = $site->normalizePageName(
$this->stringNormalizer->trimWhitespace( $params['linktitle'] ) );
if ( $page === false ) {
wfProfileOut( __METHOD__ );
diff --git a/repo/includes/specials/SpecialItemByTitle.php
b/repo/includes/specials/SpecialItemByTitle.php
index 6a65840..ba3664a 100644
--- a/repo/includes/specials/SpecialItemByTitle.php
+++ b/repo/includes/specials/SpecialItemByTitle.php
@@ -64,8 +64,8 @@
// If ther are enough data, then try to lookup the item content
if ( isset( $site ) && isset( $page ) ) {
// Try to get a item content
- $siteId = \Wikibase\Utils::trimToNFC( $site ); // no
stripping of underscores here!
- $pageName = \Wikibase\Utils::trimToNFC( $page );
+ $siteId = $this->stringNormalizer->trimToNFC( $site );
// no stripping of underscores here!
+ $pageName = $this->stringNormalizer->trimToNFC( $page );
if ( !\Sites::singleton()->getSite( $siteId ) ) {
// HACK: If the site ID isn't known, add "wiki"
to it; this allows the wikipedia
diff --git a/repo/includes/specials/SpecialNewEntity.php
b/repo/includes/specials/SpecialNewEntity.php
index 6269619..43bbdb1 100644
--- a/repo/includes/specials/SpecialNewEntity.php
+++ b/repo/includes/specials/SpecialNewEntity.php
@@ -156,7 +156,8 @@
* @return bool
*/
protected function hasSufficientArguments() {
- return Utils::trimWhitespace( $this->label ) !== '' ||
Utils::trimWhitespace( $this->description ) !== '';
+ return $this->stringNormalizer->trimWhitespace( $this->label )
!== ''
+ || $this->stringNormalizer->trimWhitespace(
$this->description ) !== '';
}
/**
--
To view, visit https://gerrit.wikimedia.org/r/72078
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieeba2470dccf797b37243355ddcb2ccf5e5b18c0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits