X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMember%2FForm%2FMembership.php;h=0493e98128cc15dbf23b6a5db183cb74e2761a71;hb=88a73bf40b85279b7764d515c7792af50a504b19;hp=8a81ebdc7dd0e3ea2cab653e8d860978c06e43ae;hpb=ca5603d5144bae64c29f2ba9e7da946b04e67235;p=civicrm-core.git diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index 8a81ebdc7d..0493e98128 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'); @@ -1008,8 +1003,7 @@ DESC limit 1"); * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function submit() { - $isTest = ($this->_mode === 'test') ? 1 : 0; + public function submit(): void { $this->storeContactFields($this->_params); $this->beginPostProcess(); $endDate = NULL; @@ -1221,7 +1215,7 @@ DESC limit 1"); $this->assign('is_pay_later', 1); } - if (!empty($formValues['send_receipt'])) { + if ($this->getSubmittedValue('send_receipt')) { $params['receipt_date'] = $formValues['receive_date'] ?? NULL; } @@ -1256,7 +1250,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']; @@ -1279,7 +1273,7 @@ DESC limit 1"); $softParams['soft_credit_type_id'] = $formValues['soft_credit_type_id']; } } - if (!empty($formValues['send_receipt'])) { + if ($this->getSubmittedValue('send_receipt')) { $paymentParams['email'] = $this->_contributorEmail; } @@ -1290,25 +1284,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 = $this->processContribution( $paymentParams, - NULL, [ 'contact_id' => $this->_contributorContactID, 'line_item' => $lineItem, - 'is_test' => $isTest, + 'is_test' => $this->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,7 +1309,6 @@ DESC limit 1"); $paymentParams['contactID'] = $this->_contactID; $paymentParams['contributionID'] = $contribution->id; - $paymentParams['contributionPageID'] = $contribution->contribution_page_id; $paymentParams['contributionRecurID'] = $contribution->contribution_recur_id; $params['contribution_id'] = $paymentParams['contributionID']; $params['contribution_recur_id'] = $paymentParams['contributionRecurID']; @@ -1357,8 +1344,6 @@ DESC limit 1"); if ($paymentStatus !== 'Completed') { $params['status_id'] = $pendingMembershipStatusId; $params['skipStatusCal'] = TRUE; - // unset send-receipt option, since receipt will be sent when ipn is received. - unset($formValues['send_receipt'], $formValues['send_receipt']); //as membership is pending set dates to null. foreach ($this->_memTypeSelected as $memType) { $membershipTypeValues[$memType]['joinDate'] = NULL; @@ -1367,21 +1352,21 @@ 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] ); $params['source'] = $formValues['source'] ?: $params['contribution_source']; $params['trxn_id'] = $result['trxn_id'] ?? NULL; - $params['is_test'] = ($this->_mode === 'live') ? 0 : 1; - if (!empty($formValues['send_receipt'])) { + $params['is_test'] = $this->isTest(); + $params['receipt_date'] = NULL; + if ($this->getSubmittedValue('send_receipt') && $paymentStatus === 'Completed') { + // @todo this should be updated by the send function once sent rather than + // set here. $params['receipt_date'] = $now; } - else { - $params['receipt_date'] = NULL; - } $this->set('params', $formValues); $this->assign('trxn_id', CRM_Utils_Array::value('trxn_id', $result)); @@ -1441,7 +1426,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']]); @@ -1526,7 +1511,7 @@ DESC limit 1"); } $receiptSent = FALSE; - if (!empty($formValues['send_receipt']) && $receiptSend) { + if ($this->getSubmittedValue('send_receipt') && $receiptSend) { $formValues['contact_id'] = $this->_contactID; $formValues['contribution_id'] = $contributionId; // We really don't need a distinct receipt_text_signup vs receipt_text_renewal as they are @@ -1776,8 +1761,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,7 +1825,6 @@ DESC limit 1"); * being fixed later. * * @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 @@ -1848,12 +1833,8 @@ 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 * @@ -1862,91 +1843,55 @@ DESC limit 1"); */ 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 - // however, we then get it being over-written with null for backend contributions - // 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']) && $isEmailReceipt) { - $params['is_email_receipt'] = $isEmailReceipt; - } + $params['is_email_receipt'] = (bool) $this->getSubmittedValue('send_receipt'); $params['is_recur'] = TRUE; $params['payment_instrument_id'] = $contributionParams['payment_instrument_id'] ?? NULL; - $recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID, $financialType); + $recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID); - $now = date('YmdHis'); + $now = CRM_Utils_Time::date('YmdHis'); $receiptDate = $params['receipt_date'] ?? NULL; - if ($isEmailReceipt) { + if ($params['is_email_receipt']) { $receiptDate = $now; } - if (isset($params['amount'])) { - $contributionParams = array_merge([ - 'financial_type_id' => $financialType->id, - 'receive_date' => !empty($params['receive_date']) ? CRM_Utils_Date::processDate($params['receive_date']) : date('YmdHis'), - 'tax_amount' => $params['tax_amount'] ?? NULL, - 'amount_level' => $params['amount_level'] ?? NULL, - 'invoice_id' => $params['invoiceID'], - 'currency' => $params['currencyID'], - 'is_pay_later' => $params['is_pay_later'] ?? 0, - //configure cancel reason, cancel date and thankyou date - //from 'contribution' type profile if included - 'cancel_reason' => $params['cancel_reason'] ?? 0, - 'cancel_date' => isset($params['cancel_date']) ? CRM_Utils_Date::format($params['cancel_date']) : NULL, - 'thankyou_date' => isset($params['thankyou_date']) ? CRM_Utils_Date::format($params['thankyou_date']) : NULL, - //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 = 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); - $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); + if ($this->getSubmittedValue('send_receipt')) { + $contributionParams += [ + 'receipt_date' => $receiptDate, + ]; + } - // lets store it in the form variable so postProcess hook can get to this and use it - $form->_contributionID = $contribution->id; + if ($recurringContributionID) { + $contributionParams['contribution_recur_id'] = $recurringContributionID; } - // process soft credit / pcp params first - CRM_Contribute_BAO_ContributionSoft::formatSoftCreditParams($params, $form); + $contributionParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); + + // @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); - //CRM-13981, processing honor contact into soft-credit contribution - CRM_Contribute_BAO_ContributionSoft::processSoftContribution($params, $contribution); + // lets store it in the form variable so postProcess hook can get to this and use it + $form->_contributionID = $contribution->id; $transaction->commit(); return $contribution; @@ -1959,15 +1904,10 @@ DESC limit 1"); * * @param array $params * @param int $contactID - * @param string $contributionType * - * @return int|null + * @return int */ - protected function legacyProcessRecurringContribution(&$params, $contactID, $contributionType) { - $form = $this; - if (empty($params['is_recur'])) { - return NULL; - } + protected function legacyProcessRecurringContribution(array $params, $contactID): int { $recurParams = ['contact_id' => $contactID]; $recurParams['amount'] = $params['amount'] ?? NULL; @@ -1975,38 +1915,36 @@ DESC limit 1"); $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'] ?? 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; - } + $recurParams['is_test'] = $this->isTest(); - $recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = date('YmdHis'); + $recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = CRM_Utils_Time::date('YmdHis'); if (!empty($params['receive_date'])) { - $recurParams['start_date'] = date('YmdHis', strtotime($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'] = $params['is_email_receipt'] ?? NULL; + $recurParams['is_email_receipt'] = (bool) $this->getSubmittedValue('send_receipt'); // 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']; - $recurParams['financial_type_id'] = $contributionType->id; - $campaignId = $params['campaign_id'] ?? $form->_values['campaign_id'] ?? NULL; + $campaignId = $params['campaign_id'] ?? $this->_values['campaign_id'] ?? NULL; $recurParams['campaign_id'] = $campaignId; - $recurring = CRM_Contribute_BAO_ContributionRecur::add($recurParams); - if (is_a($recurring, 'CRM_Core_Error')) { - throw new CRM_Core_Exception(CRM_Core_Error::getMessages($recurring)); - } + return CRM_Contribute_BAO_ContributionRecur::add($recurParams)->id; + } - return $recurring->id; + /** + * Is the form being submitted in test mode. + * + * @return bool + */ + protected function isTest(): int { + return ($this->_mode === 'test') ? TRUE : FALSE; } }