X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCase%2FBAO%2FCaseType.php;h=e10c70da07e0e4140184a370362809b9d421e542;hb=e3e3ff161be006a55841e97fb57166b2fa56d04e;hp=9937c562725762eb7c808959839df937908c9116;hpb=e2261dcb3aa0ba7e093ed3ae4fc767ed9c931cb8;p=civicrm-core.git diff --git a/CRM/Case/BAO/CaseType.php b/CRM/Case/BAO/CaseType.php index 9937c56272..e10c70da07 100644 --- a/CRM/Case/BAO/CaseType.php +++ b/CRM/Case/BAO/CaseType.php @@ -96,50 +96,87 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { * XML */ public static function convertDefinitionToXML($name, $definition) { - $xmlFile = '' . "\n\n\n"; - $xmlFile .= "" . self::encodeXmlString($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 .= "" . ((int) $definition['forkable']) . "\n"; + $xw->startElement('forkable'); + $xw->text((int) $definition['forkable']); + $xw->fullEndElement(); } if (isset($definition['activityTypes'])) { - $xmlFile .= "\n"; + $xw->startElement('ActivityTypes'); + foreach ($definition['activityTypes'] as $values) { - $xmlFile .= "\n"; + $xw->startElement('ActivityType'); foreach ($values as $key => $value) { - $xmlFile .= "<{$key}>" . self::encodeXmlString($value) . "\n"; + $xw->startElement($key); + $xw->text($value); + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // ActivityType + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // ActivityTypes + $xw->fullEndElement(); } if (!empty($definition['statuses'])) { - $xmlFile .= "\n"; + $xw->startElement('Statuses'); + foreach ($definition['statuses'] as $value) { - $xmlFile .= "$value\n"; + $xw->startElement('Status'); + $xw->text($value); + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // Statuses + $xw->fullEndElement(); } if (isset($definition['activitySets'])) { - $xmlFile .= "\n"; + + $xw->startElement('ActivitySets'); foreach ($definition['activitySets'] as $k => $val) { - $xmlFile .= "\n"; + + $xw->startElement('ActivitySet'); foreach ($val as $index => $setVal) { switch ($index) { case 'activityTypes': if (!empty($setVal)) { - $xmlFile .= "\n"; + $xw->startElement('ActivityTypes'); foreach ($setVal as $values) { - $xmlFile .= "\n"; + $xw->startElement('ActivityType'); foreach ($values as $key => $value) { - $xmlFile .= "<{$key}>" . self::encodeXmlString($value) . "\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 .= "\n"; + // ActivityType + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // ActivityTypes + $xw->fullEndElement(); } break; @@ -147,68 +184,68 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { case 'sequence': case 'timeline': if ($setVal) { - $xmlFile .= "<{$index}>true\n"; + $xw->startElement($index); + $xw->text('true'); + $xw->fullEndElement(); } break; default: - $xmlFile .= "<{$index}>" . self::encodeXmlString($setVal) . "\n"; + $xw->startElement($index); + $xw->text($setVal); + $xw->fullEndElement(); } } - - $xmlFile .= "\n"; + // ActivitySet + $xw->fullEndElement(); } - - $xmlFile .= "\n"; + // ActivitySets + $xw->fullEndElement(); } if (isset($definition['caseRoles'])) { - $xmlFile .= "\n"; + $xw->startElement('CaseRoles'); foreach ($definition['caseRoles'] as $values) { - $xmlFile .= "\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)) . "\n"; + $xw->startElement($key); + if ($key == 'groups') { + $xw->text(implode(',', (array) $value)); + } + else { + $xw->text($value); + } + // $key + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // RelationshipType + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // CaseRoles + $xw->fullEndElement(); } if (array_key_exists('restrictActivityAsgmtToCmsUser', $definition)) { - $xmlFile .= "" . $definition['restrictActivityAsgmtToCmsUser'] . "\n"; + $xw->startElement('RestrictActivityAsgmtToCmsUser'); + $xw->text($definition['restrictActivityAsgmtToCmsUser']); + $xw->fullEndElement(); } - if (!empty($definition['activityAsgmtGrps'])) { - $xmlFile .= "\n"; + $xw->startElement('ActivityAsgmtGrps'); foreach ((array) $definition['activityAsgmtGrps'] as $value) { - $xmlFile .= "$value\n"; + $xw->startElement('Group'); + $xw->text($value); + $xw->fullEndElement(); } - $xmlFile .= "\n"; + // ActivityAsgmtGrps + $xw->fullEndElement(); } - $xmlFile .= ''; - - 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(); } /**