Move customValue retrieval to calling function.
authoreileen <emcnaughton@wikimedia.org>
Mon, 20 Aug 2018 05:17:26 +0000 (17:17 +1200)
committereileen <emcnaughton@wikimedia.org>
Wed, 10 Oct 2018 13:39:44 +0000 (14:39 +0100)
After digging on CRM_Batch_Form_Entry I couldn't find any evidence that the groupTree property would ever be set

CRM/Member/Form/Membership.php

index 59b5709f96289b27c873938a9f80e027d61d4c54..2caafe6fd2c2c24f8714b3ee5791fac1730aa5e4 100644 (file)
@@ -983,45 +983,25 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * @param array $formValues
    * @param object $membership
    *   Object.
+   * @param array $customValues
    *
    * @return bool
    *   true if mail was sent successfully
    */
-  public static function emailReceipt(&$form, &$formValues, &$membership) {
+  public static function emailReceipt(&$form, &$formValues, &$membership, $customValues = NULL) {
     // retrieve 'from email id' for acknowledgement
     $receiptFrom = CRM_Utils_Array::value('from_email_address', $formValues);
 
+    // @todo figure out how much of the stuff below is genuinely shared with the batch form & a logical shared place.
     if (!empty($formValues['payment_instrument_id'])) {
       $paymentInstrument = CRM_Contribute_PseudoConstant::paymentInstrument();
       $formValues['paidBy'] = $paymentInstrument[$formValues['payment_instrument_id']];
     }
 
-    // retrieve custom data
-    $customFields = $customValues = array();
-    if (property_exists($form, '_groupTree')
-      && !empty($form->_groupTree)
-    ) {
-      foreach ($form->_groupTree as $groupID => $group) {
-        if ($groupID == 'info') {
-          continue;
-        }
-        foreach ($group['fields'] as $k => $field) {
-          $field['title'] = $field['label'];
-          $customFields["custom_{$k}"] = $field;
-        }
-      }
-    }
-
-    $members = array(array('member_id', '=', $membership->id, 0, 0));
-    // check whether its a test drive
-    if ($form->_mode == 'test') {
-      $members[] = array('member_test', '=', 1, 0, 0);
-    }
-
-    CRM_Core_BAO_UFGroup::getValues($formValues['contact_id'], $customFields, $customValues, FALSE, $members);
     $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(
         $form->_params,
         $form->_bltID
@@ -1074,6 +1054,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
       $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');
     if ((empty($form->_contributorDisplayName) || empty($form->_contributorEmail)) || $isBatchProcess) {
       // in this case the form is being called statically from the batch editing screen
@@ -1087,6 +1068,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
         $form->_receiptContactId = $formValues['contact_id'];
       }
     }
+    // @todo determine isEmailPdf in calling function.
     $template = CRM_Core_Smarty::singleton();
     $taxAmt = $template->get_template_vars('dataArray');
     $eventTaxAmt = $template->get_template_vars('totalTaxAmount');
@@ -1732,7 +1714,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
       $formValues['receipt_text_signup'] = $formValues['receipt_text'];
       // send email receipt
       $this->assignBillingName();
-      $mailSend = $this->emailMembershipReceipt();
+      $mailSend = $this->emailMembershipReceipt($formValues, $membership);
       $receiptSent = TRUE;
     }
 
@@ -1919,7 +1901,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * @param $createdMemberships
    * @param $isRecur
    * @param $calcDates
-   * @param $mailSent
+   * @param bool $mailSent
    */
   protected function setStatusMessage($membership, $endDate, $receiptSend, $membershipTypes, $createdMemberships, $isRecur, $calcDates, $mailSent) {
     if (($this->_action & CRM_Core_Action::UPDATE)) {
@@ -1975,12 +1957,49 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * Send a receipt for the membership.
    *
    * @param array $formValues
-   * @param array $membership
-   * @return array
+   * @param \CRM_Member_BAO_Membership $membership
+   *
+   * @return bool
    */
   protected function emailMembershipReceipt($formValues, $membership) {
-    $mailSend = self::emailReceipt($this, $formValues, $membership);
-    return [$membership, $mailSend];
+    $customValues = $this->getCustomValuesForReceipt($formValues, $membership);
+
+    return self::emailReceipt($this, $formValues, $membership, $customValues);
+  }
+
+  /**
+   * Filter the custom values from the input parameters (for display in the email).
+   *
+   * @todo figure out why the scary code this calls does & document.
+   *
+   * @param array $formValues
+   * @param \CRM_Member_BAO_Membership $membership
+   * @return array
+   */
+  protected function getCustomValuesForReceipt($formValues, $membership) {
+    $customFields = $customValues = [];
+    if (property_exists($this, '_groupTree')
+      && !empty($this->_groupTree)
+    ) {
+      foreach ($this->_groupTree as $groupID => $group) {
+        if ($groupID == 'info') {
+          continue;
+        }
+        foreach ($group['fields'] as $k => $field) {
+          $field['title'] = $field['label'];
+          $customFields["custom_{$k}"] = $field;
+        }
+      }
+    }
+
+    $members = [['member_id', '=', $membership->id, 0, 0]];
+    // check whether its a test drive
+    if ($this->_mode == 'test') {
+      $members[] = ['member_test', '=', 1, 0, 0];
+    }
+
+    CRM_Core_BAO_UFGroup::getValues($formValues['contact_id'], $customFields, $customValues, FALSE, $members);
+    return $customValues;
   }
 
 }