* XML
*/
public static function convertDefinitionToXML($name, $definition) {
- $xmlFile = '<?xml version="1.0" encoding="utf-8" ?>' . "\n\n<CaseType>\n";
- $xmlFile .= "<name>" . self::encodeXmlString($name) . "</name>\n";
+
+ $xw = new XMLWriter();
+ $xw->openMemory();
+ $xw->setIndent(TRUE);
+ $xw->setIndentString(' ');
+ $xw->startDocument("1.0", 'UTF-8');
+
+ $xw->startElement('CaseType');
+
+ $xw->startElement('name');
+ $xw->text($name);
+ $xw->fullEndElement();
if (array_key_exists('forkable', $definition)) {
- $xmlFile .= "<forkable>" . ((int) $definition['forkable']) . "</forkable>\n";
+ $xw->startElement('forkable');
+ $xw->text((int) $definition['forkable']);
+ $xw->fullEndElement();
}
if (isset($definition['activityTypes'])) {
- $xmlFile .= "<ActivityTypes>\n";
+ $xw->startElement('ActivityTypes');
+
foreach ($definition['activityTypes'] as $values) {
- $xmlFile .= "<ActivityType>\n";
+ $xw->startElement('ActivityType');
foreach ($values as $key => $value) {
- $xmlFile .= "<{$key}>" . self::encodeXmlString($value) . "</{$key}>\n";
+ $xw->startElement($key);
+ $xw->text($value);
+ $xw->fullEndElement();
}
- $xmlFile .= "</ActivityType>\n";
+ // ActivityType
+ $xw->fullEndElement();
}
- $xmlFile .= "</ActivityTypes>\n";
+ // ActivityTypes
+ $xw->fullEndElement();
}
if (!empty($definition['statuses'])) {
- $xmlFile .= "<Statuses>\n";
+ $xw->startElement('Statuses');
+
foreach ($definition['statuses'] as $value) {
- $xmlFile .= "<Status>$value</Status>\n";
+ $xw->startElement('Status');
+ $xw->text($value);
+ $xw->fullEndElement();
}
- $xmlFile .= "</Statuses>\n";
+ // Statuses
+ $xw->fullEndElement();
}
if (isset($definition['activitySets'])) {
- $xmlFile .= "<ActivitySets>\n";
+
+ $xw->startElement('ActivitySets');
foreach ($definition['activitySets'] as $k => $val) {
- $xmlFile .= "<ActivitySet>\n";
+
+ $xw->startElement('ActivitySet');
foreach ($val as $index => $setVal) {
switch ($index) {
case 'activityTypes':
if (!empty($setVal)) {
- $xmlFile .= "<ActivityTypes>\n";
+ $xw->startElement('ActivityTypes');
foreach ($setVal as $values) {
- $xmlFile .= "<ActivityType>\n";
+ $xw->startElement('ActivityType');
foreach ($values as $key => $value) {
- $xmlFile .= "<{$key}>" . self::encodeXmlString($value) . "</{$key}>\n";
+ // Some parameters here may be arrays of values.
+ // Also, the tests expect an empty array to be represented as an empty value.
+ $value = (array) $value;
+ if (count($value) === 0) {
+ // Create an empty value.
+ $value[] = '';
+ }
+
+ foreach ($value as $val) {
+ $xw->startElement($key);
+ $xw->text($val);
+ $xw->fullEndElement();
+ }
}
- $xmlFile .= "</ActivityType>\n";
+ // ActivityType
+ $xw->fullEndElement();
}
- $xmlFile .= "</ActivityTypes>\n";
+ // ActivityTypes
+ $xw->fullEndElement();
}
break;
case 'sequence':
case 'timeline':
if ($setVal) {
- $xmlFile .= "<{$index}>true</{$index}>\n";
+ $xw->startElement($index);
+ $xw->text('true');
+ $xw->fullEndElement();
}
break;
default:
- $xmlFile .= "<{$index}>" . self::encodeXmlString($setVal) . "</{$index}>\n";
+ $xw->startElement($index);
+ $xw->text($setVal);
+ $xw->fullEndElement();
}
}
-
- $xmlFile .= "</ActivitySet>\n";
+ // ActivitySet
+ $xw->fullEndElement();
}
-
- $xmlFile .= "</ActivitySets>\n";
+ // ActivitySets
+ $xw->fullEndElement();
}
if (isset($definition['caseRoles'])) {
- $xmlFile .= "<CaseRoles>\n";
+ $xw->startElement('CaseRoles');
foreach ($definition['caseRoles'] as $values) {
- $xmlFile .= "<RelationshipType>\n";
+ $xw->startElement('RelationshipType');
foreach ($values as $key => $value) {
- $xmlFile .= "<{$key}>" . ($key == 'groups' ? implode(',', array_map(['\CRM_Case_BAO_CaseType', 'encodeXmlString'], (array) $value)) : self::encodeXmlString($value)) . "</{$key}>\n";
+ $xw->startElement($key);
+ if ($key == 'groups') {
+ $xw->text(implode(',', (array) $value));
+ }
+ else {
+ $xw->text($value);
+ }
+ // $key
+ $xw->fullEndElement();
}
- $xmlFile .= "</RelationshipType>\n";
+ // RelationshipType
+ $xw->fullEndElement();
}
- $xmlFile .= "</CaseRoles>\n";
+ // CaseRoles
+ $xw->fullEndElement();
}
if (array_key_exists('restrictActivityAsgmtToCmsUser', $definition)) {
- $xmlFile .= "<RestrictActivityAsgmtToCmsUser>" . $definition['restrictActivityAsgmtToCmsUser'] . "</RestrictActivityAsgmtToCmsUser>\n";
+ $xw->startElement('RestrictActivityAsgmtToCmsUser');
+ $xw->text($definition['restrictActivityAsgmtToCmsUser']);
+ $xw->fullEndElement();
}
-
if (!empty($definition['activityAsgmtGrps'])) {
- $xmlFile .= "<ActivityAsgmtGrps>\n";
+ $xw->startElement('ActivityAsgmtGrps');
foreach ((array) $definition['activityAsgmtGrps'] as $value) {
- $xmlFile .= "<Group>$value</Group>\n";
+ $xw->startElement('Group');
+ $xw->text($value);
+ $xw->fullEndElement();
}
- $xmlFile .= "</ActivityAsgmtGrps>\n";
+ // ActivityAsgmtGrps
+ $xw->fullEndElement();
}
- $xmlFile .= '</CaseType>';
-
- return $xmlFile;
- }
+ // CaseType
+ $xw->fullEndElement();
+ $xw->endDocument();
- /**
- * Ugh. This shouldn't exist. Use a real XML-encoder.
- *
- * Escape a string for use in XML.
- *
- * @param string $str
- * A string which should outputted to XML.
- * @return string
- * @deprecated
- */
- protected static function encodeXmlString($str) {
- // PHP 5.4: return htmlspecialchars($str, ENT_XML1, 'UTF-8')
- if (is_scalar($str)) {
- return htmlspecialchars($str);
- }
- else {
- return NULL;
- }
+ return $xw->outputMemory();
}
/**