diff --git a/CRM/Case/BAO/CaseType.php b/CRM/Case/BAO/CaseType.php index 2127b92e37d4..7a107d2b15db 100644 --- a/CRM/Case/BAO/CaseType.php +++ b/CRM/Case/BAO/CaseType.php @@ -219,7 +219,12 @@ public static function convertDefinitionToXML($name, $definition) { */ protected static function encodeXmlString($str) { // PHP 5.4: return htmlspecialchars($str, ENT_XML1, 'UTF-8') - return htmlspecialchars($str); + if (is_scalar($str)) { + return htmlspecialchars($str); + } + else { + return NULL; + } } /** diff --git a/tests/phpunit/CRM/Case/BAO/CaseTypeTest.php b/tests/phpunit/CRM/Case/BAO/CaseTypeTest.php index 30a4974b7b39..54514f9bbe34 100644 --- a/tests/phpunit/CRM/Case/BAO/CaseTypeTest.php +++ b/tests/phpunit/CRM/Case/BAO/CaseTypeTest.php @@ -115,10 +115,64 @@ public function definitionProvider() { 'xml' => file_get_contents(__DIR__ . '/xml/forkable-1.xml'), ]; + $fixtures['empty-node-text'] = [ + 'json' => json_encode([ + 'activityTypes' => [ + ['name' => 'First act'], + ['name' => 'Second act'], + ], + 'activitySets' => [ + [ + 'name' => 'set1', + 'label' => 'Label 1', + 'timeline' => 1, + 'activityTypes' => [ + ['name' => 'Open Case', 'status' => 'Completed'], + ], + ], + [ + 'name' => 'set2', + 'label' => 'Label 2', + 'timeline' => 1, + 'activityTypes' => [ + [ + 'name' => 'First act', + 'status' => 'Scheduled', + 'reference_activity' => 'Open Case', + 'reference_offset' => 1, + 'reference_select' => 'newest', + 'default_assignee_type' => '2', + 'default_assignee_relationship' => '2_b_a', + 'default_assignee_contact' => [], + ], + ], + ], + ], + 'timelineActivityTypes' => [ + ['name' => 'Open Case', 'status' => 'Completed'], + [ + 'name' => 'First act', + 'status' => 'Scheduled', + 'reference_activity' => 'Open Case', + 'reference_offset' => '1', + 'reference_select' => 'newest', + 'default_assignee_type' => '2', + 'default_assignee_relationship' => '2_b_a', + 'default_assignee_contact' => [], + ], + ], + 'caseRoles' => [ + ['name' => 'First role', 'creator' => 1, 'manager' => 1], + ], + ]), + 'xml' => file_get_contents(__DIR__ . '/xml/empty-node-text.xml'), + ]; + $cases = []; foreach ([ 'empty-defn', 'empty-lists', + 'empty-node-text', 'one-item-in-each', 'two-items-in-each', 'forkable-0', diff --git a/tests/phpunit/CRM/Case/BAO/xml/empty-node-text.xml b/tests/phpunit/CRM/Case/BAO/xml/empty-node-text.xml new file mode 100644 index 000000000000..48c116b52351 --- /dev/null +++ b/tests/phpunit/CRM/Case/BAO/xml/empty-node-text.xml @@ -0,0 +1,49 @@ + + + Housing Support + + + First act + + + Second act + + + + + set1 + + true + + + Open Case + Completed + + + + + set2 + + true + + + First act + Scheduled + Open Case + 1 + newest + 2 + 2_b_a + + + + + + + + First role + 1 + 1 + + +