From: Tim Otten Date: Wed, 28 May 2014 04:34:48 +0000 (-0700) Subject: api/v3/CaseType - Fix generation of 'definition' when handling multiple case-types X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=93d474629ae9c7423c9fcb22924348787a2d5850;p=civicrm-core.git api/v3/CaseType - Fix generation of 'definition' when handling multiple case-types --- diff --git a/CRM/Case/BAO/CaseType.php b/CRM/Case/BAO/CaseType.php index cc1b36a300..275a643409 100644 --- a/CRM/Case/BAO/CaseType.php +++ b/CRM/Case/BAO/CaseType.php @@ -145,26 +145,26 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { /** * Function to get the case definition either from db or read from xml file * - * @param $caseType associated array + * @param $caseType a single case-type record * - * @return mixed + * @return array the definition of the case-type, expressed as PHP array-tree * @static */ - static function getCaseTypeDefinition(&$caseType) { + static function getCaseTypeDefinition($caseType) { // check if case type definition is saved in DB - if (!empty($caseType['values'][0]['definition'])) { - $xml = simplexml_load_string($caseType['values'][0]['definition']); + if (!empty($caseType['definition'])) { + $xml = simplexml_load_string($caseType['definition']); } else { - $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseType['values'][0]['name']); + $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseType['name']); } - // unset case definition - $caseType['values'][0]['definition'] = array(); + // build PHP array based on definition + $definition = array(); // set activity types $activityTypes = json_decode(json_encode($xml->ActivityTypes), TRUE); - $caseType['values'][0]['definition']['activityTypes'] = $activityTypes['ActivityType']; + $definition['activityTypes'] = $activityTypes['ActivityType']; // set activity sets $activitySets = json_decode(json_encode($xml->ActivitySets), TRUE); @@ -178,19 +178,19 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { foreach ($activitySets['ActivitySet'] as $key => $value) { foreach ($value as $k => $val) { if ( $k == 'ActivityTypes') { - $caseType['values'][0]['definition']['activitySets'][$key]['activityTypes'] = array_pop(array_values($val)); + $definition['activitySets'][$key]['activityTypes'] = array_pop(array_values($val)); } else { - $caseType['values'][0]['definition']['activitySets'][$key][$k] = $val; + $definition['activitySets'][$key][$k] = $val; } } } // set case roles $caseRoles = json_decode(json_encode($xml->CaseRoles), TRUE); - $caseType['values'][0]['definition']['caseRoles'] = $caseRoles['RelationshipType']; + $definition['caseRoles'] = $caseRoles['RelationshipType']; - return $caseType; + return $definition; } /** diff --git a/api/v3/CaseType.php b/api/v3/CaseType.php index 2965dca387..75f0c626f1 100644 --- a/api/v3/CaseType.php +++ b/api/v3/CaseType.php @@ -81,8 +81,12 @@ function civicrm_api3_case_type_get($params) { * @param $caseTypes * @return mixed */ -function _civicrm_api3_case_type_get_formatResult(&$caseTypes) { - return CRM_Case_BAO_CaseType::getCaseTypeDefinition($caseTypes); +function _civicrm_api3_case_type_get_formatResult(&$result) { + foreach ($result['values'] as $key => $caseType) { + $definition = CRM_Case_BAO_CaseType::getCaseTypeDefinition($caseType); + $result['values'][$key]['definition'] = $definition; + } + return $result; } /**