Remove always-true-if
[civicrm-core.git] / CRM / Member / Form / Membership.php
index 64f9c01f59c243c01206eb6e70397cda546caa55..0493e98128cc15dbf23b6a5db183cb74e2761a71 100644 (file)
@@ -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'] = (bool) ($params['is_email_receipt'] ?? FALSE);
+    $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;
   }
 
 }