- $ids = $input = [];
- $this->_component = $input['component'] = self::getValue('m');
- $input['invoice'] = self::getValue('i', TRUE);
- // get the contribution and contact ids from the GET params
- $ids['contact'] = self::getValue('c', TRUE);
- $ids['contribution'] = self::getValue('b', TRUE);
-
- $this->getInput($input);
-
- if ($this->_component == 'event') {
- $ids['event'] = self::getValue('e', TRUE);
- $ids['participant'] = self::getValue('p', TRUE);
- $ids['contributionRecur'] = self::getValue('r', FALSE);
- }
- else {
- // get the optional ids
- //@ how can this not be broken retrieving from GET as we are dealing with a POST request?
- // copy & paste? Note the retrieve function now uses data from _REQUEST so this will be included
- $ids['membership'] = self::retrieve('membershipID', 'Integer', 'GET', FALSE);
- $ids['contributionRecur'] = self::getValue('r', FALSE);
- $ids['contributionPage'] = self::getValue('p', FALSE);
- $ids['related_contact'] = self::retrieve('relatedContactID', 'Integer', 'GET', FALSE);
- $ids['onbehalf_dupe_alert'] = self::retrieve('onBehalfDupeAlert', 'Integer', 'GET', FALSE);
- }
-
- if (!$ids['membership'] && $ids['contributionRecur']) {
- $sql = "
- SELECT m.id
- FROM civicrm_membership m
-INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contribution_id = %1
- WHERE m.contribution_recur_id = %2
- LIMIT 1";
- $sqlParams = [
- 1 => [$ids['contribution'], 'Integer'],
- 2 => [$ids['contributionRecur'], 'Integer'],
- ];
- if ($membershipId = CRM_Core_DAO::singleValueQuery($sql, $sqlParams)) {
- $ids['membership'] = $membershipId;
- }
- }
-
- $paymentProcessorID = CRM_Utils_Array::value('processor_id', $this->_inputParameters);
- if (!$paymentProcessorID) {
- $paymentProcessorID = self::getPayPalPaymentProcessorID();
- }
-
- // Check if the contribution exists
- // make sure contribution exists and is valid
- $contribution = new CRM_Contribute_BAO_Contribution();
- $contribution->id = $ids['contribution'];
- if (!$contribution->find(TRUE)) {
- throw new CRM_Core_Exception('Failure: Could not find contribution record for ' . (int) $contribution->id, NULL, ['context' => "Could not find contribution record: {$contribution->id} in IPN request: " . print_r($input, TRUE)]);