From eb969099f66c48ce7d2df28625d5d9f795491faa Mon Sep 17 00:00:00 2001 From: Aidan Saunders Date: Mon, 5 Nov 2018 18:16:09 +0000 Subject: [PATCH] Allow subclasses to override the determination of active tokens. This enables variable named tokens. --- Civi/Token/AbstractTokenSubscriber.php | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Civi/Token/AbstractTokenSubscriber.php b/Civi/Token/AbstractTokenSubscriber.php index 1302de78c519..9609ecca48ba 100644 --- a/Civi/Token/AbstractTokenSubscriber.php +++ b/Civi/Token/AbstractTokenSubscriber.php @@ -45,6 +45,7 @@ * 3. Implement the evaluateToken() method. * 4. Optionally, override others: * + checkActive() + * + getActiveTokens() * + prefetch() * + alterActionScheduleMailing() * 5. Register the new class with the event-dispatcher. @@ -142,13 +143,10 @@ public function evaluateTokens(TokenValueEvent $e) { return; } - $messageTokens = $e->getTokenProcessor()->getMessageTokens(); - if (!isset($messageTokens[$this->entity])) { + $activeTokens = $this->getActiveTokens($e); + if (!$activeTokens) { return; } - - $activeTokens = array_intersect($messageTokens[$this->entity], array_keys($this->tokenNames)); - $prefetch = $this->prefetch($e); foreach ($e->getRows() as $row) { @@ -158,6 +156,21 @@ public function evaluateTokens(TokenValueEvent $e) { } } + /** + * To handle variable tokens, override this function and return the active tokens. + * + * @param \Civi\Token\Event\TokenValueEvent $e + * + * @return mixed + */ + public function getActiveTokens(TokenValueEvent $e) { + $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + if (!isset($messageTokens[$this->entity])) { + return FALSE; + } + return array_intersect($messageTokens[$this->entity], array_keys($this->tokenNames)); + } + /** * To perform a bulk lookup before rendering tokens, override this * function and return the prefetched data.