Skip to content
Snippets Groups Projects

Issue #3432347: Add tokens for reference fields

1 file
+ 21
2
Compare changes
  • Side-by-side
  • Inline
+ 21
2
@@ -5,6 +5,7 @@
* Provides Token integration for Message Plus.
*/
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\message\MessageInterface;
/**
@@ -48,7 +49,8 @@ function message_plus_token_info() {
/**
* Implements hook_tokens().
*/
function message_plus_tokens($type, $tokens, array $data) {
function message_plus_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$token_service = \Drupal::token();
$replacements = [];
if ($type != 'message' || !($message = $data['message'] ?? NULL) instanceof MessageInterface) {
@@ -61,7 +63,24 @@ function message_plus_tokens($type, $tokens, array $data) {
continue;
}
foreach (['_name', '_link'] as $string_ending) {
// Process reference field tokens.
$matches = [];
preg_match('/(?<=field_)(.*)(?=_reference)/', $name, $matches);
$entity_type_id = $matches[0] ?? NULL;
if (
$entity_type_id &&
($field_name = 'field_' . $entity_type_id . '_reference') &&
$message->hasField($field_name) &&
$entity_tokens = $token_service->findWithPrefix($tokens, $field_name)
) {
$replacements += $token_service->generate($entity_type_id, $entity_tokens, [
$entity_type_id => $message->get($field_name)->entity,
], $options, $bubbleable_metadata);
}
// Process reference field name and link.
foreach (['name', 'link'] as $string_ending) {
if (!str_ends_with($name, $string_ending)) {
continue;
}
Loading