CRM-16867 add function to determin combination of membership types in a priceset
authorEileen McNaughton <eileen@fuzion.co.nz>
Tue, 21 Jul 2015 06:04:35 +0000 (18:04 +1200)
committerEileen McNaughton <eileen@fuzion.co.nz>
Tue, 21 Jul 2015 06:07:28 +0000 (18:07 +1200)
This function is part of the fix towards CRM-16850 & CRM-16867 & a further commit causes the function it was copied off
to re-use rather than duplicate it, however, various aspects of QA still being undergone - this function addition only PR
allows the work on both those issues to continue without being interrelated

CRM/Contribute/Form/ContributionBase.php
CRM/Contribute/Form/ContributionPage/Custom.php
CRM/Price/BAO/PriceSet.php

index e78c9eb830fac7a3216b6bcd887a5eadf203b69e..5661011c3f1f39807a7280a58bf3a2faeba71f1a 100644 (file)
@@ -100,7 +100,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
    *
    * @var array
    */
-  public $_params;
+  public $_params = array();
 
   /**
    * The fields involved in this contribution page
index ea730d09f261adb10463eee9e91ff8f44b15c584..95a4ef02aa006e32eaa592ab0327075a9457b800 100644 (file)
@@ -26,7 +26,6 @@
  */
 
 /**
- *
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2015
  * $Id$
@@ -34,7 +33,7 @@
  */
 
 /**
- * form to process actions on the group aspect of Custom Data
+ * Form to process actions on the group aspect of Custom Data.
  */
 class CRM_Contribute_Form_ContributionPage_Custom extends CRM_Contribute_Form_ContributionPage {
 
index 9176d4ccd6cab4bbfbf146ed16d7ebe21c653eb7..794c0a591bc77e8ce66ac39d502bda4d2cd09b9c 100644 (file)
@@ -1421,6 +1421,54 @@ WHERE       ps.id = %1
     return FALSE;
   }
 
+  /**
+   * Get an array of the membership types in a price set.
+   *
+   * @param int $id
+   *
+   * @return array(
+   *   Membership types in the price set
+   */
+  public static function getMembershipTypesFromPriceSet($id) {
+    $query
+      = "SELECT      pfv.id, pfv.price_field_id, pfv.name, pfv.membership_type_id, pf.html_type, mt.auto_renew
+FROM        civicrm_price_field_value pfv
+LEFT JOIN   civicrm_price_field pf ON pf.id = pfv.price_field_id
+LEFT JOIN   civicrm_price_set ps ON ps.id = pf.price_set_id
+LEFT JOIN   civicrm_membership_type mt ON mt.id = pfv.membership_type_id
+WHERE       ps.id = %1
+";
+
+    $params = array(1 => array($id, 'Integer'));
+    $dao = CRM_Core_DAO::executeQuery($query, $params);
+
+    $membershipTypes = array(
+      'all' => array(),
+      'autorenew' => array(),
+      'autorenew_required' => array(),
+      'autorenew_optional' => array(),
+    );
+    while ($dao->fetch()) {
+      if (empty($dao->membership_type_id)) {
+        continue;
+      }
+      $membershipTypes['all'][] = $dao->membership_type_id;
+      if (!empty($dao->auto_renew)) {
+        $membershipTypes['autorenew'][] = $dao->membership_type_id;
+        if ($dao->auto_renew == 2) {
+          $membershipTypes['autorenew_required'][] = $dao->membership_type_id;
+        }
+        else {
+          $membershipTypes['autorenew_optional'][] = $dao->membership_type_id;
+        }
+      }
+      else {
+        $membershipTypes['non_renew'][] = $dao->membership_type_id;
+      }
+    }
+    return $membershipTypes;
+  }
+
   /**
    * Copy priceSet when event/contibution page is copied
    *