CRM_Activity_Tokens - Simplify prefetch. Remove special-cases for `actionSearchResult`.
[civicrm-core.git] / CRM / Activity / Tokens.php
index 647cc372bc8bc39a86461547fe8d0806de6fe903..bfcb4e76e5c03edf283fac22b71be66848517593 100644 (file)
@@ -84,6 +84,7 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber {
     // Multiple revisions of the activity.
     // Q: Could we simplify & move the extra AND clauses into `where(...)`?
     $e->query->param('casEntityJoinExpr', 'e.id = reminder.entity_id AND e.is_current_revision = 1 AND e.is_deleted = 0');
+    $e->query->select('e.id AS tokenContext_' . $this->getEntityContextSchema());
   }
 
   /**
@@ -91,34 +92,31 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber {
    */
   public function prefetch(TokenValueEvent $e) {
     // Find all the entity IDs
-    $entityIds
-      = $e->getTokenProcessor()->getContextValues('actionSearchResult', 'entityID')
-      + $e->getTokenProcessor()->getContextValues($this->getEntityContextSchema());
+    $entityIds = $e->getTokenProcessor()->getContextValues($this->getEntityContextSchema());
 
     if (!$entityIds) {
       return NULL;
     }
 
     // Get data on all activities for basic and customfield tokens
-    $activities = civicrm_api3('Activity', 'get', [
+    $prefetch['activity'] = civicrm_api3('Activity', 'get', [
       'id' => ['IN' => $entityIds],
       'options' => ['limit' => 0],
       'return' => self::getReturnFields($this->activeTokens),
-    ]);
-    $prefetch['activity'] = $activities['values'];
+    ])['values'];
 
     // Store the activity types if needed
-    if (in_array('activity_type', $this->activeTokens)) {
+    if (in_array('activity_type', $this->activeTokens, TRUE)) {
       $this->activityTypes = \CRM_Core_OptionGroup::values('activity_type');
     }
 
     // Store the activity statuses if needed
-    if (in_array('status', $this->activeTokens)) {
+    if (in_array('status', $this->activeTokens, TRUE)) {
       $this->activityStatuses = \CRM_Core_OptionGroup::values('activity_status');
     }
 
     // Store the campaigns if needed
-    if (in_array('campaign', $this->activeTokens)) {
+    if (in_array('campaign', $this->activeTokens, TRUE)) {
       $this->campaigns = \CRM_Campaign_BAO_Campaign::getCampaigns();
     }
 
@@ -126,7 +124,18 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber {
   }
 
   /**
-   * @inheritDoc
+   * Evaluate the content of a single token.
+   *
+   * @param \Civi\Token\TokenRow $row
+   *   The record for which we want token values.
+   * @param string $entity
+   *   The name of the token entity.
+   * @param string $field
+   *   The name of the token field.
+   * @param mixed $prefetch
+   *   Any data that was returned by the prefetch().
+   *
+   * @throws \CRM_Core_Exception
    */
   public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) {
     // maps token name to api field
@@ -134,8 +143,7 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber {
       'activity_id' => 'id',
     ];
 
-    // Get ActivityID either from actionSearchResult (for scheduled reminders) if exists
-    $activityId = $row->context['actionSearchResult']->entityID ?? $row->context[$this->getEntityContextSchema()];
+    $activityId = $row->context[$this->getEntityContextSchema()];
 
     $activity = $prefetch['activity'][$activityId];