copyValues($params); if (isset($ids['id'])) { $participantPayment->id = CRM_Utils_Array::value('id', $ids); } else { $participantPayment->find(TRUE); } $participantPayment->save(); if (isset($ids['id'])) { CRM_Utils_Hook::post('edit', 'ParticipantPayment', $ids['id'], $participantPayment); } else { CRM_Utils_Hook::post('create', 'ParticipantPayment', NULL, $participantPayment); } //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 // but if they have a single line item for the contribution we can assume it should refer to the participant line $lineItemCount = CRM_Core_DAO::singleValueQuery("select count(*) FROM civicrm_line_item WHERE contribution_id = %1", array(1 => array($participantPayment->contribution_id, 'Integer'))); if($lineItemCount == 1) { $sql = "UPDATE civicrm_line_item li SET entity_table = 'civicrm_participant', entity_id = %1 WHERE contribution_id = %2 AND entity_table = 'civicrm_contribution'"; CRM_Core_DAO::executeQuery($sql, array(1 => array($participantPayment->participant_id, 'Integer'), 2 => array($participantPayment->contribution_id, 'Integer'))); } return $participantPayment; } /** * Delete the record that are associated with this ParticipantPayment * Also deletes the associated contribution for this participant * * @param array $params associative array whose values match the record to be deleted * * @return boolean true if deleted false otherwise * @static * @access public */ static function deleteParticipantPayment($params) { $participantPayment = new CRM_Event_DAO_ParticipantPayment(); $valid = FALSE; foreach ($params as $field => $value) { if (!empty($value)) { $participantPayment->$field = $value; $valid = TRUE; } } if (!$valid) { CRM_Core_Error::fatal(); } if ($participantPayment->find(TRUE)) { CRM_Utils_Hook::pre('delete', 'ParticipantPayment', $participantPayment->id, $params); CRM_Contribute_BAO_Contribution::deleteContribution($participantPayment->contribution_id); $participantPayment->delete(); CRM_Utils_Hook::post('delete', 'ParticipantPayment', $participantPayment->id, $participantPayment); return $participantPayment; } return FALSE; } }