function civicrm_api3_civi_outlook_createnewcase($params)
{
    $customCiviParams = array('sequential' => 1);
    $caseTypes = CRM_Case_PseudoConstant::caseType('title', TRUE);
    $caseStatuses = CRM_Case_PseudoConstant::caseStatus('label', TRUE);
    /**
     * Hack for the error - "creator id is not of type int" Native API throws this error
     * http://civicrm.stackexchange.com/questions/2727/why-doesnt-creating-a-case-from-api-work
     */
    if (CRM_Utils_Array::value("api_key", $_REQUEST)) {
        $source_contact_id = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $_REQUEST['api_key'], 'id', 'api_key');
        $params['creator_id'] = $customCiviParams['creator_id'] = intval($source_contact_id);
    }
    if (CRM_Utils_Array::value("case_type_name", $params)) {
        $customCiviParams['case_type_id'] = array_search($params['case_type_name'], $caseTypes);
    }
    if (CRM_Utils_Array::value("details", $params)) {
        $customCiviParams['details'] = $params['details'];
    }
    if (CRM_Utils_Array::value("subject", $params)) {
        $customCiviParams['subject'] = $params['subject'];
    }
    if (CRM_Utils_Array::value("start_date", $params)) {
        $customCiviParams['start_date'] = $params['start_date'];
    }
    if (CRM_Utils_Array::value("status_name", $params)) {
        $customCiviParams['status_id'] = array_search($params['status_name'], $caseStatuses);
    }
    if (CRM_Utils_Array::value("contact_id", $params)) {
        $customCiviParams['contact_id'] = $params['contact_id'];
    }
    $result = outlook_civicrm_api3('Case', 'create', $customCiviParams, 'CiviOutlook', 'createnewcase', $params);
    $finalArray = array();
    foreach ($result as $key => $value) {
        foreach ($value as $k => $v) {
            $finalArray['case_' . $k] = $v;
        }
    }
    return civicrm_api3_create_success($finalArray, $params);
}
function civicrm_api3_civi_outlook_createnewcase($params)
{
    $customCiviParams = array('sequential' => 1);
    $caseTypes = CRM_Case_PseudoConstant::caseType('title', FALSE);
    $caseStatuses = CRM_Case_PseudoConstant::caseStatus('label', FALSE);
    if (CRM_Utils_Array::value("case_type_name", $params)) {
        $customCiviParams['case_type_id'] = array_search($params['case_type_name'], $caseTypes);
    }
    if (CRM_Utils_Array::value("details", $params)) {
        $customCiviParams['details'] = $params['details'];
    }
    if (CRM_Utils_Array::value("subject", $params)) {
        $customCiviParams['subject'] = $params['subject'];
    }
    if (CRM_Utils_Array::value("start_date", $params)) {
        $customCiviParams['start_date'] = $params['start_date'];
    }
    if (CRM_Utils_Array::value("status_name", $params)) {
        $customCiviParams['status_id'] = array_search($params['status_name'], $caseStatuses);
    }
    if (CRM_Utils_Array::value("contact_id", $params)) {
        $customCiviParams['contact_id'] = $params['contact_id'];
    }
    $result = outlook_civicrm_api3('Case', 'create', $customCiviParams, 'CiviOutlook', 'createnewcase', $params);
    $finalArray = array();
    foreach ($result as $key => $value) {
        foreach ($value as $k => $v) {
            $finalArray['case_' . $k] = $v;
        }
    }
    return civicrm_api3_create_success($finalArray, $params);
}