Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 26 |
DrupalDateTime | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
210 | |
0.00% |
0 / 26 |
__construct | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
prepareTimezone | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
format | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 4 |
|||
anonymous function | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 11 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Datetime\DrupalDateTime. | |
*/ | |
namespace Drupal\Core\Datetime; | |
use Drupal\Component\Datetime\DateTimePlus; | |
use Drupal\Core\StringTranslation\StringTranslationTrait; | |
/** | |
* Extends DateTimePlus(). | |
* | |
* This class extends the basic component and adds in Drupal-specific | |
* handling, like translation of the format() method. | |
* | |
* Static methods in base class can also be used to create DrupalDateTime objects. | |
* For example: | |
* | |
* DrupalDateTime::createFromArray( array('year' => 2010, 'month' => 9, 'day' => 28) ) | |
* | |
* @see \Drupal/Component/Datetime/DateTimePlus.php | |
*/ | |
class DrupalDateTime extends DateTimePlus { | |
use StringTranslationTrait; | |
/** | |
* Format string translation cache. | |
* | |
*/ | |
protected $formatTranslationCache; | |
/** | |
* Constructs a date object. | |
* | |
* @param string $time | |
* A date/input_time_adjusted string. Defaults to 'now'. | |
* @param mixed $timezone | |
* PHP DateTimeZone object, string or NULL allowed. | |
* Defaults to NULL. | |
* @param array $settings | |
* - validate_format: (optional) Boolean choice to validate the | |
* created date using the input format. The format used in | |
* createFromFormat() allows slightly different values than format(). | |
* Using an input format that works in both functions makes it | |
* possible to a validation step to confirm that the date created | |
* from a format string exactly matches the input. This option | |
* indicates the format can be used for validation. Defaults to TRUE. | |
* - langcode: (optional) Used to control the result of the format() method. | |
* Defaults to NULL. | |
* - debug: (optional) Boolean choice to leave debug values in the | |
* date object for debugging purposes. Defaults to FALSE. | |
*/ | |
public function __construct($time = 'now', $timezone = NULL, $settings = array()) { | |
if (!isset($settings['langcode'])) { | |
$settings['langcode'] = \Drupal::languageManager()->getCurrentLanguage()->getId(); | |
} | |
// Instantiate the parent class. | |
parent::__construct($time, $timezone, $settings); | |
} | |
/** | |
* Overrides prepareTimezone(). | |
* | |
* Override basic component timezone handling to use Drupal's | |
* knowledge of the preferred user timezone. | |
*/ | |
protected function prepareTimezone($timezone) { | |
if (empty($timezone)) { | |
// Fallback to user or system default timezone. | |
$timezone = drupal_get_user_timezone(); | |
} | |
return parent::prepareTimezone($timezone); | |
} | |
/** | |
* Overrides format(). | |
* | |
* @param string $format | |
* A format string using either PHP's date(). | |
* @param array $settings | |
* - timezone: (optional) String timezone name. Defaults to the timezone | |
* of the date object. | |
* - langcode: (optional) String two letter language code used to control | |
* the result of the format() method. Defaults to NULL. | |
* | |
* @return string | |
* The formatted value of the date. Since the format may contain user input, | |
* this value should be escaped when output. | |
*/ | |
public function format($format, $settings = array()) { | |
$langcode = !empty($settings['langcode']) ? $settings['langcode'] : $this->langcode; | |
$value = ''; | |
// Format the date and catch errors. | |
try { | |
// Encode markers that should be translated. 'A' becomes | |
// '\xEF\AA\xFF'. xEF and xFF are invalid UTF-8 sequences, | |
// and we assume they are not in the input string. | |
// Paired backslashes are isolated to prevent errors in | |
// read-ahead evaluation. The read-ahead expression ensures that | |
// A matches, but not \A. | |
$format = preg_replace(array('/\\\\\\\\/', '/(?<!\\\\)([AaeDlMTF])/'), array("\xEF\\\\\\\\\xFF", "\xEF\\\\\$1\$1\xFF"), $format); | |
// Call date_format(). | |
$format = parent::format($format, $settings); | |
// Translates a formatted date string. | |
$translation_callback = function($matches) use ($langcode) { | |
$code = $matches[1]; | |
$string = $matches[2]; | |
if (!isset($this->formatTranslationCache[$langcode][$code][$string])) { | |
$options = array('langcode' => $langcode); | |
if ($code == 'F') { | |
$options['context'] = 'Long month name'; | |
} | |
if ($code == '') { | |
$this->formatTranslationCache[$langcode][$code][$string] = $string; | |
} | |
else { | |
$this->formatTranslationCache[$langcode][$code][$string] = $this->t($string, array(), $options); | |
} | |
} | |
return $this->formatTranslationCache[$langcode][$code][$string]; | |
}; | |
// Translate the marked sequences. | |
$value = preg_replace_callback('/\xEF([AaeDlMTF]?)(.*?)\xFF/', $translation_callback, $format); | |
} | |
catch (\Exception $e) { | |
$this->errors[] = $e->getMessage(); | |
} | |
return $value; | |
} | |
} |