/** * Open a new case, add client and manager roles, and add standard timeline * * @param array( //REQUIRED: * 'case_type_id' => int OR * 'case_type' => str (provide one or the other) * 'contact_id' => int // case client * 'subject' => str * * //OPTIONAL * 'medium_id' => int // see civicrm option values for possibilities * 'creator_id' => int // case manager, default to the logged in user * 'status_id' => int // defaults to 1 "ongoing" * 'location' => str * 'start_date' => str datestamp // defaults to: date('YmdHis') * 'duration' => int // in minutes * 'details' => str // html format * * @return sucessfully opened case * * @access public * {@getfields case_create} */ function civicrm_api3_case_create($params) { if (!empty($params['id'])) { return civicrm_api3_case_update($params); } civicrm_api3_verify_mandatory($params, NULL, array('contact_id', 'subject', array('case_type', 'case_type_id'))); _civicrm_api3_case_format_params($params); // If format_params didn't find what it was looking for, return error if (empty($params['case_type_id'])) { return civicrm_api3_create_error('Invalid case_type. No such case type exists.'); } if (empty($params['case_type'])) { return civicrm_api3_create_error('Invalid case_type_id. No such case type exists.'); } // Fixme: can we safely pass raw params to the BAO? $newParams = array('case_type_id' => $params['case_type_id'], 'creator_id' => $params['creator_id'], 'status_id' => $params['status_id'], 'start_date' => $params['start_date'], 'end_date' => CRM_Utils_Array::value('end_date', $params), 'subject' => $params['subject']); $caseBAO = CRM_Case_BAO_Case::create($newParams); if (!$caseBAO) { return civicrm_api3_create_error('Case not created. Please check input params.'); } foreach ((array) $params['contact_id'] as $cid) { $contactParams = array('case_id' => $caseBAO->id, 'contact_id' => $cid); CRM_Case_BAO_Case::addCaseToContact($contactParams); } // Initialize XML processor with $params $xmlProcessor = new CRM_Case_XMLProcessor_Process(); $xmlProcessorParams = array('clientID' => $params['contact_id'], 'creatorID' => $params['creator_id'], 'standardTimeline' => 1, 'activityTypeName' => 'Open Case', 'caseID' => $caseBAO->id, 'subject' => $params['subject'], 'location' => CRM_Utils_Array::value('location', $params), 'activity_date_time' => $params['start_date'], 'duration' => CRM_Utils_Array::value('duration', $params), 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'details' => CRM_Utils_Array::value('details', $params), 'custom' => array()); // Do it! :-D $xmlProcessor->run($params['case_type'], $xmlProcessorParams); // return case $values = array(); _civicrm_api3_object_to_array($caseBAO, $values[$caseBAO->id]); return civicrm_api3_create_success($values, $params, 'case', 'create', $caseBAO); }
/** * Open a new case, add client and manager roles, and add standard timeline * * @param array( //REQUIRED: * 'case_type_id' => int OR * 'case_type' => str (provide one or the other) * 'contact_id' => int // case client * 'subject' => str * * //OPTIONAL * 'medium_id' => int // see civicrm option values for possibilities * 'creator_id' => int // case manager, default to the logged in user * 'status_id' => int // defaults to 1 "ongoing" * 'location' => str * 'start_date' => str datestamp // defaults to: date('YmdHis') * 'duration' => int // in minutes * 'details' => str // html format * * @return sucessfully opened case * * @access public * {@getfields case_create} */ function civicrm_api3_case_create($params) { if (empty($params['contact_id']) && isset($params['client_id'])) { $params['contact_id'] = $params['client_id']; } if (isset($params['id']) || isset($params['case_id'])) { return _api_case_update($params); } // ongoing if (!CRM_Utils_Array::value('status_id', $params)) { $params['status_id'] = 1; } if (!array_key_exists('creator_id', $params)) { $session = CRM_Core_Session::singleton(); $params['creator_id'] = $session->get('userID'); } //check parameters $errors = _civicrm_api3_case_check_params($params, 'create'); if ($errors) { return $errors; } _civicrm_api3_case_format_params($params, 'create'); // If format_params didn't find what it was looking for, return error if (empty($params['case_type_id'])) { return civicrm_api3_create_error('Invalid case_type. No such case type exists.'); } if (empty($params['case_type'])) { return civicrm_api3_create_error('Invalid case_type_id. No such case type exists.'); } // format input with value separators $sep = CRM_Core_DAO::VALUE_SEPARATOR; $newParams = array('case_type_id' => $sep . $params['case_type_id'] . $sep, 'creator_id' => $params['creator_id'], 'status_id' => $params['status_id'], 'start_date' => $params['start_date'], 'subject' => $params['subject']); $caseBAO = CRM_Case_BAO_Case::create($newParams); if (!$caseBAO) { return civicrm_api3_create_error('Case not created. Please check input params.'); } foreach ((array) $params['contact_id'] as $cid) { $contactParams = array('case_id' => $caseBAO->id, 'contact_id' => $cid); CRM_Case_BAO_Case::addCaseToContact($contactParams); } // Initialize XML processor with $params require_once 'CRM/Case/XMLProcessor/Process.php'; $xmlProcessor = new CRM_Case_XMLProcessor_Process(); $xmlProcessorParams = array('clientID' => $params['contact_id'], 'creatorID' => $params['creator_id'], 'standardTimeline' => 1, 'activityTypeName' => 'Open Case', 'caseID' => $caseBAO->id, 'subject' => $params['subject'], 'location' => CRM_Utils_Array::value('location', $params), 'activity_date_time' => $params['start_date'], 'duration' => CRM_Utils_Array::value('duration', $params), 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'details' => CRM_Utils_Array::value('details', $params), 'custom' => array()); // Do it! :-D $xmlProcessor->run($params['case_type'], $xmlProcessorParams); // return case $values = array(); _civicrm_api3_object_to_array($caseBAO, $values[$caseBAO->id]); return civicrm_api3_create_success($values, $params, 'case', 'create', $caseBAO); }