![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/LeadBundle/Helper/ |
<?php namespace Mautic\LeadBundle\Helper; use Mautic\CoreBundle\Helper\DateTimeHelper; use Mautic\CoreBundle\Helper\ParamsLoaderHelper; class TokenHelper { /** * @var array */ private static $parameters; /** * @param string $content * @param array $lead * @param bool $replace If true, search/replace will be executed on $content and the modified $content returned * rather than an array of found matches * * @return array|string */ public static function findLeadTokens($content, $lead, $replace = false) { if (!$lead) { return $replace ? $content : []; } // Search for bracket or bracket encoded $tokenList = []; $foundMatches = preg_match_all('/({|%7B)contactfield=(.*?)(}|%7D)/', $content, $matches); if ($foundMatches) { foreach ($matches[2] as $key => $match) { $token = $matches[0][$key]; if (isset($tokenList[$token])) { continue; } $alias = self::getFieldAlias($match); $defaultValue = self::getTokenDefaultValue($match); $tokenList[$token] = self::getTokenValue($lead, $alias, $defaultValue); } if ($replace) { $content = str_replace(array_keys($tokenList), $tokenList, $content); } } return $replace ? $content : $tokenList; } /** * Returns correct token value from provided list of tokens and the concrete token. * * @param array $tokens like ['{contactfield=website}' => 'https://mautic.org'] * @param string $token like '{contactfield=website|https://default.url}' * * @return string empty string if no match */ public static function getValueFromTokens(array $tokens, $token) { $token = str_replace(['{', '}'], '', $token); $alias = self::getFieldAlias($token); $default = self::getTokenDefaultValue($token); return empty($tokens["{{$alias}}"]) ? $default : $tokens["{{$alias}}"]; } /** * @return mixed */ private static function getTokenValue(array $lead, $alias, $defaultValue) { $value = ''; if (isset($lead[$alias])) { $value = $lead[$alias]; } elseif (!empty($lead['companies'])) { foreach ($lead['companies'] as $company) { if (isset($company['is_primary'], $company[$alias]) && 1 === (int) $company['is_primary']) { $value = $company[$alias]; break; } } } if ('' !== $value) { switch ($defaultValue) { case 'true': $value = urlencode($value); break; case 'datetime': case 'date': case 'time': $dt = new DateTimeHelper($value); $date = $dt->getDateTime()->format( self::getParameter('date_format_dateonly') ); $time = $dt->getDateTime()->format( self::getParameter('date_format_timeonly') ); switch ($defaultValue) { case 'datetime': $value = $date.' '.$time; break; case 'date': $value = $date; break; case 'time': $value = $time; break; } break; } } if (in_array($defaultValue, ['true', 'date', 'time', 'datetime'])) { return $value; } else { return '' !== $value ? $value : $defaultValue; } } private static function getTokenDefaultValue($match): string { $fallbackCheck = explode('|', $match); if (!isset($fallbackCheck[1])) { return ''; } return $fallbackCheck[1]; } private static function getFieldAlias($match): string { $fallbackCheck = explode('|', $match); return $fallbackCheck[0]; } /** * @param string $parameter * * @return mixed */ private static function getParameter($parameter) { if (null === self::$parameters) { self::$parameters = (new ParamsLoaderHelper())->getParameters(); } return self::$parameters[$parameter]; } }