X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FForm%2FContribution%2FConfirm.php;h=3a04db6af6c5c84dd96204732be2bb322e770331;hb=e612dc821894de0df124892584a5f52d44f5297a;hp=1c294494a51983e7777643c33c20f2c57e215ffe;hpb=9cc8b9b246a371b9621a8279545258073fbd0e48;p=civicrm-core.git diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 1c294494a5..3a04db6af6 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -118,7 +118,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr 'address_id' => $addressID, //setting to make available to hook - although seems wrong to set on form for BAO hook availability 'soft_credit_to' => $softCreditToID, - 'line_item' => $lineItems + 'line_item' => $lineItems, + 'skipLineItem' => CRM_Utils_Array::value('skipLineItem', $params, 0) ); if (!$online && isset($params['thankyou_date'])) { $contributionParam['thankyou_date'] = $params['thankyou_date']; @@ -128,6 +129,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $contributionParams['payment_instrument_id'] = 1; } } + if ($paymentProcessorOutcome) { + $contributionParams['payment_processor'] = CRM_Utils_Array::value('payment_processor', $paymentProcessorOutcome); + } if (!$pending && $paymentProcessorOutcome) { $contributionParams += array( 'fee_amount' => CRM_Utils_Array::value('fee_amount', $paymentProcessorOutcome), @@ -136,7 +140,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr 'receipt_date' => $receiptDate, // also add financial_trxn details as part of fix for CRM-4724 'trxn_result_code' => CRM_Utils_Array::value('trxn_result_code', $paymentProcessorOutcome), - 'payment_processor' => CRM_Utils_Array::value('payment_processor', $paymentProcessorOutcome), ); } @@ -191,7 +194,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr CRM_Core_Payment_Form::mapParams($this->_bltID, $expressParams, $this->_params, FALSE); // fix state and country id if present - if (!empty($this->_params["billing_state_province_id-{$this->_bltID}"]) && $this->_params["billing_state_province_id-{$this->_bltID}"]) { + if (!empty($this->_params["billing_state_province_id-{$this->_bltID}"])) { $this->_params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($this->_params["billing_state_province_id-{$this->_bltID}"]); } if (!empty($this->_params["billing_country_id-{$this->_bltID}"]) && $this->_params["billing_country_id-{$this->_bltID}"]) { @@ -267,10 +270,14 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } // if onbehalf-of-organization if (!empty($this->_params['hidden_onbehalf_profile'])) { - if (!empty($this->_params['org_option']) && !empty($this->_params['organization_id'])) { + // CRM-15182 + if (empty($this->_params['org_option']) && empty($this->_params['organization_id'])) { if (!empty($this->_params['onbehalfof_id'])) { $this->_params['organization_id'] = $this->_params['onbehalfof_id']; } + else { + $this->_params['organization_id'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->_params['onbehalf']['organization_name'], 'id', 'display_name'); + } } $this->_params['organization_name'] = $this->_params['onbehalf']['organization_name']; @@ -571,17 +578,25 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } $defaults = array(); - $fields = array(); - foreach ($this->_fields as $name => $dontCare) { - if ($name != 'onbehalf' || $name != 'honor') { - $fields[$name] = 1; - } - } + $fields = array_fill_keys(array_keys($this->_fields), 1); $fields["billing_state_province-{$this->_bltID}"] = $fields["billing_country-{$this->_bltID}"] = $fields["email-{$this->_bltID}"] = 1; $contact = $this->_params; foreach ($fields as $name => $dontCare) { - if (isset($contact[$name])) { + // Recursively set defaults for nested fields + if (isset($contact[$name]) && is_array($contact[$name]) && ($name == 'onbehalf' || $name == 'honor')) { + foreach ($contact[$name] as $fieldName => $fieldValue) { + if (is_array($fieldValue) && !in_array($this->_fields[$name][$fieldName]['html_type'], array('Multi-Select','AdvMulti-Select'))) { + foreach ($fieldValue as $key => $value) { + $defaults["{$name}[{$fieldName}][{$key}]"] = $value; + } + } + else { + $defaults["{$name}[{$fieldName}]"] = $fieldValue; + } + } + } + elseif (isset($contact[$name])) { $defaults[$name] = $contact[$name]; if (substr($name, 0, 7) == 'custom_') { $timeField = "{$name}_time"; @@ -600,9 +615,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->assign('useForMember', $this->get('useForMember')); - // now fix all state country selectors - CRM_Core_BAO_Address::fixAllStateSelects($this, $defaults); - $this->setDefaults($defaults); $this->freeze(); @@ -1148,7 +1160,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * @param array $lineItems * * @throws Exception - * @internal param bool $deductibleMode * @return CRM_Contribute_DAO_Contribution * @access public */ @@ -1180,7 +1191,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // a better fix would be to set the values in the respective forms rather than require // a function being shared by two forms to deal with their respective values // moving it to the BAO & not taking the $form as a param would make sense here. - if(!isset($params['is_email_receipt'])){ + if(!isset($params['is_email_receipt']) && !empty($form->_values['is_email_receipt'])){ $params['is_email_receipt'] = CRM_Utils_Array::value( 'is_email_receipt', $form->_values ); } $recurringContributionID = self::processRecurringContribution($form, $params, $contactID, $financialType, $online); @@ -1269,8 +1280,12 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } if (isset($params['amount'])) { + $isMonetary = NULL; + if (!empty($form->_values['is_monetary'])) { + $isMonetary = $form->_values['is_monetary']; + } $contribParams = self::getContributionParams( - $params, $contactID, $financialType->id, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $form->_values['is_monetary'], $pending, $result, $receiptDate, + $params, $contactID, $financialType->id, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $isMonetary, $pending, $result, $receiptDate, $recurringContributionID, $isTest, $addressID, $contribSoftContactId, $lineItems ); $contribution = CRM_Contribute_BAO_Contribution::add($contribParams); @@ -1456,7 +1471,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // CRM-14354: For an auto-renewing membership with an additional contribution, // if separate payments is not enabled, make sure only the membership fee recurs - if ($form->_membershipBlock['is_separate_payment'] === '0' + if (!empty($form->_membershipBlock) + && $form->_membershipBlock['is_separate_payment'] === '0' && isset($params['selectMembership']) && $form->_values['is_allow_other_amount'] == '1' ) { @@ -1531,7 +1547,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $isCurrentEmployer = FALSE; $dupeIDs = array(); $orgID = NULL; - if (!empty($behalfOrganization['organization_id']) && !empty($behalfOrganization['org_option'])) { + if (!empty($behalfOrganization['organization_id']) && empty($behalfOrganization['org_option'])) { $orgID = $behalfOrganization['organization_id']; unset($behalfOrganization['organization_id']); $isCurrentEmployer = TRUE; @@ -1701,15 +1717,13 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ public function processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems) { try { - $membershipTypeID = (array) $membershipParams['selectMembership']; - - $membershipTypes = CRM_Member_BAO_Membership::buildMembershipTypeValues($this); - + $membershipTypeIDs = (array) $membershipParams['selectMembership']; + $membershipTypes = CRM_Member_BAO_Membership::buildMembershipTypeValues($this, $membershipTypeIDs); $membershipType = empty($membershipTypes) ? array() : reset($membershipTypes); $this->assign('membership_name', CRM_Utils_Array::value('name', $membershipType)); $isPaidMembership = FALSE; - if($this->_amount > 0.0 && $membershipParams['amount']) { + if($this->_amount >= 0.0 && isset($membershipParams['amount'])) { //amount must be greater than zero for //adding contribution record to contribution table. //this condition arises when separate membership payment is @@ -1726,7 +1740,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } CRM_Member_BAO_Membership::postProcessMembership($membershipParams, $contactID, - $this, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeID, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $contributionTypeId, + $this, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeIDs, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $contributionTypeId, $membershipLineItems ); $this->assign('membership_assign', TRUE); @@ -1775,9 +1789,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $priceField->price_set_id = $priceSetID; $priceField->orderBy('weight'); $priceField->find(); + $paramWeDoNotUnderstand = NULL; while ($priceField->fetch()) { - $paramWeDoNotUnderstand = NULL; if ($priceField->name == "contribution_amount") { $paramWeDoNotUnderstand = $priceField->id; } @@ -1812,6 +1826,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // contribution amount same as membership amount. //@todo - merge with section above if ($this->_membershipBlock['is_separate_payment'] + && !empty($this->_values['fee'][$priceField->id]) && CRM_Utils_Array::value('name', $this->_values['fee'][$priceField->id]) == 'contribution_amount' && CRM_Utils_Array::value("price_{$priceField->id}", $this->_params) == '-1' ) { @@ -1820,13 +1835,12 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } - /** - * Static submit function allowing tests (& api access although this is being built slowly) - * @param $params - */ static function submit($params) { $form = new CRM_Contribute_Form_Contribution_Confirm(); $form->_id = $params['id']; + if (!empty($params['contact_id'])) { + $form->_contactID = $params['contact_id']; + } CRM_Contribute_BAO_ContributionPage::setValues($form->_id, $form->_values); $form->_separateMembershipPayment = CRM_Contribute_BAO_ContributionPage::getIsMembershipPayment($form->_id); //this way the mocked up controller ignores the session stuff @@ -1835,14 +1849,21 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $params['invoiceID'] = md5(uniqid(rand(), TRUE)); $paramsProcessedForForm = $form->_params = self::getFormParams($params['id'], $params); $form->_amount = $params['amount']; - - $priceSetID = $form->_params['priceSetId'] = $paramsProcessedForForm['price_set_id']; $priceFields = CRM_Price_BAO_PriceSet::getSetDetail($priceSetID); $priceSetFields = reset($priceFields); $form->_values['fee'] = $priceSetFields['fields']; $form->_priceSetId = $priceSetID; $form->setFormAmountFields($priceSetID); + if (!empty($params['payment_processor'])) { + $form->_paymentProcessor = civicrm_api3('payment_processor', 'getsingle', array('id' => $params['payment_processor'])); + if ($form->_paymentProcessor['billing_mode'] ==1) { + $form->_contributeMode = 'direct'; + } + else { + $form->_contributeMode = 'notify'; + } + } $priceFields = $priceFields[$priceSetID]['fields']; CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution'); $form->_lineItem = array($priceSetID => $lineItems); @@ -1859,7 +1880,15 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ static function getFormParams($id, array $params) { if(!isset($params['is_pay_later'])) { - $params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array('id' => $id, 'return' => 'is_pay_later')); + if (!empty($params['payment_processor'])) { + $params['is_pay_later'] = 0; + } + else { + $params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array( + 'id' => $id, + 'return' => 'is_pay_later' + )); + } } if(empty($params['price_set_id'])) { $params['price_set_id'] = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $params['id']);