Merge pull request #23887 from civicrm/5.51
[civicrm-core.git] / CRM / Event / ParticipantTokens.php
index 5733e10af9e2520fa06bc8c1f2a26506a89196c0..b29050fcf143fd24f98f5fdfba01af4557788751 100644 (file)
@@ -19,13 +19,6 @@ use Civi\Token\TokenRow;
  */
 class CRM_Event_ParticipantTokens extends CRM_Core_EntityTokens {
 
-  public static function getSubscribedEvents() {
-    $events = parent::getSubscribedEvents();
-    // Set the weight so it runs before event tokens.
-    $events['civi.token.eval'] = ['evaluateTokens', 400];
-    return $events;
-  }
-
   /**
    * Get the entity name for api v4 calls.
    *
@@ -58,15 +51,20 @@ class CRM_Event_ParticipantTokens extends CRM_Core_EntityTokens {
     ];
   }
 
+  public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e): void {
+    // When targeting `civicrm_participant` records, we enable both `{participant.*}` (per usual) and the related `{event.*}`.
+    parent::alterActionScheduleQuery($e);
+    if ($e->mapping->getEntity() === $this->getExtendableTableName()) {
+      $e->query->select('e.event_id AS tokenContext_eventId');
+    }
+  }
+
   /**
    * @inheritDoc
    * @throws \CiviCRM_API3_Exception
    */
   public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) {
     $this->prefetch = (array) $prefetch;
-    if (empty($row->context['eventId'])) {
-      $row->context['eventId'] = $this->getFieldValue($row, 'event_id');
-    }
     if ($field === 'balance') {
       // @todo - is this really a good idea to call this & potentially get the
       // balance of the contribution attached to 'registered_by_id'
@@ -95,7 +93,7 @@ class CRM_Event_ParticipantTokens extends CRM_Core_EntityTokens {
    *
    * @return string[]
    */
-  public function getSkippedFields(): array {
+  protected function getSkippedFields(): array {
     $fields = parent::getSkippedFields();
     // Never add these 2 fields - may not be a stable part of the schema.
     // This field is on it's way out of core.