From 2ad7abb03d25c1fcfb9d0497bbfda1e41dd1e4a9 Mon Sep 17 00:00:00 2001 From: shahrukh-moby Date: Fri, 3 Nov 2023 17:43:38 +0500 Subject: [PATCH 1/2] MMB-271: Add certificate validity date tokens --- .../Token/AbstractCertificateToken.php | 3 +- CRM/Certificate/Token/Certificate.php | 43 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/CRM/Certificate/Token/AbstractCertificateToken.php b/CRM/Certificate/Token/AbstractCertificateToken.php index 9bfe5c8..55a33ca 100644 --- a/CRM/Certificate/Token/AbstractCertificateToken.php +++ b/CRM/Certificate/Token/AbstractCertificateToken.php @@ -102,7 +102,8 @@ public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) } if ($value) { - $row->tokens($prefix, $field, $value); + $row->format('text/plain')->tokens($prefix, $field, $value); + $row->format('text/html')->tokens($prefix, $field, $value); } } diff --git a/CRM/Certificate/Token/Certificate.php b/CRM/Certificate/Token/Certificate.php index 48ded23..82374cd 100644 --- a/CRM/Certificate/Token/Certificate.php +++ b/CRM/Certificate/Token/Certificate.php @@ -21,6 +21,8 @@ class CRM_Certificate_Token_Certificate extends CRM_Certificate_Token_AbstractCe "name" => "Certificate Name", "start_date" => "Certificate Start Date", "end_date" => "Certificate End Date", + "valid_from" => "Certificate Valid From Date", + "valid_to" => "Certificate Valid To Date", ]; public function __construct($tokenNames = []) { @@ -55,7 +57,7 @@ public function prefetch(TokenValueEvent $e) { return $resolvedTokens; } - $this->resolveFields($certificate, $resolvedTokens); + $this->resolveFields($certificate, $this->getMembershipDates($e), $resolvedTokens); } } catch (Exception $e) { @@ -65,16 +67,53 @@ public function prefetch(TokenValueEvent $e) { return $resolvedTokens; } + private function getMembershipDates(TokenValueEvent $e): array { + $contactIds = $e->getTokenProcessor()->getContextValues('contactId'); + $contactId = (is_array($contactIds) && !empty($contactIds[0])) ? $contactIds[0] : 0; + + $membershipRows = civicrm_api3( + 'membership', + 'get', + [ + 'version' => 3, + 'return' => ['start_date', 'end_date'], + 'contact_id' => $contactId, + 'status_id' => 2, + 'sequential' => 1, + 'options' => ['sort' => 'end_date desc', 'limit' => 1], + ] + ); + + return !empty($membershipRows['values'][0]) + ? $membershipRows['values'][0] + : ['start_date' => '', 'end_date' => '']; + } + /** * Resolve the value of ceritificate configuration token fields. * * @param CRM_Certificate_DAO_CompuCertificate $certificate + * @param array $membershipDates * @param array &$resolvedTokens */ - private function resolveFields($certificate, &$resolvedTokens) { + private function resolveFields($certificate, array $membershipDates, &$resolvedTokens) { + $membershipStartTimestamp = !empty($membershipDates['start_date']) ? strtotime($membershipDates['start_date']) : ''; + $membershipEndTimestamp = !empty($membershipDates['end_date']) ? strtotime($membershipDates['end_date']) : ''; + $certificateValidityStartTimestamp = !empty($certificate->min_valid_from_date) ? strtotime($certificate->min_valid_from_date) : ''; + $certificateValidityEndTimestamp = !empty($certificate->max_valid_through_date) ? strtotime($certificate->max_valid_through_date) : ''; + + $validityStartDate = empty($certificateValidityStartTimestamp) || $membershipStartTimestamp > $certificateValidityStartTimestamp ? + $membershipDates['start_date'] : (string) $certificate->min_valid_from_date; + $validityEndDate = empty($certificateValidityEndTimestamp) || (!empty($membershipEndTimestamp) && $certificateValidityEndTimestamp > $membershipEndTimestamp) ? + $membershipDates['end_date'] : (string) $certificate->max_valid_through_date; + $resolvedTokens['name'] = $certificate->name; $resolvedTokens['start_date'] = CRM_Utils_Date::customFormat($certificate->start_date, '%e/%b/%Y'); $resolvedTokens['end_date'] = CRM_Utils_Date::customFormat($certificate->end_date, '%e/%b/%Y'); + $resolvedTokens['valid_from'] = !empty($validityStartDate) + ? CRM_Utils_Date::customFormat($validityStartDate, '%e/%b/%Y') : ''; + $resolvedTokens['valid_to'] = !empty($validityEndDate) + ? CRM_Utils_Date::customFormat($validityEndDate, '%e/%b/%Y') : ''; } } From 6620a27141c099bb2607186bf12d51fb8d31564f Mon Sep 17 00:00:00 2001 From: shahrukh-moby Date: Mon, 6 Nov 2023 13:51:06 +0500 Subject: [PATCH 2/2] MMB-271: Refactor code to use status name instead of status id --- CRM/Certificate/Token/Certificate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CRM/Certificate/Token/Certificate.php b/CRM/Certificate/Token/Certificate.php index 82374cd..6d736fa 100644 --- a/CRM/Certificate/Token/Certificate.php +++ b/CRM/Certificate/Token/Certificate.php @@ -78,7 +78,7 @@ private function getMembershipDates(TokenValueEvent $e): array { 'version' => 3, 'return' => ['start_date', 'end_date'], 'contact_id' => $contactId, - 'status_id' => 2, + 'status_id' => 'Current', 'sequential' => 1, 'options' => ['sort' => 'end_date desc', 'limit' => 1], ]