diff --git a/core/Date.php b/core/Date.php index eac218eb9e6fba6ba06292bffef1d05972cf629a..849f50973ab68c3f4b342c99131f507097dd49ff 100644 --- a/core/Date.php +++ b/core/Date.php @@ -11,7 +11,7 @@ namespace Piwik; use Exception; use Piwik\Container\StaticContainer; -use Piwik\Plugins\LanguagesManager\Model as LanguagesManagerModel; +use Piwik\Plugins\LanguagesManager\LanguagesManager; /** * Utility class that wraps date/time related PHP functions. Using this class can @@ -612,6 +612,38 @@ class Date return new Date($result, $this->timezone); } + protected static $use12HourClock; + + protected function getTimeFormat() + { + if (is_null(self::$use12HourClock)) { + self::$use12HourClock = LanguagesManager::uses12HourClockForCurrentUser(); + } + + $timeFormat = 'Intl_Format_Time_24'; + + if (self::$use12HourClock) { + $timeFormat = 'Intl_Format_Time_12'; + + } + + $translator = StaticContainer::get('Piwik\Translation\Translator'); + $template = $translator->translate($timeFormat); + + return $template; + } + + /** + * For testing purpose only: Overwrites time format + * + * @param bool $use12HourClock + */ + public static function forceTimeFormat($use12HourClock = false) + { + self::$use12HourClock = $use12HourClock; + } + + /** * Returns a localized date string using the given template. * The template should contain tags that will be replaced with localized date strings. @@ -629,30 +661,9 @@ class Date } if (strpos($template, '{time}') !== false) { - - static $use12HourClock = null; - - if (is_null($use12HourClock)) { - - $model = new LanguagesManagerModel(); - - $use12HourClock = $model->uses12HourClock(Piwik::getCurrentUserLogin()); - } - - $timeFormat = 'Intl_Format_Time_24'; - - if ($use12HourClock) { - $timeFormat = 'Intl_Format_Time_12'; - - } - - $translator = StaticContainer::get('Piwik\Translation\Translator'); - $replacement = $translator->translate($timeFormat); - - $template = str_replace('{time}', $replacement, $template); + $template = str_replace('{time}', $this->getTimeFormat(), $template); } - $tokens = self::parseFormat($template); $out = ''; diff --git a/tests/PHPUnit/Unit/DateTest.php b/tests/PHPUnit/Unit/DateTest.php index ba18ce1e709ede70b455a21f63ad885a0b283456..20c7b2d93307d2e91de4e0a7274f8aa8a59688e7 100644 --- a/tests/PHPUnit/Unit/DateTest.php +++ b/tests/PHPUnit/Unit/DateTest.php @@ -9,8 +9,10 @@ namespace Piwik\Tests\Unit; use Exception; +use Piwik\Container\StaticContainer; use Piwik\Date; use Piwik\SettingsServer; +use Piwik\Translate; /** */ @@ -331,4 +333,34 @@ class DateTest extends \PHPUnit_Framework_TestCase $this->assertTrue($date->isLeapYear()); } } + + + public function getLocalizedLongStrings() + { + return array( + array('en', false, '2000-01-01 16:05:52', '16:05:52'), + array('de', false, '2000-01-01 16:05:52', '16:05:52'), + array('en', true, '2000-01-01 16:05:52', '4:05:52 PM'), + array('de', true, '2000-01-01 04:05:52', '4:05:52 vorm.'), + array('zh-tw', true, '2000-01-01 04:05:52', '上åˆ4:05:52'), + array('lt', true, '2000-01-01 16:05:52', '04:05:52 popiet'), + array('ar', true, '2000-01-01 04:05:52', '4:05:52 ص'), + ); + } + + /** + * @group Core + * @dataProvider getLocalizedLongStrings + */ + public function testGetLocalizedTimeFormats($language, $use12HourClock, $time, $shouldBe) + { + Translate::loadAllTranslations(); + StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language); + Date::forceTimeFormat($use12HourClock); + + $date = Date::factory($time); + + $this->assertEquals($shouldBe, $date->getLocalized(Date::TIME_FORMAT)); + Translate::reset(); + } }