Пример #1
0
/**
 * Add or update a Contribution.
 *
 * @param array $params
 *   Input parameters.
 *
 * @throws API_Exception
 * @return array
 *   Api result array
 */
function civicrm_api3_contribution_create(&$params)
{
    $values = array();
    _civicrm_api3_custom_format_params($params, $values, 'Contribution');
    $params = array_merge($params, $values);
    if (!empty($params['id']) && !empty($params['contribution_status_id'])) {
        $error = array();
        //throw error for invalid status change such as setting completed back to pending
        //@todo this sort of validation belongs in the BAO not the API - if it is not an OK
        // action it needs to be blocked there. If it is Ok through a form it needs to be OK through the api
        CRM_Contribute_BAO_Contribution::checkStatusValidation(NULL, $params, $error);
        if (array_key_exists('contribution_status_id', $error)) {
            throw new API_Exception($error['contribution_status_id']);
        }
    }
    if (!empty($params['id']) && !empty($params['financial_type_id'])) {
        $error = array();
        CRM_Contribute_BAO_Contribution::checkFinancialTypeChange($params['financial_type_id'], $params['id'], $error);
        if (array_key_exists('financial_type_id', $error)) {
            throw new API_Exception($error['financial_type_id']);
        }
    }
    _civicrm_api3_contribution_create_legacy_support_45($params);
    // Make sure tax calculation is handled via api.
    $params = CRM_Contribute_BAO_Contribution::checkTaxAmount($params);
    return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Contribution');
}
Пример #2
0
/**
 * Add or update a Contribution.
 *
 * @param array $params
 *   Input parameters.
 *
 * @throws API_Exception
 * @return array
 *   Api result array
 */
function civicrm_api3_contribution_create(&$params)
{
    $values = array();
    _civicrm_api3_custom_format_params($params, $values, 'Contribution');
    $params = array_merge($params, $values);
    if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()) {
        if (empty($params['id'])) {
            $op = CRM_Core_Action::ADD;
        } else {
            if (empty($params['financial_type_id'])) {
                $params['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $params['id'], 'financial_type_id');
            }
            $op = CRM_Core_Action::UPDATE;
        }
        CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types, $op);
        if (!in_array($params['financial_type_id'], array_keys($types))) {
            return civicrm_api3_create_error('You do not have permission to create this contribution');
        }
    }
    if (!empty($params['id']) && !empty($params['contribution_status_id'])) {
        $error = array();
        //throw error for invalid status change such as setting completed back to pending
        //@todo this sort of validation belongs in the BAO not the API - if it is not an OK
        // action it needs to be blocked there. If it is Ok through a form it needs to be OK through the api
        CRM_Contribute_BAO_Contribution::checkStatusValidation(NULL, $params, $error);
        if (array_key_exists('contribution_status_id', $error)) {
            throw new API_Exception($error['contribution_status_id']);
        }
    }
    if (!empty($params['id']) && !empty($params['financial_type_id'])) {
        $error = array();
        CRM_Contribute_BAO_Contribution::checkFinancialTypeChange($params['financial_type_id'], $params['id'], $error);
        if (array_key_exists('financial_type_id', $error)) {
            throw new API_Exception($error['financial_type_id']);
        }
    }
    _civicrm_api3_contribution_create_legacy_support_45($params);
    // Make sure tax calculation is handled via api.
    // @todo this belongs in the BAO NOT the api.
    $params = CRM_Contribute_BAO_Contribution::checkTaxAmount($params);
    return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Contribution');
}