public static function caseTokens($caseTypeId = NULL) {
static $tokens = NULL;
if (!$tokens) {
- foreach (CRM_Case_BAO_Case::fields() as $field) {
- $tokens["{case.{$field['name']}}"] = $field['title'];
- }
+ $tokens = [
+ '{case.id}' => 'Case ID',
+ '{case.case_type_id:label}' => 'Case Type',
+ '{case.subject}' => 'Case Subject',
+ '{case.start_date}' => 'Case Start Date',
+ '{case.end_date}' => 'Case End Date',
+ '{case.details}' => 'Details',
+ '{case.status_id:label}' => 'Case Status',
+ '{case.is_deleted}' => 'Case is in the Trash',
+ '{case.created_date}' => 'Created Date',
+ '{case.modified_date}' => 'Modified Date',
+ ];
$customFields = CRM_Core_BAO_CustomField::getFields('Case', FALSE, FALSE, $caseTypeId);
foreach ($customFields as $id => $field) {
$fn = is_callable(['CRM_Utils_Token', $fn]) ? $fn : 'getApiTokenReplacement';
// since we already know the tokens lets just use them & do str_replace which is faster & simpler than preg_replace
foreach ($knownTokens[$entity] as $token) {
- $replacement = self::$fn($entity, $token, $entityArray);
+ // We are now supporting the syntax case_type_id:label
+ // so strip anything after the ':'
+ // (we aren't supporting 'name' at this stage, so we can assume 'label'
+ // test cover in TokenConsistencyTest.
+ $parts = explode(':', $token);
+ $replacement = self::$fn($entity, $parts[0], $entityArray);
if ($escapeSmarty) {
$replacement = self::tokenEscapeSmarty($replacement);
}
// Now do the same without passing in 'knownTokens'
$tokenHtml = CRM_Utils_Token::replaceCaseTokens($caseID, implode("\n", array_keys($this->getCaseTokens())));
$this->assertEquals($this->getExpectedCaseTokenOutput(), $tokenHtml);
+
+ // And check our deprecated tokens still work.
+ $tokenHtml = CRM_Utils_Token::replaceCaseTokens($caseID, '{case.case_type_id} {case.status_id}');
+ $this->assertEquals('Housing Support Ongoing', $tokenHtml);
}
/**
public function getCaseTokens(): array {
return [
'{case.id}' => 'Case ID',
- '{case.case_type_id}' => 'Case Type ID',
+ '{case.case_type_id:label}' => 'Case Type',
'{case.subject}' => 'Case Subject',
'{case.start_date}' => 'Case Start Date',
'{case.end_date}' => 'Case End Date',
'{case.details}' => 'Details',
- '{case.status_id}' => 'Case Status',
+ '{case.status_id:label}' => 'Case Status',
'{case.is_deleted}' => 'Case is in the Trash',
'{case.created_date}' => 'Created Date',
'{case.modified_date}' => 'Modified Date',