}
/**
- * Get< the regex for token replacement
+ * Get the regex for token replacement
*
* @param string $token_type
* A string indicating the the type of token to be used in the expression.
*
* @return string
- * regular expression sutiable for using in preg_replace
+ * regular expression suitable for using in preg_replace
*/
- private static function tokenRegex($token_type) {
- return '/(?<!\{|\\\\)\{' . $token_type . '\.([\w]+(\-[\w\s]+)?)\}(?!\})/';
+ private static function tokenRegex(string $token_type) {
+ return '/(?<!\{|\\\\)\{' . $token_type . '\.([\w]+(:|\.)?\w*(\-[\w\s]+)?)\}(?!\})/';
}
/**
public static function getTokens($string) {
$matches = [];
$tokens = [];
- preg_match_all('/(?<!\{|\\\\)\{(\w+\.\w+)\}(?!\})/',
+ preg_match_all('/(?<!\{|\\\\)\{(\w+\.\w+(:|.)?\w*)\}(?!\})/',
$string,
$matches,
PREG_PATTERN_ORDER
if ($matches[1]) {
foreach ($matches[1] as $token) {
- [$type, $name] = preg_split('/\./', $token, 2);
+ $parts = explode('.', $token, 3);
+ $type = $parts[0];
+ $name = $parts[1];
+ $suffix = !empty($parts[2]) ? ('.' . $parts[2]) : '';
if ($name && $type) {
if (!isset($tokens[$type])) {
$tokens[$type] = [];
}
- $tokens[$type][] = $name;
+ $tokens[$type][] = $name . $suffix;
}
}
}
protected static function _buildContributionTokens() {
$key = 'contribution';
- if (self::$_tokens[$key] == NULL) {
+
+ if (!isset(Civi::$statics[__CLASS__][__FUNCTION__][$key])) {
+ $processor = new CRM_Contribute_Tokens();
$tokens = array_merge(CRM_Contribute_BAO_Contribution::exportableFields('All'),
['campaign' => [], 'financial_type' => [], 'payment_instrument' => []],
- self::getCustomFieldTokens('Contribution')
+ self::getCustomFieldTokens('Contribution'),
+ $processor->getPseudoTokens()
);
foreach ($tokens as $token) {
if (!empty($token['name'])) {
$tokens[$token['name']] = [];
}
}
- self::$_tokens[$key] = array_keys($tokens);
+ Civi::$statics[__CLASS__][__FUNCTION__][$key] = array_keys($tokens);
}
+ self::$_tokens[$key] = Civi::$statics[__CLASS__][__FUNCTION__][$key];
}
/**