Merge remote-tracking branch 'MarcMichalsky/improve_api_result_values'

This commit is contained in:
Jens Schuppe 2024-06-13 13:38:43 +02:00
commit 9ff9234644

View file

@ -526,7 +526,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
// If usage of double opt-in is selected, use MailingEventSubscribe.create // If usage of double opt-in is selected, use MailingEventSubscribe.create
// to add contact to newsletter groups defined in the profile // to add contact to newsletter groups defined in the profile
$result_values['newsletter']['newsletter_double_opt_in'] $result_values['newsletter_double_opt_in']
= (bool) $profile->getAttribute('newsletter_double_opt_in') = (bool) $profile->getAttribute('newsletter_double_opt_in')
? 'true' ? 'true'
: 'false'; : 'false';
@ -535,6 +535,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
&& (bool) ($params['newsletter'] ?? FALSE) && (bool) ($params['newsletter'] ?? FALSE)
&& is_array($groups = $profile->getAttribute('newsletter_groups')) && is_array($groups = $profile->getAttribute('newsletter_groups'))
) { ) {
// TODO: Ensure the values being integers.
$group_memberships = array_column( $group_memberships = array_column(
civicrm_api3( civicrm_api3(
'GroupContact', 'GroupContact',
@ -555,7 +556,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
] ]
)['visibility'] == 'Public Pages'; )['visibility'] == 'Public Pages';
if (!in_array($group_id, $group_memberships, FALSE) && $is_public_group) { if (!in_array($group_id, $group_memberships, FALSE) && $is_public_group) {
$result_values['newsletter'][][$group_id] = civicrm_api3( $result = civicrm_api3(
'MailingEventSubscribe', 'MailingEventSubscribe',
'create', 'create',
[ [
@ -564,9 +565,12 @@ function civicrm_api3_twingle_donation_Submit($params) {
'contact_id' => $contact_id, 'contact_id' => $contact_id,
] ]
); );
$subscription = reset($result['values']);
$subscription['group_id'] = $group_id;
$result_values['newsletter_subscriptions'][] = $subscription;
} }
elseif ($is_public_group) { elseif ($is_public_group) {
$result_values['newsletter'][] = $group_id; $result_values['newsletter_group_ids'][] = $group_id;
} }
} }
// If requested, add contact to newsletter groups defined in the profile. // If requested, add contact to newsletter groups defined in the profile.
@ -584,8 +588,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
'contact_id' => $contact_id, 'contact_id' => $contact_id,
] ]
); );
$result_values['newsletter_group_ids'][] = $group_id;
$result_values['newsletter'][] = $group_id;
} }
} }
@ -616,8 +619,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
'group_id' => $group_id, 'group_id' => $group_id,
'contact_id' => $organisation_id ?? $contact_id, 'contact_id' => $organisation_id ?? $contact_id,
]); ]);
$result_values['donation_receipt_group_ids'][] = $group_id;
$result_values['donation_receipt'][] = $group_id;
} }
} }
@ -724,7 +726,7 @@ function civicrm_api3_twingle_donation_Submit($params) {
// Create the mandate. // Create the mandate.
$mandate = civicrm_api3('SepaMandate', 'createfull', $mandate_data); $mandate = civicrm_api3('SepaMandate', 'createfull', $mandate_data);
$result_values['sepa_mandate'] = $mandate['values']; $result_values['sepa_mandate'] = reset($mandate['values']);
} }
else { else {
// Set financial type depending on donation rhythm. This applies for // Set financial type depending on donation rhythm. This applies for
@ -797,12 +799,15 @@ function civicrm_api3_twingle_donation_Submit($params) {
} }
$contribution = civicrm_api3('Contribution', 'create', $contribution_data); $contribution = civicrm_api3('Contribution', 'create', $contribution_data);
if ($contribution['is_error']) { /** @phpstan-var array{'values': array<int, array<mixed>>, 'is_error'?: string} $contribution */
if ((bool) ($contribution['is_error'] ?? FALSE)) {
throw new CRM_Core_Exception( throw new CRM_Core_Exception(
E::ts('Could not create contribution'), E::ts('Could not create contribution'),
'api_error' 'api_error'
); );
} }
$contribution = reset($contribution['values']);
/** @phpstan-var array{'id': int} $contribution */
// Add notes to the contribution. // Add notes to the contribution.
/** @phpstan-var array<string> $contribution_note_mappings */ /** @phpstan-var array<string> $contribution_note_mappings */
@ -815,13 +820,13 @@ function civicrm_api3_twingle_donation_Submit($params) {
) { ) {
Note::create(FALSE) Note::create(FALSE)
->addValue('entity_table', 'civicrm_contribution') ->addValue('entity_table', 'civicrm_contribution')
->addValue('entity_id', reset($contribution['values'])['id']) ->addValue('entity_id', $contribution['id'])
->addValue('note', $params[$target]) ->addValue('note', $params[$target])
->execute(); ->execute();
} }
} }
$result_values['contribution'] = $contribution['values']; $result_values['contribution'] = $contribution;
} }
// MEMBERSHIP CREATION // MEMBERSHIP CREATION