diff options
Diffstat (limited to 'plugins/Intl/DateTimeFormatProvider.php')
-rw-r--r-- | plugins/Intl/DateTimeFormatProvider.php | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/plugins/Intl/DateTimeFormatProvider.php b/plugins/Intl/DateTimeFormatProvider.php new file mode 100644 index 0000000000..19fcd7acca --- /dev/null +++ b/plugins/Intl/DateTimeFormatProvider.php @@ -0,0 +1,133 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugins\Intl; + +use Piwik\Plugins\LanguagesManager\LanguagesManager; +use Piwik\Translation\Translator; + +/** + * Provides date and time formats. + */ +class DateTimeFormatProvider extends \Piwik\Intl\Data\Provider\DateTimeFormatProvider +{ + protected $use12HourClock; + + /** + * @var Translator + */ + protected $translator; + + public function __construct(Translator $translator) + { + $this->translator = $translator; + } + + /** + * Returns the format pattern for the given format type + * + * @param int $format one of the format constants + * + * @return string + */ + public function getFormatPattern($format) + { + + switch ($format) { + case self::DATETIME_FORMAT_LONG: + $pattern = $this->translator->translate('Intl_Format_DateTime_Long'); + break; + + case self::DATETIME_FORMAT_SHORT: + $pattern = $this->translator->translate('Intl_Format_DateTime_Short'); + break; + + case self::DATE_FORMAT_LONG: + $pattern = $this->translator->translate('Intl_Format_Date_Long'); + break; + + case self::DATE_FORMAT_DAY_MONTH: + $pattern = $this->translator->translate('Intl_Format_Date_Day_Month'); + break; + + case self::DATE_FORMAT_SHORT: + $pattern = $this->translator->translate('Intl_Format_Date_Short'); + break; + + case self::DATE_FORMAT_MONTH_SHORT: + $pattern = $this->translator->translate('Intl_Format_Month_Short'); + break; + + case self::DATE_FORMAT_MONTH_LONG: + $pattern = $this->translator->translate('Intl_Format_Month_Long'); + break; + + case self::DATE_FORMAT_YEAR: + $pattern = $this->translator->translate('Intl_Format_Year'); + break; + + case self::TIME_FORMAT: + $pattern = $this->translator->translate('Intl_Format_Time'); + break; + + default: + $pattern = $format; + } + + if (strpos($pattern, '{time}') !== false) { + $pattern = str_replace('{time}', $this->getTimeFormat(), $pattern); + } + + return $pattern; + } + + /** + * Returns interval format pattern for the given format type + * + * @param bool $short whether to return short or long format pattern + * @param string $maxDifference maximal difference in interval dates (Y, M or D) + * + * @return string + */ + public function getRangeFormatPattern($short=false, $maxDifference='Y') + { + return $this->translator->translate( + sprintf( + 'Intl_Format_Interval_%s_%s', + $short ? 'Short' : 'Long', + $maxDifference + )); + } + + protected function getTimeFormat() + { + if (is_null($this->use12HourClock)) { + $this->use12HourClock = LanguagesManager::uses12HourClockForCurrentUser(); + } + + $timeFormat = 'Intl_Format_Time_24'; + + if ($this->use12HourClock) { + $timeFormat = 'Intl_Format_Time_12'; + } + + $template = $this->translator->translate($timeFormat); + + return $template; + } + + /** + * For testing purpose only: Overwrites time format + * + * @param bool $use12HourClock + */ + public function forceTimeFormat($use12HourClock = false) + { + $this->use12HourClock = $use12HourClock; + } +}
\ No newline at end of file |