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 +--------------------------------------------------------------------+
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
20 class CRM_Event_BAO_ParticipantPayment
extends CRM_Event_DAO_ParticipantPayment
{
23 * Creates or updates a participant payment record.
25 * @param array $params
26 * of values to initialize the record with.
31 * the partcipant payment record
33 public static function create(&$params, $ids = []) {
34 $id = CRM_Utils_Array
::value('id', $params, CRM_Utils_Array
::value('id', $ids));
36 CRM_Utils_Hook
::pre('edit', 'ParticipantPayment', $id, $params);
39 CRM_Utils_Hook
::pre('create', 'ParticipantPayment', NULL, $params);
42 $participantPayment = new CRM_Event_BAO_ParticipantPayment();
43 $participantPayment->copyValues($params);
45 $participantPayment->id
= $id;
48 $participantPayment->find(TRUE);
50 $participantPayment->save();
52 if (empty($participantPayment->contribution_id
)) {
53 // For an id update contribution_id may be unknown. We want it
54 // further down so perhaps get it before the hooks.
55 $participantPayment->find(TRUE);
58 CRM_Utils_Hook
::post('edit', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
61 CRM_Utils_Hook
::post('create', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
64 //generally if people are creating participant_payments via the api they won't be setting the line item correctly - we can't help them if they are doing complex transactions
65 // but if they have a single line item for the contribution we can assume it should refer to the participant line
66 $lineItemCount = CRM_Core_DAO
::singleValueQuery("select count(*) FROM civicrm_line_item WHERE contribution_id = %1", [
68 $participantPayment->contribution_id
,
72 if ($lineItemCount == 1) {
73 $sql = "UPDATE civicrm_line_item li
74 SET entity_table = 'civicrm_participant', entity_id = %1
75 WHERE contribution_id = %2 AND entity_table = 'civicrm_contribution'";
76 CRM_Core_DAO
::executeQuery($sql, [
77 1 => [$participantPayment->participant_id
, 'Integer'],
78 2 => [$participantPayment->contribution_id
, 'Integer'],
82 return $participantPayment;
86 * Delete the record that are associated with this ParticipantPayment.
87 * Also deletes the associated contribution for this participant
89 * @param array $params
90 * Associative array whose values match the record to be deleted.
93 * true if deleted false otherwise
95 public static function deleteParticipantPayment($params) {
96 $participantPayment = new CRM_Event_DAO_ParticipantPayment();
99 foreach ($params as $field => $value) {
100 if (!empty($value)) {
101 $participantPayment->$field = $value;
107 CRM_Core_Error
::fatal();
110 if ($participantPayment->find(TRUE)) {
111 CRM_Utils_Hook
::pre('delete', 'ParticipantPayment', $participantPayment->id
, $params);
112 CRM_Contribute_BAO_Contribution
::deleteContribution($participantPayment->contribution_id
);
113 $participantPayment->delete();
114 CRM_Utils_Hook
::post('delete', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
115 return $participantPayment;