CRM-17702 - Fix validation for multiple membership types when using price sets on...
authorDave Jenkins <davej+git@circle-interactive.co.uk>
Tue, 15 Dec 2015 14:27:48 +0000 (14:27 +0000)
committerDave Jenkins <davej+git@circle-interactive.co.uk>
Tue, 15 Dec 2015 14:27:48 +0000 (14:27 +0000)
CRM/Member/Form/Membership.php

index dc43808739bdb8aa0ff9a5d87756b08b64be9a1b..25e097f88f8f6c486408926734d7ba16c6a8ecb2 100644 (file)
@@ -144,10 +144,9 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * @return array
    */
   public static function getPriceFieldIDs($params, $priceSet) {
-    $priceFieldIDS = $fieldIds = array();
+    $priceFieldIDS = array();
     if (isset($priceSet['fields']) && is_array($priceSet['fields'])) {
-      $fieldIds = array_keys($priceSet['fields']);
-      foreach ($fieldIds as $fieldId) {
+      foreach ($priceSet['fields'] as $fieldId => $field) {
         if (!empty($params['price_' . $fieldId])) {
           if (is_array($params['price_' . $fieldId])) {
             foreach ($params['price_' . $fieldId] as $priceFldVal => $isSet) {
@@ -156,7 +155,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
               }
             }
           }
-          else {
+          elseif (!$field['is_enter_qty']) {
             $priceFieldIDS[] = $params['price_' . $fieldId];
           }
         }
@@ -748,7 +747,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
     if (!empty($params['price_set_id'])) {
       CRM_Price_BAO_PriceField::priceSetValidation($priceSetId, $params, $errors);
 
-      $priceFieldIDS = self::getPriceFieldIDs($params, $priceSetDetails);
+      $priceFieldIDS = self::getPriceFieldIDs($params, $priceSetDetails[$priceSetId]);
 
       if (!empty($priceFieldIDS)) {
         $ids = implode(',', $priceFieldIDS);