3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.3 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2013
37 * This class generates form components for processing a ontribution
40 class CRM_Contribute_Form_ContributionBase
extends CRM_Core_Form
{
43 * the id of the contribution page that we are proceessing
51 * the mode that we are in
59 * the contact id related to a membership
64 public $_membershipContactID;
67 * the values for the contribution db object
75 * the paymentProcessor attributes for this page
80 public $_paymentProcessor;
81 public $_paymentObject = NULL;
84 * The membership block for this page
89 public $_membershipBlock = NULL;
92 * the default values for the form
100 * The params submitted by the form and computed by the app
108 * The fields involved in this contribution page
116 * The billing location id for this contribiution page
124 * Cache the amount to make things easier
158 * the Membership ID for membership renewal
163 public $_membershipId;
166 * Price Set ID, if the new price set method is used
174 * Array of fields for the price set
184 * Function to set variables up before form is built
189 public function preProcess() {
190 $config = CRM_Core_Config
::singleton();
191 $session = CRM_Core_Session
::singleton();
193 // current contribution page id
194 $this->_id
= CRM_Utils_Request
::retrieve('id', 'Positive', $this);
196 $pastContributionID = $session->get('pastContributionID');
197 if (!$pastContributionID) {
198 CRM_Core_Error
::fatal(ts('We can\'t load the requested web page due to an incomplete link. This can be caused by using your browser\'s Back button or by using an incomplete or invalid link.'));
201 CRM_Core_Error
::fatal(ts('An error occurred during form submission. This page requires form data to be submitted for processing and no form data was submitted or processed. We are sorry for any inconvience. Please click <a href=\'%1\'>here</a> to visit the contribution page and re-start the contribution process.', array(1 => CRM_Utils_System
::url('civicrm/contribute/transact', 'reset=1&id=' . $pastContributionID))));
205 $session->set('pastContributionID', $this->_id
);
208 $this->_userID
= $session->get('userID');
210 if ($this->_userID
) {
211 $this->_mid
= CRM_Utils_Request
::retrieve('mid', 'Positive', $this);
213 $membership = new CRM_Member_DAO_Membership();
214 $membership->id
= $this->_mid
;
216 if ($membership->find(TRUE)) {
217 $this->_defaultMemTypeId
= $membership->membership_type_id
;
218 if ($membership->contact_id
!= $this->_userID
) {
219 $employers = CRM_Contact_BAO_Relationship
::getPermissionedEmployer($this->_userID
);
220 if (array_key_exists($membership->contact_id
, $employers)) {
221 $this->_membershipContactID
= $membership->contact_id
;
222 $this->assign('membershipContactID', $this->_membershipContactID
);
223 $this->assign('membershipContactName', $employers[$this->_membershipContactID
]['name']);
226 CRM_Core_Session
::setStatus(ts("Oops. The membership you're trying to renew appears to be invalid. Contact your site administrator if you need assistance. If you continue, you will be issued a new membership."), ts('Membership Invalid'), 'alert');
231 CRM_Core_Session
::setStatus(ts("Oops. The membership you're trying to renew appears to be invalid. Contact your site administrator if you need assistance. If you continue, you will be issued a new membership."), ts('Membership Invalid'), 'alert');
237 // we do not want to display recently viewed items, so turn off
238 $this->assign('displayRecent', FALSE);
239 // Contribution page values are cleared from session, so can't use normal Printer Friendly view.
240 // Use Browser Print instead.
241 $this->assign('browserPrint', TRUE);
244 $this->_action
= CRM_Utils_Request
::retrieve('action', 'String', $this, FALSE, 'add');
245 $this->assign('action', $this->_action
);
248 $this->_mode
= ($this->_action
== 1024) ?
'test' : 'live';
250 $this->_values
= $this->get('values');
251 $this->_fields
= $this->get('fields');
252 $this->_bltID
= $this->get('bltID');
253 $this->_paymentProcessor
= $this->get('paymentProcessor');
254 $this->_priceSetId
= $this->get('priceSetId');
255 $this->_priceSet
= $this->get('priceSet');
257 if (!$this->_values
) {
258 // get all the values from the dao object
259 $this->_values
= array();
260 $this->_fields
= array();
262 CRM_Contribute_BAO_ContributionPage
::setValues($this->_id
, $this->_values
);
264 // check if form is active
265 if (!CRM_Utils_Array
::value('is_active', $this->_values
)) {
266 // form is inactive, die a fatal death
267 CRM_Core_Error
::fatal(ts('The page you requested is currently unavailable.'));
270 // also check for billing informatin
271 // get the billing location type
272 $locationTypes = CRM_Core_PseudoConstant
::locationType();
273 // CRM-8108 remove ts around Billing location type
274 //$this->_bltID = array_search( ts('Billing'), $locationTypes );
275 $this->_bltID
= array_search('Billing', $locationTypes);
276 if (!$this->_bltID
) {
277 CRM_Core_Error
::fatal(ts('Please set a location type of %1', array(1 => 'Billing')));
279 $this->set('bltID', $this->_bltID
);
281 // check for is_monetary status
282 $isMonetary = CRM_Utils_Array
::value('is_monetary', $this->_values
);
283 $isPayLater = CRM_Utils_Array
::value('is_pay_later', $this->_values
);
285 //FIXME: to support multiple payment processors
287 (!$isPayLater || CRM_Utils_Array
::value('payment_processor', $this->_values
))
289 $ppID = CRM_Utils_Array
::value('payment_processor', $this->_values
);
291 CRM_Core_Error
::fatal(ts('A payment processor must be selected for this contribution page (contact the site administrator for assistance).'));
294 $ppIds = explode(CRM_Core_DAO
::VALUE_SEPARATOR
, $ppID);
295 $this->_paymentProcessors
= CRM_Financial_BAO_PaymentProcessor
::getPayments($ppIds, $this->_mode
);
297 $this->set('paymentProcessors', $this->_paymentProcessors
);
299 //set default payment processor
300 if (!empty($this->_paymentProcessors
) && empty($this->_paymentProcessor
)) {
301 foreach ($this->_paymentProcessors
as $ppId => $values) {
302 if ($values['is_default'] == 1 ||
(count($this->_paymentProcessors
) == 1)) {
303 $defaultProcessorId = $ppId;
309 if (isset($defaultProcessorId)) {
310 $this->_paymentProcessor
= CRM_Financial_BAO_PaymentProcessor
::getPayment($defaultProcessorId, $this->_mode
);
311 $this->assign_by_ref('paymentProcessor', $this->_paymentProcessor
);
314 if (!CRM_Utils_System
::isNull($this->_paymentProcessors
)) {
315 foreach ($this->_paymentProcessors
as $eachPaymentProcessor) {
316 // check selected payment processor is active
317 if (empty($eachPaymentProcessor)) {
318 CRM_Core_Error
::fatal(ts('A payment processor configured for this page might be disabled (contact the site administrator for assistance).'));
321 // ensure that processor has a valid config
322 $this->_paymentObject
= &CRM_Core_Payment
::singleton($this->_mode
, $eachPaymentProcessor, $this);
323 $error = $this->_paymentObject
->checkConfig();
324 if (!empty($error)) {
325 CRM_Core_Error
::fatal($error);
333 CRM_Price_BAO_Set
::initSet($this, $this->_id
, 'civicrm_contribution_page');
335 // this avoids getting E_NOTICE errors in php
336 $setNullFields = array(
337 'amount_block_is_active',
338 'honor_block_is_active',
339 'is_allow_other_amount',
342 foreach ($setNullFields as $f) {
343 if (!isset($this->_values
[$f])) {
344 $this->_values
[$f] = NULL;
348 //check if Membership Block is enabled, if Membership Fields are included in profile
349 //get membership section for this contribution page
350 $this->_membershipBlock
= CRM_Member_BAO_Membership
::getMembershipBlock($this->_id
);
351 $this->set('membershipBlock', $this->_membershipBlock
);
353 if ($this->_values
['custom_pre_id']) {
354 $preProfileType = CRM_Core_BAO_UFField
::getProfileType($this->_values
['custom_pre_id']);
357 if ($this->_values
['custom_post_id']) {
358 $postProfileType = CRM_Core_BAO_UFField
::getProfileType($this->_values
['custom_post_id']);
361 if (((isset($postProfileType) && $postProfileType == 'Membership') ||
362 (isset($preProfileType) && $preProfileType == 'Membership')
364 !$this->_membershipBlock
['is_active']
366 CRM_Core_Error
::fatal(ts('This page includes a Profile with Membership fields - but the Membership Block is NOT enabled. Please notify the site administrator.'));
369 $pledgeBlock = CRM_Pledge_BAO_PledgeBlock
::getPledgeBlock($this->_id
);
372 $this->_values
['pledge_block_id'] = CRM_Utils_Array
::value('id', $pledgeBlock);
373 $this->_values
['max_reminders'] = CRM_Utils_Array
::value('max_reminders', $pledgeBlock);
374 $this->_values
['initial_reminder_day'] = CRM_Utils_Array
::value('initial_reminder_day', $pledgeBlock);
375 $this->_values
['additional_reminder_day'] = CRM_Utils_Array
::value('additional_reminder_day', $pledgeBlock);
377 //set pledge id in values
378 $pledgeId = CRM_Utils_Request
::retrieve('pledgeId', 'Positive', $this);
380 //authenticate pledge user for pledge payment.
382 $this->_values
['pledge_id'] = $pledgeId;
384 //lets override w/ pledge campaign.
385 $this->_values
['campaign_id'] = CRM_Core_DAO
::getFieldValue('CRM_Pledge_DAO_Pledge',
389 self
::authenticatePledgeUser();
392 $this->set('values', $this->_values
);
393 $this->set('fields', $this->_fields
);
397 $pcpId = CRM_Utils_Request
::retrieve('pcpId', 'Positive', $this);
399 $pcp = CRM_PCP_BAO_PCP
::handlePcp($pcpId, 'contribute', $this->_values
);
400 $this->_pcpId
= $pcp['pcpId'];
401 $this->_pcpBlock
= $pcp['pcpBlock'];
402 $this->_pcpInfo
= $pcp['pcpInfo'];
405 // Link (button) for users to create their own Personal Campaign page
406 if ($linkText = CRM_PCP_BAO_PCP
::getPcpBlockStatus($this->_id
, 'contribute')) {
407 $linkTextUrl = CRM_Utils_System
::url('civicrm/contribute/campaign',
408 "action=add&reset=1&pageId={$this->_id}&component=contribute",
411 $this->assign('linkTextUrl', $linkTextUrl);
412 $this->assign('linkText', $linkText);
415 //set pledge block if block id is set
416 if (CRM_Utils_Array
::value('pledge_block_id', $this->_values
)) {
417 $this->assign('pledgeBlock', TRUE);
420 // check if one of the (amount , membership) bloks is active or not
421 $this->_membershipBlock
= $this->get('membershipBlock');
423 if (!$this->_values
['amount_block_is_active'] &&
424 !$this->_membershipBlock
['is_active'] &&
427 CRM_Core_Error
::fatal(ts('The requested online contribution page is missing a required Contribution Amount section or Membership section or Price Set. Please check with the site administrator for assistance.'));
430 if ($this->_values
['amount_block_is_active']) {
431 $this->set('amount_block_is_active', $this->_values
['amount_block_is_active']);
434 $this->_contributeMode
= $this->get('contributeMode');
435 $this->assign('contributeMode', $this->_contributeMode
);
437 //assigning is_monetary and is_email_receipt to template
438 $this->assign('is_monetary', $this->_values
['is_monetary']);
439 $this->assign('is_email_receipt', $this->_values
['is_email_receipt']);
440 $this->assign('bltID', $this->_bltID
);
442 //assign cancelSubscription URL to templates
443 $this->assign('cancelSubscriptionUrl',
444 CRM_Utils_Array
::value('cancelSubscriptionUrl', $this->_values
)
447 // assigning title to template in case someone wants to use it, also setting CMS page title
449 $this->assign('title', $this->_pcpInfo
['title']);
450 CRM_Utils_System
::setTitle($this->_pcpInfo
['title']);
453 $this->assign('title', $this->_values
['title']);
454 CRM_Utils_System
::setTitle($this->_values
['title']);
456 $this->_defaults
= array();
458 $this->_amount
= $this->get('amount');
461 $config = CRM_Core_Config
::singleton();
462 $config->defaultCurrency
= CRM_Utils_Array
::value('currency',
464 $config->defaultCurrency
467 //lets allow user to override campaign.
468 $campID = CRM_Utils_Request
::retrieve('campID', 'Positive', $this);
469 if ($campID && CRM_Core_DAO
::getFieldValue('CRM_Campaign_DAO_Campaign', $campID)) {
470 $this->_values
['campaign_id'] = $campID;
473 //do check for cancel recurring and clean db, CRM-7696
474 if (CRM_Utils_Request
::retrieve('cancel', 'Boolean', CRM_Core_DAO
::$_nullObject)) {
475 self
::cancelRecurring();
480 * set the default values
485 function setDefaultValues() {
486 return $this->_defaults
;
490 * assign the minimal set of variables to the template
495 function assignToTemplate() {
496 $name = CRM_Utils_Array
::value('billing_first_name', $this->_params
);
497 if (CRM_Utils_Array
::value('billing_middle_name', $this->_params
)) {
498 $name .= " {$this->_params['billing_middle_name']}";
500 $name .= ' ' . CRM_Utils_Array
::value('billing_last_name', $this->_params
);
502 $this->assign('billingName', $name);
503 $this->set('name', $name);
505 $this->assign('paymentProcessor', $this->_paymentProcessor
);
507 'amount', 'currencyID',
508 'credit_card_type', 'trxn_id', 'amount_level',
511 $config = CRM_Core_Config
::singleton();
512 if (isset($this->_values
['is_recur']) &&
513 CRM_Utils_Array
::value('is_recur', $this->_paymentProcessor
)
515 $this->assign('is_recur_enabled', 1);
516 $vars = array_merge($vars, array(
517 'is_recur', 'frequency_interval', 'frequency_unit',
522 if (in_array('CiviPledge', $config->enableComponents
) &&
523 CRM_Utils_Array
::value('is_pledge', $this->_params
) == 1
525 $this->assign('pledge_enabled', 1);
527 $vars = array_merge($vars, array(
529 'pledge_frequency_interval',
530 'pledge_frequency_unit',
531 'pledge_installments',
535 if (isset($this->_params
['amount_other']) ||
isset($this->_params
['selectMembership'])) {
536 $this->_params
['amount_level'] = '';
539 foreach ($vars as $v) {
540 if (CRM_Utils_Array
::value($v, $this->_params
)) {
541 if ($v == 'frequency_unit' ||
$v == 'pledge_frequency_unit') {
542 $frequencyUnits = CRM_Core_OptionGroup
::values('recur_frequency_units');
543 if (array_key_exists($this->_params
[$v], $frequencyUnits)) {
544 $this->_params
[$v] = $frequencyUnits[$this->_params
[$v]];
547 $this->assign($v, $this->_params
[$v]);
551 // assign the address formatted up for display
552 $addressParts = array(
553 "street_address-{$this->_bltID}",
554 "city-{$this->_bltID}",
555 "postal_code-{$this->_bltID}",
556 "state_province-{$this->_bltID}",
557 "country-{$this->_bltID}",
560 $addressFields = array();
561 foreach ($addressParts as $part) {
562 list($n, $id) = explode('-', $part);
563 $addressFields[$n] = CRM_Utils_Array
::value('billing_' . $part, $this->_params
);
566 $this->assign('address', CRM_Utils_Address
::format($addressFields));
568 if (CRM_Utils_Array
::value('hidden_onbehalf_profile', $this->_params
)) {
569 $this->assign('onBehalfName', $this->_params
['organization_name']);
570 $locTypeId = array_keys($this->_params
['onbehalf_location']['email']);
571 $this->assign('onBehalfEmail', $this->_params
['onbehalf_location']['email'][$locTypeId[0]]['email']);
575 $assignCCInfo = FALSE;
576 if ($this->_amount
> 0.0) {
577 $assignCCInfo = TRUE;
579 elseif (CRM_Utils_array
::value('selectMembership', $this->_params
)) {
580 $memFee = CRM_Core_DAO
::getFieldValue('CRM_Member_DAO_MembershipType', $this->_params
['selectMembership'], 'minimum_fee');
582 $assignCCInfo = TRUE;
586 if ($this->_contributeMode
== 'direct' && $assignCCInfo) {
587 if ($this->_paymentProcessor
&&
588 $this->_paymentProcessor
['payment_type'] & CRM_Core_Payment
::PAYMENT_TYPE_DIRECT_DEBIT
590 $this->assign('payment_type', $this->_paymentProcessor
['payment_type']);
591 $this->assign('account_holder', $this->_params
['account_holder']);
592 $this->assign('bank_identification_number', $this->_params
['bank_identification_number']);
593 $this->assign('bank_name', $this->_params
['bank_name']);
594 $this->assign('bank_account_number', $this->_params
['bank_account_number']);
597 $date = CRM_Utils_Date
::format(CRM_Utils_array
::value('credit_card_exp_date', $this->_params
));
598 $date = CRM_Utils_Date
::mysqlToIso($date);
599 $this->assign('credit_card_exp_date', $date);
600 $this->assign('credit_card_number',
601 CRM_Utils_System
::mungeCreditCard(CRM_Utils_array
::value('credit_card_number', $this->_params
))
606 $this->assign('email',
607 $this->controller
->exportValue('Main', "email-{$this->_bltID}")
610 // also assign the receipt_text
611 if (isset($this->_values
['receipt_text'])) {
612 $this->assign('receipt_text', $this->_values
['receipt_text']);
617 * Function to add the custom fields
622 function buildCustom($id, $name, $viewOnly = FALSE, $onBehalf = FALSE, $fieldTypes = NULL) {
623 $stateCountryMap = array();
626 $contactID = $this->_userID
;
628 // we don't allow conflicting fields to be
629 // configured via profile - CRM 2100
630 $fieldsToIgnore = array(
636 'non_deductible_amount' => 1,
639 'contribution_status_id' => 1,
640 'payment_instrument' => 1,
642 'financial_type' => 1,
646 if ($contactID && CRM_Core_BAO_UFGroup
::filterUFGroups($id, $contactID)) {
647 $fields = CRM_Core_BAO_UFGroup
::getFields($id, FALSE, CRM_Core_Action
::ADD
, NULL, NULL, FALSE,
648 NULL, FALSE, NULL, CRM_Core_Permission
::CREATE
, NULL
652 $fields = CRM_Core_BAO_UFGroup
::getFields($id, FALSE, CRM_Core_Action
::ADD
, NULL, NULL, FALSE,
653 NULL, FALSE, NULL, CRM_Core_Permission
::CREATE
, NULL
658 // unset any email-* fields since we already collect it, CRM-2888
659 foreach (array_keys($fields) as $fieldName) {
660 if (substr($fieldName, 0, 6) == 'email-') {
661 unset($fields[$fieldName]);
665 if (array_intersect_key($fields, $fieldsToIgnore)) {
666 $fields = array_diff_key($fields, $fieldsToIgnore);
667 CRM_Core_Session
::setStatus(ts('Some of the profile fields cannot be configured for this page.'), ts('Warning'), 'alert');
670 $fields = array_diff_assoc($fields, $this->_fields
);
672 CRM_Core_BAO_Address
::checkContactSharedAddressFields($fields, $contactID);
674 foreach ($fields as $key => $field) {
676 isset($field['data_type']) &&
677 $field['data_type'] == 'File' ||
($viewOnly && $field['name'] == 'image_URL')
679 // ignore file upload fields
683 list($prefixName, $index) = CRM_Utils_System
::explode('-', $key, 2);
684 if ($prefixName == 'state_province' ||
$prefixName == 'country' ||
$prefixName == 'county') {
685 if (!array_key_exists($index, $stateCountryMap)) {
686 $stateCountryMap[$index] = array();
688 $stateCountryMap[$index][$prefixName] = $key;
692 if (!empty($fieldTypes) && in_array($field['field_type'], $fieldTypes)) {
693 CRM_Core_BAO_UFGroup
::buildProfile(
696 CRM_Profile_Form
::MODE_CREATE
,
700 $this->_fields
['onbehalf'][$key] = $field;
703 unset($fields[$key]);
707 CRM_Core_BAO_UFGroup
::buildProfile(
710 CRM_Profile_Form
::MODE_CREATE
,
714 $this->_fields
[$key] = $field;
716 if ($field['add_captcha']) {
721 $this->assign($name, $fields);
723 CRM_Core_BAO_Address
::addStateCountryMap($stateCountryMap);
725 if ($addCaptcha && !$viewOnly) {
726 $captcha = CRM_Utils_ReCAPTCHA
::singleton();
727 $captcha->add($this);
728 $this->assign('isCaptcha', TRUE);
734 function checkTemplateFileExists($suffix = NULL) {
736 $templateFile = "CRM/Contribute/Form/Contribution/{$this->_id}/{$this->_name}.{$suffix}tpl";
737 $template = CRM_Core_Form
::getTemplate();
738 if ($template->template_exists($templateFile)) {
739 return $templateFile;
745 function getTemplateFileName() {
746 $fileName = $this->checkTemplateFileExists();
747 return $fileName ?
$fileName : parent
::getTemplateFileName();
750 function overrideExtraTemplateFileName() {
751 $fileName = $this->checkTemplateFileExists('extra.');
752 return $fileName ?
$fileName : parent
::overrideExtraTemplateFileName();
756 * Function to authenticate pledge user during online payment.
762 public function authenticatePledgeUser() {
763 //get the userChecksum and contact id
764 $userChecksum = CRM_Utils_Request
::retrieve('cs', 'String', $this);
765 $contactID = CRM_Utils_Request
::retrieve('cid', 'Positive', $this);
767 //get pledge status and contact id
768 $pledgeValues = array();
769 $pledgeParams = array('id' => $this->_values
['pledge_id']);
770 $returnProperties = array('contact_id', 'status_id');
771 CRM_Core_DAO
::commonRetrieve('CRM_Pledge_DAO_Pledge', $pledgeParams, $pledgeValues, $returnProperties);
774 $allStatus = CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
775 $validStatus = array(array_search('Pending', $allStatus),
776 array_search('In Progress', $allStatus),
777 array_search('Overdue', $allStatus),
781 if ($this->_userID
&&
782 $this->_userID
== $pledgeValues['contact_id']
784 //check for authenticated user.
787 elseif ($userChecksum && $pledgeValues['contact_id']) {
788 //check for anonymous user.
789 $validUser = CRM_Contact_BAO_Contact_Utils
::validChecksum($pledgeValues['contact_id'], $userChecksum);
791 //make sure cid is same as pledge contact id
792 if ($validUser && ($pledgeValues['contact_id'] != $contactID)) {
798 CRM_Core_Error
::fatal(ts("Oops. It looks like you have an incorrect or incomplete link (URL). Please make sure you've copied the entire link, and try again. Contact the site administrator if this error persists."));
801 //check for valid pledge status.
802 if (!in_array($pledgeValues['status_id'], $validStatus)) {
803 CRM_Core_Error
::fatal(ts('Oops. You cannot make a payment for this pledge - pledge status is %1.', array(1 => CRM_Utils_Array
::value($pledgeValues['status_id'], $allStatus))));
808 * In case user cancel recurring contribution,
809 * When we get the control back from payment gate way
810 * lets delete the recurring and related contribution.
813 public function cancelRecurring() {
814 $isCancel = CRM_Utils_Request
::retrieve('cancel', 'Boolean', CRM_Core_DAO
::$_nullObject);
816 $isRecur = CRM_Utils_Request
::retrieve('isRecur', 'Boolean', CRM_Core_DAO
::$_nullObject);
817 $recurId = CRM_Utils_Request
::retrieve('recurId', 'Positive', CRM_Core_DAO
::$_nullObject);
818 //clean db for recurring contribution.
819 if ($isRecur && $recurId) {
820 CRM_Contribute_BAO_ContributionRecur
::deleteRecurContribution($recurId);
822 $contribId = CRM_Utils_Request
::retrieve('contribId', 'Positive', CRM_Core_DAO
::$_nullObject);
824 CRM_Contribute_BAO_Contribution
::deleteContribution($contribId);