From 8f6acdd5146a08e04c9c486099f2776e5676d274 Mon Sep 17 00:00:00 2001
From: Owen Bush <owen.bush@lullabot.com>
Date: Thu, 25 May 2023 17:41:44 -0600
Subject: [PATCH] Add tokens from eventseries and eventinstance to registrants

---
 .../recurring_events_registration.tokens.inc  | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/modules/recurring_events_registration/recurring_events_registration.tokens.inc b/modules/recurring_events_registration/recurring_events_registration.tokens.inc
index 83a1150b..569ead78 100644
--- a/modules/recurring_events_registration/recurring_events_registration.tokens.inc
+++ b/modules/recurring_events_registration/recurring_events_registration.tokens.inc
@@ -50,6 +50,17 @@ function recurring_events_registration_token_info() {
     'description' => t('The URL to delete a registrant.'),
   ];
 
+  $registrant['eventinstance'] = [
+    'name' => t('Registrant event instance'),
+    'description' => t('The eventinstance associated with a registrant'),
+    'type' => 'eventinstance',
+  ];
+  $registrant['eventseries'] = [
+    'name' => t('Registrant event series'),
+    'description' => t('The eventseries associated with a registrant'),
+    'type' => 'eventseries',
+  ];
+
   return [
     'types' => [
       'eventinstance' => $eventinstance_type,
@@ -67,6 +78,7 @@ function recurring_events_registration_token_info() {
  * Implements hook_tokens().
  */
 function recurring_events_registration_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
+  $token_service = \Drupal::token();
   $replacements = [];
   if ($type == 'eventinstance' && !empty($data['eventinstance'])) {
     $event_instance = $data['eventinstance'];
@@ -108,8 +120,30 @@ function recurring_events_registration_tokens($type, $tokens, array $data, array
           }
           $replacements[$original] = $url;
           break;
+
+        case 'eventinstance':
+          $instance = $registrant->getEventInstance();
+          $bubbleable_metadata->addCacheableDependency($instance);
+          $replacements[$original] = $instance->label();
+          break;
+
+        case 'eventseries':
+          $series = $registrant->getEventSeries();
+          $bubbleable_metadata->addCacheableDependency($series);
+          $replacements[$original] = $series->label();
+          break;
       }
     }
+
+    if ($instance_tokens = $token_service->findWithPrefix($tokens, 'eventinstance')) {
+      $instance = $registrant->getEventInstance();
+      $replacements += $token_service->generate('eventinstance', $instance_tokens, ['eventinstance' => $instance], $options, $bubbleable_metadata);
+    }
+
+    if ($series_tokens = $token_service->findWithPrefix($tokens, 'eventseries')) {
+      $series = $registrant->getEventSeries();
+      $replacements += $token_service->generate('eventseries', $series_tokens, ['eventseries' => $series], $options, $bubbleable_metadata);
+    }
   }
   return $replacements;
 }
-- 
GitLab