Merge pull request #4819 from eileenmcnaughton/CRM-15680
[civicrm-core.git] / api / v3 / CaseType.php
index d046c5a20cf4f5245a8f979c591cec84dd4bea26..d30af7c13947e49ce82170929c3ae5a4816f938c 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
   +--------------------------------------------------------------------+
-  | CiviCRM version 4.5                                                |
+  | CiviCRM version 4.6                                                |
   +--------------------------------------------------------------------+
   | Copyright CiviCRM LLC (c) 2004-2014                                |
   +--------------------------------------------------------------------+
@@ -36,7 +36,7 @@
  */
 
 /**
- * Function to create or update case type
+ * create or update case type
  *
  * @param  array $params   input parameters
  *
  */
 function civicrm_api3_case_type_create($params) {
   civicrm_api3_verify_mandatory($params, _civicrm_api3_get_DAO(__FUNCTION__));
+  unset($params['is_forkable']); // computed property
+  unset($params['is_forked']); // computed property
 
   if (!array_key_exists('is_active', $params) && empty($params['id'])) {
     $params['is_active'] = TRUE;
   }
-  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'CaseType');
-
+  if (!empty($params['id']) // this is an existing case-type
+    && !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
+  ) {
+    unset($params['definition']);
+  }
+  $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'CaseType');
+  return _civicrm_api3_case_type_get_formatResult($result);
 }
 
 /**
- * Function to retrieve case types
+ * retrieve case types
  *
- * @param $params
+ * @param array $params
  *
  * @return array $caseTypes case types keyed by id
  * @access public
  */
 function civicrm_api3_case_type_get($params) {
-  civicrm_api3_verify_mandatory($params);
+  if (!empty($params['options']) && !empty($params['options']['is_count'])) {
+    return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $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);
 }
 
 /**
- * Function to format definition
+ * format definition
  *
  * @param $caseTypes
  * @return mixed
  */
 function _civicrm_api3_case_type_get_formatResult(&$result) {
   foreach ($result['values'] as $key => $caseType) {
-    $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseType['name']);
+    $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);
     } else {
       $result['values'][$key]['definition'] = 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']);
   }
   return $result;
 }