jenkins-bot has submitted this change and it was merged.
Change subject: Implemented MwTimeIsoFormatter in Wikibase
......................................................................
Implemented MwTimeIsoFormatter in Wikibase
(requires change I0dd02909834ce8b428daea86e8bd2bf87ba9a085)
Implements ValueFormatters extension's TimeIsoFormatter interface in the
Wikibase extension
making use of native MediaWiki functionality. Invoking the TimeFormatter is
done in I72bd2c4.
Change-Id: I0d36f6a5ec0d7d28deaeed6a71e279b73fd2e449
---
M lib/WikibaseLib.classes.php
A lib/includes/formatters/MwTimeIsoFormatter.php
A lib/tests/phpunit/formatters/MwTimeIsoFormatterTest.php
3 files changed, 187 insertions(+), 0 deletions(-)
Approvals:
Tobias Gritschacher: Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/WikibaseLib.classes.php b/lib/WikibaseLib.classes.php
index 4f4b844..89e105d 100644
--- a/lib/WikibaseLib.classes.php
+++ b/lib/WikibaseLib.classes.php
@@ -87,6 +87,7 @@
// includes/formatters
'Wikibase\Lib\EntityIdFormatter' =>
'includes/formatters/EntityIdFormatter.php',
'Wikibase\Lib\EntityIdLabelFormatter' =>
'includes/formatters/EntityIdLabelFormatter.php',
+ 'Wikibase\Lib\MwTimeIsoFormatter' =>
'includes/formatters/MwTimeIsoFormatter.php',
// includes/modules
'Wikibase\RepoAccessModule' =>
'includes/modules/RepoAccessModule.php',
diff --git a/lib/includes/formatters/MwTimeIsoFormatter.php
b/lib/includes/formatters/MwTimeIsoFormatter.php
new file mode 100644
index 0000000..e457cb8
--- /dev/null
+++ b/lib/includes/formatters/MwTimeIsoFormatter.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Wikibase\Lib;
+
+use \ValueFormatters\TimeIsoFormatter;
+
+/**
+ * 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
+ *
+ * @since 0.4
+ *
+ * @file
+ * @ingroup WikibaseLib
+ *
+ * @licence GNU GPL v2+
+ * @author H. Snater < [email protected] >
+ */
+class MwTimeIsoFormatter implements TimeIsoFormatter {
+
+ /**
+ * MediaWiki language object.
+ * @var \Language
+ */
+ private $language;
+
+ public function __construct( $language ) {
+ $this->language = $language;
+ }
+
+ /**
+ * @see TimeIsoFormatter::formatDate
+ */
+ public function formatDate( $extendedIsoTimestamp, $precision ) {
+ if(
+ // TODO: Localize dates not featuring a positive
4-digit year.
+ preg_match( '/^\+0*(\d{4})-/', $extendedIsoTimestamp,
$matches )
+ // TODO: Support precision above year
+ && $precision >= 9
+ ) {
+ // Positive 4-digit year allows using Language object.
+ $strippedTime = preg_replace( '/^(\+0*)(\d{4})/', '$2',
$extendedIsoTimestamp );
+
+ $timestamp = wfTimestamp( TS_MW, $strippedTime );
+ $dateFormat = $this->language->getDateFormatString(
+ 'date',
+ $this->language->getDefaultDateFormat()
+ );
+
+ // TODO: Implement more sophisticated replace algorithm
since characters may be escaped
+ // or, even better, find a way to avoid having to do
replacements.
+ if( $precision < 11 ) {
+ // Remove day placeholder:
+ $dateFormat = preg_replace(
'/((x\w{1})?(j|t)|d)/', '', $dateFormat );
+ }
+
+ if( $precision < 10 ) {
+ // Remove month placeholder:
+ $dateFormat = preg_replace(
'/((x\w{1})?(F|n)|m)/', '', $dateFormat );
+ }
+
+ // TODO: Currently, the year will always be formatted
with 4 digits. Years < 1000 will
+ // features leading zero(s) that would need to be
stripped.
+ return $this->language->sprintfDate( trim( $dateFormat
), $timestamp );
+ } else {
+ return $extendedIsoTimestamp;
+ }
+ }
+
+}
diff --git a/lib/tests/phpunit/formatters/MwTimeIsoFormatterTest.php
b/lib/tests/phpunit/formatters/MwTimeIsoFormatterTest.php
new file mode 100644
index 0000000..9ee2c08
--- /dev/null
+++ b/lib/tests/phpunit/formatters/MwTimeIsoFormatterTest.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace ValueFormatters\Test;
+use Wikibase\Lib\MwTimeIsoFormatter;
+
+/**
+ * Unit tests for the ValueFormatters\TimeFormatter class.
+ *
+ * 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
+ *
+ * @file
+ * @since 0.4
+ *
+ * @ingroup WikibaseLibTest
+ *
+ * @group ValueFormatters
+ * @group DataValueExtensions
+ * @group WikibaseLib
+ *
+ * @licence GNU GPL v2+
+ * @author H. Snater < [email protected] >
+ */
+class MwTimeIsoFormatterTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * Returns an array of test parameters.
+ *
+ * @since 0.4
+ *
+ * @return array
+ */
+ public function formatDateProvider() {
+ $tests = array(
+ '16 July 2013' => array(
+ '+00000002013-07-16T00:00:00Z',
+ 11,
+ ),
+ '1 January 0000' => array(
+ '+00000000000-01-01T00:00:00Z',
+ 11,
+ ),
+ '14 January 0001' => array(
+ '+00000000001-01-14T00:00:00Z',
+ 11,
+ ),
+ '+00000010000-01-01T00:00:00Z' => array(
+ '+00000010000-01-01T00:00:00Z',
+ 11,
+ ),
+ '-00000000001-01-01T00:00:00Z' => array(
+ '-00000000001-01-01T00:00:00Z',
+ 11,
+ ),
+ 'July 2013' => array(
+ '+00000002013-07-16T00:00:00Z',
+ 10,
+ ),
+ '2013' => array(
+ '+00000002013-07-16T00:00:00Z',
+ 9,
+ ),
+ '+00000002013-07-16T00:00:00Z' => array(
+ '+00000002013-07-16T00:00:00Z',
+ 8,
+ ),
+ );
+
+ $argLists = array();
+
+ foreach ( $tests as $expected => $args ) {
+ $argLists[] = array( $expected, $args[0], $args[1] );
+ }
+
+ return $argLists;
+ }
+
+ /**
+ * @dataProvider formatDateProvider
+ *
+ * @since 0.4
+ *
+ * @param string $expected
+ * @param string $extendedIsoString
+ * @param integer $precision
+ */
+ public function testFormatDate( $expected, $extendedIsoString,
$precision ) {
+ $isoFormatter = new MwTimeIsoFormatter( \Language::factory(
'en' ) );
+ $this->assertEquals( $expected, $isoFormatter->formatDate(
$extendedIsoString, $precision ) );
+ }
+
+}
--
To view, visit https://gerrit.wikimedia.org/r/76921
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0d36f6a5ec0d7d28deaeed6a71e279b73fd2e449
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits