From 7ab8b45b899555645b064c19b0a28605b32bd23d Mon Sep 17 00:00:00 2001 From: jitendrapurohit Date: Thu, 13 Oct 2016 18:59:22 +0530 Subject: [PATCH] CRM-19443 - Fix date tokens in Print/Merge Task --- CRM/Utils/Token.php | 12 +- .../Member/Form/Task/PDFLetterCommonTest.php | 128 ++++++++++++++++++ 2 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 tests/phpunit/CRM/Member/Form/Task/PDFLetterCommonTest.php diff --git a/CRM/Utils/Token.php b/CRM/Utils/Token.php index 63d6cbf823..c40c0da6ab 100644 --- a/CRM/Utils/Token.php +++ b/CRM/Utils/Token.php @@ -753,6 +753,9 @@ class CRM_Utils_Token { $value = CRM_Core_PseudoConstant::getLabel('CRM_Contact_BAO_Contact', $token, $value); } } + elseif ($value && CRM_Utils_String::endsWith($token, '_date')) { + $value = CRM_Utils_Date::customFormat($value); + } } if (!$html) { @@ -1406,9 +1409,9 @@ class CRM_Utils_Token { */ public static function getMembershipTokenDetails($membershipIDs) { $memberships = civicrm_api3('membership', 'get', array( - 'options' => array('limit' => 200000), - 'membership_id' => array('IN' => (array) $membershipIDs), - )); + 'options' => array('limit' => 0), + 'membership_id' => array('IN' => (array) $membershipIDs), + )); return $memberships['values']; } @@ -1798,6 +1801,9 @@ class CRM_Utils_Token { default: if (in_array($token, self::$_tokens[$entity])) { $value = $membership[$token]; + if (CRM_Utils_String::endsWith($token, '_date')) { + $value = CRM_Utils_Date::customFormat($value); + } } else { // ie unchanged diff --git a/tests/phpunit/CRM/Member/Form/Task/PDFLetterCommonTest.php b/tests/phpunit/CRM/Member/Form/Task/PDFLetterCommonTest.php new file mode 100644 index 0000000000..33ca159d8c --- /dev/null +++ b/tests/phpunit/CRM/Member/Form/Task/PDFLetterCommonTest.php @@ -0,0 +1,128 @@ +quickCleanUpFinancialEntities(); + CRM_Utils_Hook::singleton()->reset(); + } + + /** + * Test token replacement for Print/Merge Task + */ + public function testMembershipTokenReplacementInPDF() { + $membershipIds = $returnProperties = $categories = $expected = array(); + list($tokens, $htmlMessage) = self::getSampleHTML(); + + $membershipDates = array( + date('Y-m-d'), + date('Y-m-d', strtotime('-1 month')), + ); + // Create sample memberships with different dates. + foreach ($membershipDates as $date) { + $contactId = $this->individualCreate(); + $membershipTypeID = $this->membershipTypeCreate(array( + 'minimum_fee' => '100.00', + 'member_of_contact_id' => $contactId, + )); + $params = array( + 'contact_id' => $contactId, + 'membership_type_id' => $membershipTypeID, + 'join_date' => $date, + 'start_date' => $date, + 'end_date' => date('Y-m-d', strtotime("{$date} +1 year")), + ); + $result = $this->callAPISuccess('membership', 'create', $params); + $membershipIds[] = $result['id']; + $params = array_merge($params, + array( + 'fee' => '100.00', + 'type' => 'General', + 'status' => 'New', + ) + ); + + // Form an expected array replacing tokens for each contact. + foreach ($tokens as $key => $val) { + if (CRM_Utils_String::endsWith($val, '_date')) { + $formattedDate = CRM_Utils_Date::customFormat($params[$val]); + $expected[$contactId][$val] = "{$key} - {$formattedDate}"; + } + else { + $expected[$contactId][$val] = $params[$val]; + } + } + } + $messageToken = CRM_Utils_Token::getTokens($htmlMessage); + $testHTML = CRM_Member_Form_Task_PDFLetterCommon::generateHTML($membershipIds, + $returnProperties, + NULL, + NULL, + $messageToken, + $htmlMessage, + $categories + ); + + // Assert all membership tokens are replaced correctly. + $expected = array_values($expected); + foreach ($expected as $key => $dateVal) { + foreach ($tokens as $text => $token) { + $this->assertContains($dateVal[$token], $testHTML[$key]); + } + } + } + + /** + * Generate sample HTML for testing. + */ + public static function getSampleHTML() { + $tokens = array( + 'Test Fee' => 'fee', + 'Test Type' => 'type', + 'Test Status' => 'status', + 'Test Join Date' => 'join_date', + 'Test Start Date' => 'start_date', + 'Test End Date' => 'end_date', + ); + + $html = ''; + foreach ($tokens as $key => $val) { + $html .= "

{$key} - {membership.{$val}}

"; + } + return array($tokens, $html); + } + +} -- 2.25.1