Merge pull request #15359 from fkohrt/master
[civicrm-core.git] / CRM / Member / BAO / MembershipType.php
index 3686b3f106dc1eae6628bce7efe54985c5eb05f1..f6e98d7a3a33ae4f1fdf1ebe164d93914369ff7f 100644 (file)
@@ -156,6 +156,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     CRM_Member_PseudoConstant::membershipType(NULL, TRUE);
     civicrm_api3('membership', 'getfields', ['cache_clear' => 1, 'fieldname' => 'membership_type_id']);
     civicrm_api3('profile', 'getfields', ['action' => 'submit', 'cache_clear' => 1]);
+    Civi::cache('metadata')->clear();
   }
 
   /**
@@ -266,6 +267,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * Get membership Types.
    *
+   * @deprecated  use getAllMembershipTypes.
+   *
    * @param bool $public
    *
    * @return array
@@ -288,6 +291,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * Get membership Type Details.
    *
+   * @deprecated use getMembershipType.
+   *
    * @param int $membershipTypeId
    *
    * @return array|null
@@ -820,4 +825,30 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     }
   }
 
+  /**
+   * Cached wrapper for membership types.
+   *
+   * Since this is used from the batched script caching helps.
+   *
+   * @throws \CiviCRM_API3_Exception
+   */
+  public static function getAllMembershipTypes() {
+    if (!Civi::cache('metadata')->has(__CLASS__ . __FUNCTION__)) {
+      Civi::cache('metadata')->set(__CLASS__ . __FUNCTION__, civicrm_api3('MembershipType', 'get', ['options' => ['limit' => 0, 'sort' => 'weight']])['values']);
+    }
+    return Civi::cache('metadata')->get(__CLASS__ . __FUNCTION__);
+  }
+
+  /**
+   * Get a specific membership type (leveraging the cache).
+   *
+   * @param int $id
+   *
+   * @return mixed
+   * @throws \CiviCRM_API3_Exception
+   */
+  public static function getMembershipType($id) {
+    return self::getAllMembershipTypes()[$id];
+  }
+
 }