X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMember%2FForm%2FMembership.php;h=9a18e3db5c27542b239d475727d162257a2ef28a;hb=9a4884ed0f6498261d6309716d8157bb606fd846;hp=6d6654cbbff094aa6429e30d4c9e3f7507096a44;hpb=f0eff438ea96d96e44e831e86f586a38a9768c94;p=civicrm-core.git diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index 6d6654cbbf..9a18e3db5c 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -290,7 +290,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { //setting default join date and receive date if ($this->_action == CRM_Core_Action::ADD) { - $defaults['receive_date'] = date('Y-m-d H:i:s'); + $defaults['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s'); } $defaults['num_terms'] = 1; @@ -352,7 +352,7 @@ DESC limit 1"); //setting default join date if there is no join date if (empty($defaults['join_date'])) { - $defaults['join_date'] = date('Y-m-d'); + $defaults['join_date'] = CRM_Utils_Time::date('Y-m-d'); } if (!empty($defaults['membership_end_date'])) { @@ -554,7 +554,7 @@ DESC limit 1"); CRM_Member_StatusOverrideTypes::getSelectOptions() ); - $this->add('datepicker', 'status_override_end_date', ts('Status Override End Date'), '', FALSE, ['minDate' => date('Y-m-d'), 'time' => FALSE]); + $this->add('datepicker', 'status_override_end_date', ts('Status Override End Date'), '', FALSE, ['minDate' => CRM_Utils_Time::date('Y-m-d'), 'time' => FALSE]); $this->addElement('checkbox', 'record_contribution', ts('Record Membership Payment?')); @@ -900,7 +900,6 @@ DESC limit 1"); * @param array $formValues * @param object $membership * Object. - * @param array $customValues * * @return bool * true if mail was sent successfully @@ -911,7 +910,7 @@ DESC limit 1"); * & needs rationalising. * */ - public static function emailReceipt(&$form, &$formValues, &$membership, $customValues = NULL) { + public static function emailReceipt($form, &$formValues, $membership) { // retrieve 'from email id' for acknowledgement $receiptFrom = $formValues['from_email_address'] ?? NULL; @@ -921,8 +920,6 @@ DESC limit 1"); $formValues['paidBy'] = $paymentInstrument[$formValues['payment_instrument_id']]; } - $form->assign('customValues', $customValues); - if ($form->_mode) { // @todo move this outside shared code as Batch entry just doesn't $form->assign('address', CRM_Utils_Address::getFormattedBillingAddressFieldsFromParameters( @@ -959,13 +956,11 @@ DESC limit 1"); $form->assign('receive_date', CRM_Utils_Array::value('receive_date', $formValues)); $form->assign('formValues', $formValues); - if (empty($lineItem)) { - $form->assign('mem_start_date', CRM_Utils_Date::formatDateOnlyLong($membership->start_date)); - if (!CRM_Utils_System::isNull($membership->end_date)) { - $form->assign('mem_end_date', CRM_Utils_Date::formatDateOnlyLong($membership->end_date)); - } - $form->assign('membership_name', CRM_Member_PseudoConstant::membershipType($membership->membership_type_id)); + $form->assign('mem_start_date', CRM_Utils_Date::formatDateOnlyLong($membership->start_date)); + if (!CRM_Utils_System::isNull($membership->end_date)) { + $form->assign('mem_end_date', CRM_Utils_Date::formatDateOnlyLong($membership->end_date)); } + $form->assign('membership_name', CRM_Member_PseudoConstant::membershipType($membership->membership_type_id)); // @todo - if we have to figure out if this is for batch processing it doesn't belong in the shared function. $isBatchProcess = is_a($form, 'CRM_Batch_Form_Entry'); @@ -975,7 +970,7 @@ DESC limit 1"); // & we should aim to move this function to the BAO layer in future. // however, we can assume that the contact_id passed in by the batch // function will be the recipient - list($form->_contributorDisplayName, $form->_contributorEmail) + [$form->_contributorDisplayName, $form->_contributorEmail] = CRM_Contact_BAO_Contact_Location::getEmailDetails($formValues['contact_id']); if (empty($form->_receiptContactId) || $isBatchProcess) { $form->_receiptContactId = $formValues['contact_id']; @@ -1170,7 +1165,7 @@ DESC limit 1"); } // Retrieve the name and email of the current user - this will be the FROM for the receipt email - list($userName) = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID()); + [$userName] = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID()); //CRM-13981, allow different person as a soft-contributor of chosen type if ($this->_contributorContactID != $this->_contactID) { @@ -1256,7 +1251,7 @@ DESC limit 1"); //get the payment processor id as per mode. Try removing in favour of beginPostProcess. $params['payment_processor_id'] = $formValues['payment_processor_id'] = $this->_paymentProcessor['id']; - $params['register_date'] = date('YmdHis'); + $params['register_date'] = CRM_Utils_Time::date('YmdHis'); // add all the additional payment params we need $formValues['amount'] = $params['total_amount']; @@ -1290,25 +1285,19 @@ DESC limit 1"); // we do need contribution and recurring records. $result = NULL; if (!empty($paymentParams['is_recur'])) { - $financialType = new CRM_Financial_DAO_FinancialType(); - $financialType->id = $params['financial_type_id']; - $financialType->find(TRUE); $this->_params = $formValues; - $contribution = self::processFormContribution($this, + $contribution = $this->processContribution( $paymentParams, - NULL, [ 'contact_id' => $this->_contributorContactID, 'line_item' => $lineItem, 'is_test' => $isTest, 'campaign_id' => $paymentParams['campaign_id'] ?? NULL, - 'contribution_page_id' => $formValues['contribution_page_id'] ?? NULL, 'source' => CRM_Utils_Array::value('source', $paymentParams, CRM_Utils_Array::value('description', $paymentParams)), - 'thankyou_date' => $paymentParams['thankyou_date'] ?? NULL, 'payment_instrument_id' => $paymentInstrumentID, - ], - $financialType + 'financial_type_id' => $params['financial_type_id'], + ] ); //create new soft-credit record, CRM-13981 @@ -1321,8 +1310,6 @@ DESC limit 1"); $paymentParams['contactID'] = $this->_contactID; $paymentParams['contributionID'] = $contribution->id; - $paymentParams['contributionTypeID'] = $contribution->financial_type_id; - $paymentParams['contributionPageID'] = $contribution->contribution_page_id; $paymentParams['contributionRecurID'] = $contribution->contribution_recur_id; $params['contribution_id'] = $paymentParams['contributionID']; $params['contribution_recur_id'] = $paymentParams['contributionRecurID']; @@ -1368,8 +1355,8 @@ DESC limit 1"); } $endDate = $startDate = NULL; } - $now = date('YmdHis'); - $params['receive_date'] = date('Y-m-d H:i:s'); + $now = CRM_Utils_Time::date('YmdHis'); + $params['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s'); $params['invoice_id'] = $formValues['invoiceID']; $params['contribution_source'] = ts('%1 Membership Signup: Credit card or direct debit (by %2)', [1 => $this->getSelectedMembershipLabels(), 2 => $userName] @@ -1442,7 +1429,7 @@ DESC limit 1"); // @todo figure out why recieve_date isn't being set right here. if (empty($params['receive_date'])) { - $params['receive_date'] = date('Y-m-d H:i:s'); + $params['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s'); } $membershipParams = array_merge($params, $membershipTypeValues[$lineItemValues['membership_type_id']]); @@ -1777,8 +1764,9 @@ DESC limit 1"); */ protected function emailMembershipReceipt($formValues, $membership) { $customValues = $this->getCustomValuesForReceipt($formValues, $membership); + $this->assign('customValues', $customValues); - return self::emailReceipt($this, $formValues, $membership, $customValues); + return self::emailReceipt($this, $formValues, $membership); } /** @@ -1839,9 +1827,7 @@ DESC limit 1"); * It's like the contribution create being done here is actively bad and * being fixed later. * - * @param CRM_Core_Form $form * @param array $params - * @param array $result * @param array $contributionParams * Parameters to be passed to contribution create action. * This differs from params in that we are currently adding params to it and 1) ensuring they are being @@ -1850,32 +1836,26 @@ DESC limit 1"); * - line_item * - is_test * - campaign_id - * - contribution_page_id * - source * - payment_type_id - * - thankyou_date (not all forms will set this) - * - * @param CRM_Financial_DAO_FinancialType $financialType * * @return \CRM_Contribute_DAO_Contribution * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function processFormContribution( - &$form, + protected function processContribution( $params, - $result, - $contributionParams, - $financialType + $contributionParams ) { + $form = $this; $transaction = new CRM_Core_Transaction(); $contactID = $contributionParams['contact_id']; $isEmailReceipt = !empty($form->_values['is_email_receipt']); // add these values for the recurringContrib function ,CRM-10188 - $params['financial_type_id'] = $financialType->id; + $params['financial_type_id'] = $contributionParams['financial_type_id']; //@todo - this is being set from the form to resolve CRM-10188 - an // eNotice caused by it not being set @ the front end @@ -1888,26 +1868,49 @@ DESC limit 1"); } $params['is_recur'] = TRUE; $params['payment_instrument_id'] = $contributionParams['payment_instrument_id'] ?? NULL; - $recurringContributionID = CRM_Contribute_Form_Contribution_Confirm::processRecurringContribution($form, $params, $contactID, $financialType); + $recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID); - $now = date('YmdHis'); + $now = CRM_Utils_Time::date('YmdHis'); $receiptDate = $params['receipt_date'] ?? NULL; if ($isEmailReceipt) { $receiptDate = $now; } if (isset($params['amount'])) { - $contributionParams = array_merge(CRM_Contribute_Form_Contribution_Confirm::getContributionParams( - $params, $financialType->id, - $result, $receiptDate, - $recurringContributionID), $contributionParams - ); - $contributionParams['non_deductible_amount'] = CRM_Contribute_Form_Contribution_Confirm::getNonDeductibleAmount($params, $financialType, FALSE, $form); + $contributionParams = array_merge([ + 'receive_date' => !empty($params['receive_date']) ? CRM_Utils_Date::processDate($params['receive_date']) : CRM_Utils_Time::date('YmdHis'), + 'tax_amount' => $params['tax_amount'] ?? NULL, + 'invoice_id' => $params['invoiceID'], + 'currency' => $params['currencyID'], + 'is_pay_later' => $params['is_pay_later'] ?? 0, + //setting to make available to hook - although seems wrong to set on form for BAO hook availability + 'skipLineItem' => $params['skipLineItem'] ?? 0, + ], $contributionParams); + + if (!empty($params["is_email_receipt"])) { + $contributionParams += [ + 'receipt_date' => $receiptDate, + ]; + } + + if ($recurringContributionID) { + $contributionParams['contribution_recur_id'] = $recurringContributionID; + } + + $contributionParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); + if (isset($contributionParams['invoice_id'])) { + $contributionParams['id'] = CRM_Core_DAO::getFieldValue( + 'CRM_Contribute_DAO_Contribution', + $contributionParams['invoice_id'], + 'id', + 'invoice_id' + ); + } + $contributionParams['skipCleanMoney'] = TRUE; // @todo this is the wrong place for this - it should be done as close to form submission // as possible $contributionParams['total_amount'] = $params['amount']; - $contribution = CRM_Contribute_BAO_Contribution::add($contributionParams); // lets store it in the form variable so postProcess hook can get to this and use it @@ -1920,46 +1923,55 @@ DESC limit 1"); //CRM-13981, processing honor contact into soft-credit contribution CRM_Contribute_BAO_ContributionSoft::processSoftContribution($params, $contribution); - if ($contribution) { - //handle custom data. - $params['contribution_id'] = $contribution->id; - if (!empty($params['custom']) && - is_array($params['custom']) - ) { - CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_contribution', $contribution->id); - } - } - // Save note - if ($contribution && !empty($params['contribution_note'])) { - $noteParams = [ - 'entity_table' => 'civicrm_contribution', - 'note' => $params['contribution_note'], - 'entity_id' => $contribution->id, - 'contact_id' => $contribution->contact_id, - ]; - - CRM_Core_BAO_Note::add($noteParams, []); - } + $transaction->commit(); + return $contribution; + } - //create contribution activity w/ individual and target - //activity w/ organisation contact id when onbelf, CRM-4027 - $actParams = []; - $targetContactID = NULL; - if (!empty($params['onbehalf_contact_id'])) { - $actParams = [ - 'source_contact_id' => $params['onbehalf_contact_id'], - 'on_behalf' => TRUE, - ]; - $targetContactID = $contribution->contact_id; + /** + * Create the recurring contribution record. + * + * This function was copied from another form & needs cleanup. + * + * @param array $params + * @param int $contactID + * + * @return int + */ + protected function legacyProcessRecurringContribution(array $params, $contactID): int { + $form = $this; + + $recurParams = ['contact_id' => $contactID]; + $recurParams['amount'] = $params['amount'] ?? NULL; + $recurParams['auto_renew'] = $params['auto_renew'] ?? NULL; + $recurParams['frequency_unit'] = $params['frequency_unit'] ?? NULL; + $recurParams['frequency_interval'] = $params['frequency_interval'] ?? NULL; + $recurParams['installments'] = $params['installments'] ?? NULL; + $recurParams['financial_type_id'] = $params['financial_type_id']; + $recurParams['currency'] = $params['currency'] ?? NULL; + $recurParams['payment_instrument_id'] = $params['payment_instrument_id']; + + $recurParams['is_test'] = 0; + if (($form->_action & CRM_Core_Action::PREVIEW) || + (isset($form->_mode) && ($form->_mode == 'test')) + ) { + $recurParams['is_test'] = 1; } - // create an activity record - if ($contribution) { - CRM_Activity_BAO_Activity::addActivity($contribution, 'Contribution', $targetContactID, $actParams); + $recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = CRM_Utils_Time::date('YmdHis'); + if (!empty($params['receive_date'])) { + $recurParams['start_date'] = date('YmdHis', CRM_Utils_Time::strtotime($params['receive_date'])); } + $recurParams['invoice_id'] = $params['invoiceID'] ?? NULL; + $recurParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); + $recurParams['payment_processor_id'] = $params['payment_processor_id'] ?? NULL; + $recurParams['is_email_receipt'] = (bool) ($params['is_email_receipt'] ?? FALSE); + // we need to add a unique trxn_id to avoid a unique key error + // in paypal IPN we reset this when paypal sends us the real trxn id, CRM-2991 + $recurParams['trxn_id'] = $params['trxn_id'] ?? $params['invoiceID']; - $transaction->commit(); - return $contribution; + $campaignId = $params['campaign_id'] ?? $form->_values['campaign_id'] ?? NULL; + $recurParams['campaign_id'] = $campaignId; + return CRM_Contribute_BAO_ContributionRecur::add($recurParams)->id; } }