From 492121d2083a8732727fdf7ab3f23a5ccbdedeb0 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Wed, 8 Mar 2017 12:17:23 -0500 Subject: [PATCH] More efficient loading of case type definition Don't re-fetch info from the database if we already have it. --- api/v3/CaseType.php | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/api/v3/CaseType.php b/api/v3/CaseType.php index 67aaf9585e..36b011e325 100644 --- a/api/v3/CaseType.php +++ b/api/v3/CaseType.php @@ -51,7 +51,7 @@ function civicrm_api3_case_type_create($params) { $params['is_active'] = TRUE; } // This is an existing case-type. - if (!empty($params['id']) + if (!empty($params['id']) && isset($params['definition']) && !CRM_Case_BAO_CaseType::isForked($params['id']) // which is not yet forked && !CRM_Case_BAO_CaseType::isForkable($params['id']) // for which new forks are prohibited ) { @@ -75,29 +75,34 @@ function civicrm_api3_case_type_get($params) { } $caseTypes = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); // format case type, to fetch xml definition - return _civicrm_api3_case_type_get_formatResult($caseTypes); + $options = _civicrm_api3_get_options_from_params($params); + return _civicrm_api3_case_type_get_formatResult($caseTypes, $options); } /** * Format definition. * * @param array $result + * @param array $options * * @return array * @throws \CRM_Core_Exception */ -function _civicrm_api3_case_type_get_formatResult(&$result) { - foreach ($result['values'] as $key => $caseType) { - $caseTypeName = (isset($caseType['name'])) ? $caseType['name'] : CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $caseType['id'], 'name', 'id', TRUE); - $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseTypeName); - if ($xml) { - $result['values'][$key]['definition'] = CRM_Case_BAO_CaseType::convertXmlToDefinition($xml); +function _civicrm_api3_case_type_get_formatResult(&$result, $options = array()) { + foreach ($result['values'] as $key => &$caseType) { + if (!empty($caseType['definition'])) { + list($xml) = CRM_Utils_XML::parseString($caseType['definition']); + $caseType['definition'] = $xml ? CRM_Case_BAO_CaseType::convertXmlToDefinition($xml) : array(); } else { - $result['values'][$key]['definition'] = array(); + if (empty($options['return']) || !empty($options['return']['definition'])) { + $caseTypeName = (isset($caseType['name'])) ? $caseType['name'] : CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $caseType['id'], 'name', 'id', TRUE); + $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseTypeName); + $caseType['definition'] = $xml ? CRM_Case_BAO_CaseType::convertXmlToDefinition($xml) : array(); + } } - $result['values'][$key]['is_forkable'] = CRM_Case_BAO_CaseType::isForkable($result['values'][$key]['id']); - $result['values'][$key]['is_forked'] = CRM_Case_BAO_CaseType::isForked($result['values'][$key]['id']); + $caseType['is_forkable'] = CRM_Case_BAO_CaseType::isForkable($caseType['id']); + $caseType['is_forked'] = CRM_Case_BAO_CaseType::isForked($caseType['id']); } return $result; } -- 2.25.1