Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Helper\DateTime; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| class DateTimeToken | |
| { | |
| public function __construct( | |
| private CoreParametersHelper $coreParametersHelper, | |
| private DateTimeLocalization $dateTimeLocalization | |
| ) { | |
| } | |
| /** | |
| * @return array<string> | |
| */ | |
| public function getTokens(string $content, string $contactTimezone = null): array | |
| { | |
| $tokens = []; | |
| preg_match_all('/{today(.*?)}/', $content, $matches); | |
| if (!empty($matches[1])) { | |
| foreach ($matches[1] as $key => $modifier) { | |
| $token = $matches[0][$key]; | |
| if (isset($tokens[$token])) { | |
| continue; | |
| } | |
| $tokens[$token] = $this->getToday($modifier, $contactTimezone); | |
| } | |
| } | |
| return $tokens; | |
| } | |
| private function getToday(string $modifier, ?string $contactTimezone): string | |
| { | |
| $defaultDateFormat = $this->coreParametersHelper->get('date_format_dateonly'); | |
| $defaultTimeFormat = $this->coreParametersHelper->get('date_format_timeonly'); | |
| $defaultDatetimeFormat = sprintf('%s %s', $defaultDateFormat, $defaultTimeFormat); | |
| $contactTimezone = $contactTimezone ?: $this->coreParametersHelper->get('default_timezone', 'UTC'); | |
| $dateTime = new \DateTime('now', new \DateTimeZone($contactTimezone)); | |
| $parseModifier = explode('|', ltrim($modifier, '|')); | |
| $modifier = $parseModifier[0] ?? ''; | |
| $relativeDate = $parseModifier[1] ?? ''; | |
| $format = match ($modifier) { | |
| 'datetime' => $defaultDatetimeFormat, | |
| 'date' => $defaultDateFormat, | |
| 'time' => $defaultTimeFormat, | |
| default => $modifier ?: $defaultDatetimeFormat, | |
| }; | |
| if ($relativeDate) { | |
| $dateTime->modify($relativeDate); | |
| } | |
| return $this->dateTimeLocalization->localize($dateTime->format($format)); | |
| } | |
| } | |