3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
13 * This api exposes CiviCRM Pledge.
15 * @package CiviCRM_APIv3
19 * Create or updates an Pledge.
24 * Array containing 'is_error' to denote success or failure and details of the created pledge
25 * @throws \API_Exception
27 function civicrm_api3_pledge_create($params) {
28 _civicrm_api3_pledge_format_params($params, TRUE);
29 return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__
), $params, 'Pledge');
35 * @param array $params
36 * Array included 'pledge_id' of pledge to delete.
40 function civicrm_api3_pledge_delete($params) {
41 if (CRM_Pledge_BAO_Pledge
::deletePledge($params['id'])) {
42 return civicrm_api3_create_success([
43 'id' => $params['id'],
44 ], $params, 'Pledge', 'delete');
47 return civicrm_api3_create_error('Could not delete pledge');
52 * Adjust metadata for pledge delete action.
54 * @param array $params
56 function _civicrm_api3_pledge_delete_spec(&$params) {
57 // set as not required as pledge_id also acceptable & no either/or std yet
58 $params['id']['api.aliases'] = ['pledge_id'];
62 * Adjust field specification specific to get requests.
64 * @param array $params
66 function _civicrm_api3_pledge_get_spec(&$params) {
67 $params['next_pay_date'] = [
68 'name' => 'next_pay_date',
70 'title' => 'Pledge Made',
74 $params['pledge_is_test']['api.default'] = 0;
75 $params['pledge_financial_type_id']['api.aliases'] = ['contribution_type_id', 'contribution_type'];
80 * Adjust field specification specific to get requests.
82 * @param array $params
84 function _civicrm_api3_pledge_create_spec(&$params) {
86 $required = ['contact_id', 'amount', 'installments', 'start_date', 'financial_type_id'];
87 foreach ($required as $required_field) {
88 $params[$required_field]['api.required'] = 1;
90 // @todo this can come from xml
91 $params['amount']['api.aliases'] = ['pledge_amount'];
92 $params['financial_type_id']['api.aliases'] = ['contribution_type_id', 'contribution_type'];
96 * Retrieve a set of pledges, given a set of input params.
98 * @param array $params
99 * Input parameters. Use interrogate for possible fields.
102 * array of pledges, if error an array with an error id and error message
104 function civicrm_api3_pledge_get($params) {
105 $mode = CRM_Contact_BAO_Query
::MODE_PLEDGE
;
107 list($dao, $query) = _civicrm_api3_get_query_object($params, $mode, 'Pledge');
110 while ($dao->fetch()) {
111 $pledge[$dao->pledge_id
] = $query->store($dao);
114 return civicrm_api3_create_success($pledge, $params, 'Pledge', 'get', $dao);
118 * Set default to not return test params.
120 function _civicrm_api3_pledge_get_defaults() {
121 return ['pledge_test' => 0];
125 * Legacy function to format pledge parameters.
127 * I removed a bunch of stuff no longer required from here but it still needs
129 * take the input parameter list as specified in the data model and
130 * convert it into the same format that we use in QF and BAO object
132 * @param array $values
133 * The reformatted properties that we can use internally.
135 function _civicrm_api3_pledge_format_params(&$values) {
137 // probably most of the below can be removed.... just needs a little more review
138 if (array_key_exists('original_installment_amount', $values)) {
139 $values['installment_amount'] = $values['original_installment_amount'];
140 //it seems it will only create correctly with BOTH installment amount AND pledge_installment_amount set
141 //pledge installment amount required for pledge payments
142 $values['pledge_original_installment_amount'] = $values['original_installment_amount'];
145 if (array_key_exists('pledge_original_installment_amount', $values)) {
146 $values['installment_amount'] = $values['pledge_original_installment_amount'];
149 if (empty($values['id'])) {
150 //at this point both should be the same so unset both if not set - passing in empty
151 //value causes crash rather creating new - do it before next section as null values ignored in 'switch'
152 unset($values['id']);
154 //if you have a single installment when creating & you don't set the pledge status (not a required field) then
155 //status id is left null for pledge payments in BAO
156 // so we are hacking in the addition of the pledge_status_id to pending here
157 if (empty($values['status_id']) && $values['installments'] == 1) {
158 $contributionStatus = CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
159 $values['status_id'] = array_search('Pending', $contributionStatus);
162 if (empty($values['scheduled_date']) && array_key_exists('start_date', $values)) {
163 $values['scheduled_date'] = $values['start_date'];