From 57d0103c1926b8c8a8d758b7018a9c864f378c34 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Fri, 17 Mar 2023 11:41:36 +1300 Subject: [PATCH] dev/core#4079 Add Pledge Tokens --- CRM/Event/Tokens.php | 7 --- CRM/Pledge/Tokens.php | 57 +++++++++++++++++++ Civi/Core/Container.php | 6 +- .../CRM/Utils/TokenConsistencyTest.php | 31 ++++++++++ 4 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 CRM/Pledge/Tokens.php diff --git a/CRM/Event/Tokens.php b/CRM/Event/Tokens.php index 3ac471ad17..5e00e521dd 100644 --- a/CRM/Event/Tokens.php +++ b/CRM/Event/Tokens.php @@ -17,13 +17,6 @@ use Civi\Token\TokenRow; * Class CRM_Event_Tokens * * Generate "event.*" tokens. - * - * This TokenSubscriber was produced by refactoring the code from the - * scheduled-reminder system with the goal of making that system - * more flexible. The current implementation is still coupled to - * scheduled-reminders. It would be good to figure out a more generic - * implementation which is not tied to scheduled reminders, although - * that is outside the current scope. */ class CRM_Event_Tokens extends CRM_Core_EntityTokens { diff --git a/CRM/Pledge/Tokens.php b/CRM/Pledge/Tokens.php new file mode 100644 index 0000000000..c296148735 --- /dev/null +++ b/CRM/Pledge/Tokens.php @@ -0,0 +1,57 @@ +addTag('kernel.event_subscriber')->setPublic(TRUE); - foreach (['Activity', 'Contact', 'Contribute', 'Event', 'Mailing', 'Member', 'Case'] as $comp) { - $container->setDefinition('crm_' . strtolower($comp) . '_tokens', new Definition( - "CRM_{$comp}_Tokens", + foreach (['Activity', 'Contact', 'Contribute', 'Event', 'Mailing', 'Member', 'Case', 'Pledge'] as $component) { + $container->setDefinition('crm_' . strtolower($component) . '_tokens', new Definition( + "CRM_{$component}_Tokens", [] ))->addTag('kernel.event_subscriber')->setPublic(TRUE); } diff --git a/tests/phpunit/CRM/Utils/TokenConsistencyTest.php b/tests/phpunit/CRM/Utils/TokenConsistencyTest.php index 3f2154215a..29bd312fed 100644 --- a/tests/phpunit/CRM/Utils/TokenConsistencyTest.php +++ b/tests/phpunit/CRM/Utils/TokenConsistencyTest.php @@ -528,6 +528,37 @@ contribution_recur.payment_instrument_id:name :Check } + public function testPledgeTokens(): void { + $pledgeID = $this->pledgeCreate(['contact_id' => $this->individualCreate(), 'create_date' => '2022-04-07', 'start_date' => '2022-04-07']); + $tokenProcessor = $this->getTokenProcessor(['schema' => ['pledgeId']]); + $list = $tokenProcessor->listTokens(); + $this->assertEquals(array_merge($this->getPledgeTokens(), $this->getDomainTokens()), $list); + $tokenString = implode(', ', array_keys($this->getPledgeTokens())); + $tokenProcessor->addMessage('text', $tokenString, 'text/plain'); + $tokenProcessor->addRow(['pledgeId' => $pledgeID]); + $tokenProcessor->evaluate(); + $this->assertEquals($this->getExpectedPledgeTokenOutput(), $tokenProcessor->getRow(0)->render('text')); + } + + public function getExpectedPledgeTokenOutput(): string { + return '$100.00, US Dollar, year, 5, 15, 5, April 7th, 2022, April 7th, 2022, , '; + } + + public function getPledgeTokens(): array { + return [ + '{pledge.amount}' => 'Total Pledged', + '{pledge.currency:label}' => 'Pledge Currency', + '{pledge.frequency_unit:label}' => 'Pledge Frequency Unit', + '{pledge.frequency_interval}' => 'Pledge Frequency Interval', + '{pledge.frequency_day}' => 'Pledge day', + '{pledge.installments}' => 'Pledge Number of Installments', + '{pledge.start_date}' => 'Pledge Start Date', + '{pledge.create_date}' => 'Pledge Made', + '{pledge.cancel_date}' => 'Pledge Cancelled Date', + '{pledge.end_date}' => 'Pledge End Date', + ]; + } + /** * Get the advertised tokens the legacy function doesn't know about. * -- 2.25.1