Merge pull request #15359 from fkohrt/master
[civicrm-core.git] / CRM / Member / BAO / MembershipType.php
index 6438cff3c0ec6403df4ff84c2be14a6cd5dbfac3..f6e98d7a3a33ae4f1fdf1ebe164d93914369ff7f 100644 (file)
@@ -36,10 +36,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
 
   /**
    * Static holder for the default Membership Type.
+   * @var int
    */
-  static $_defaultMembershipType = NULL;
+  public static $_defaultMembershipType = NULL;
 
-  static $_membershipTypeInfo = array();
+  public static $_membershipTypeInfo = [];
 
   /**
    * Class constructor.
@@ -94,7 +95,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    * @return \CRM_Member_DAO_MembershipType
    * @throws \CiviCRM_API3_Exception
    */
-  public static function add(&$params, $ids = array()) {
+  public static function add(&$params, $ids = []) {
     // DEPRECATED Check if membershipType ID was passed in via $ids
     if (empty($params['id'])) {
       if (isset($ids['membershipType'])) {
@@ -132,7 +133,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     if ($membershipTypeId) {
       // on update we may need to retrieve some details for the price field function - otherwise we get e-notices on attempts to retrieve
       // name etc - the presence of previous id tells us this is an update
-      $params = array_merge(civicrm_api3('membership_type', 'getsingle', array('id' => $membershipType->id)), $params);
+      $params = array_merge(civicrm_api3('membership_type', 'getsingle', ['id' => $membershipType->id]), $params);
     }
     self::createMembershipPriceField($params, $previousID, $membershipType->id);
     // update all price field value for quick config when membership type is set CRM-11718
@@ -153,8 +154,9 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    */
   public static function flush() {
     CRM_Member_PseudoConstant::membershipType(NULL, TRUE);
-    civicrm_api3('membership', 'getfields', array('cache_clear' => 1, 'fieldname' => 'membership_type_id'));
-    civicrm_api3('profile', 'getfields', array('action' => 'submit', 'cache_clear' => 1));
+    civicrm_api3('membership', 'getfields', ['cache_clear' => 1, 'fieldname' => 'membership_type_id']);
+    civicrm_api3('profile', 'getfields', ['action' => 'submit', 'cache_clear' => 1]);
+    Civi::cache('metadata')->clear();
   }
 
   /**
@@ -168,11 +170,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   public static function del($membershipTypeId) {
     // Check dependencies.
     $check = FALSE;
-    $status = array();
-    $dependency = array(
+    $status = [];
+    $dependency = [
       'Membership' => 'membership_type_id',
       'MembershipBlock' => 'membership_type_default',
-    );
+    ];
 
     foreach ($dependency as $name => $field) {
       $baoString = 'CRM_Member_BAO_' . $name;
@@ -190,20 +192,20 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
       if (in_array('Membership', $status)) {
         $findMembersURL = CRM_Utils_System::url('civicrm/member/search', 'reset=1');
         $deleteURL = CRM_Utils_System::url('civicrm/contact/search/advanced', 'reset=1');
-        $message .= '<br/>' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from <a href=\'%1\'>Find Members</a>. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using <a href="%2">Advanced Search</a> and checking "Search in Trash".', array(
+        $message .= '<br/>' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from <a href=\'%1\'>Find Members</a>. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using <a href="%2">Advanced Search</a> and checking "Search in Trash".', [
           1 => $findMembersURL,
           2 => $deleteURL,
           3 => $cnt,
-        ));
+        ]);
         $cnt++;
       }
 
       if (in_array('MembershipBlock', $status)) {
         $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1');
-        $message .= ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', array(
+        $message .= ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', [
           1 => $deleteURL,
           2 => $cnt,
-        ));
+        ]);
         throw new CRM_Core_Exception($message);
       }
     }
@@ -228,17 +230,17 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    *   An array of membershipType-details.
    */
   public static function convertDayFormat(&$membershipType) {
-    $periodDays = array(
+    $periodDays = [
       'fixed_period_start_day',
       'fixed_period_rollover_day',
-    );
+    ];
     foreach ($membershipType as $id => $details) {
       foreach ($periodDays as $pDay) {
         if (!empty($details[$pDay])) {
           if ($details[$pDay] > 31) {
             $month = substr($details[$pDay], 0, strlen($details[$pDay]) - 2);
             $day = substr($details[$pDay], -2);
-            $monthMap = array(
+            $monthMap = [
               '1' => 'Jan',
               '2' => 'Feb',
               '3' => 'Mar',
@@ -251,7 +253,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
               '10' => 'Oct',
               '11' => 'Nov',
               '12' => 'Dec',
-            );
+            ];
             $membershipType[$id][$pDay] = $monthMap[$month] . ' ' . $day;
           }
           else {
@@ -265,12 +267,14 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * Get membership Types.
    *
+   * @deprecated  use getAllMembershipTypes.
+   *
    * @param bool $public
    *
    * @return array
    */
   public static function getMembershipTypes($public = TRUE) {
-    $membershipTypes = array();
+    $membershipTypes = [];
     $membershipType = new CRM_Member_DAO_MembershipType();
     $membershipType->is_active = 1;
     if ($public) {
@@ -287,12 +291,14 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * Get membership Type Details.
    *
+   * @deprecated use getMembershipType.
+   *
    * @param int $membershipTypeId
    *
    * @return array|null
    */
   public static function getMembershipTypeDetails($membershipTypeId) {
-    $membershipTypeDetails = array();
+    $membershipTypeDetails = [];
 
     $membershipType = new CRM_Member_DAO_MembershipType();
     $membershipType->is_active = 1;
@@ -326,11 +332,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     $membershipTypeDetails = self::getMembershipTypeDetails($membershipTypeId);
 
     // Convert all dates to 'Y-m-d' format.
-    foreach (array(
+    foreach ([
       'joinDate',
       'startDate',
       'endDate',
-    ) as $dateParam) {
+    ] as $dateParam) {
       if (!empty($$dateParam)) {
         $$dateParam = CRM_Utils_Date::processDate($$dateParam, NULL, FALSE, 'Y-m-d');
       }
@@ -438,11 +444,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
       }
     }
 
-    $membershipDates = array(
+    $membershipDates = [
       'start_date' => CRM_Utils_Date::customFormat($startDate, '%Y%m%d'),
       'end_date' => CRM_Utils_Date::customFormat($endDate, '%Y%m%d'),
       'join_date' => CRM_Utils_Date::customFormat($joinDate, '%Y%m%d'),
-    );
+    ];
 
     return $membershipDates;
   }
@@ -517,11 +523,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    *   array fo the start date, end date and join date of the membership
    */
   public static function getRenewalDatesForMembershipType($membershipId, $changeToday = NULL, $membershipTypeID = NULL, $numRenewTerms = 1) {
-    $params = array('id' => $membershipId);
+    $params = ['id' => $membershipId];
     $membershipDetails = CRM_Member_BAO_Membership::getValues($params, $values);
     $membershipDetails = $membershipDetails[$membershipId];
     $statusID = $membershipDetails->status_id;
-    $membershipDates = array();
+    $membershipDates = [];
     if (!empty($membershipDetails->join_date)) {
       $membershipDates['join_date'] = CRM_Utils_Date::customFormat($membershipDetails->join_date, '%Y%m%d');
     }
@@ -624,27 +630,6 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     return $membershipDates;
   }
 
-  /**
-   * @deprecated Please use the Membership API
-   * Retrieve all Membership Types associated with an Organization
-   *
-   * @param int $orgID
-   *   Id of Organization.
-   *
-   * @return array
-   *   array of the details of membership types
-   */
-  public static function getMembershipTypesByOrg($orgID) {
-    CRM_Core_Error::deprecatedFunctionWarning('membership_type api');
-    $memberTypesSameParentOrg = civicrm_api3('MembershipType', 'get', array(
-      'member_of_contact_id' => $orgID,
-      'options' => array(
-        'limit' => 0,
-      ),
-    ));
-    return CRM_Utils_Array::value('values', $memberTypesSameParentOrg, array());
-  }
-
   /**
    * Retrieve all Membership Types with Member of Contact id.
    *
@@ -654,7 +639,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    *   array of the details of membership types with Member of Contact id
    */
   public static function getMemberOfContactByMemTypes($membershipTypes) {
-    $memTypeOrganizations = array();
+    $memTypeOrganizations = [];
     if (empty($membershipTypes)) {
       return $memTypeOrganizations;
     }
@@ -675,7 +660,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    * @return array
    */
   public static function getMembershipTypeOrganization($membershipTypeId = NULL) {
-    $allMembershipTypes = array();
+    $allMembershipTypes = [];
 
     $membershipType = new CRM_Member_DAO_MembershipType();
 
@@ -700,7 +685,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    */
   public static function getMembershipTypeInfo() {
     if (!self::$_membershipTypeInfo) {
-      $orgs = $types = array();
+      $orgs = $types = [];
 
       $query = 'SELECT memType.id, memType.name, memType.member_of_contact_id, c.sort_name
         FROM civicrm_membership_type memType INNER JOIN civicrm_contact c ON c.id = memType.member_of_contact_id
@@ -711,12 +696,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         $types[$dao->member_of_contact_id][$dao->id] = $dao->name;
       }
 
-      self::$_membershipTypeInfo = array($orgs, $types);
+      self::$_membershipTypeInfo = [$orgs, $types];
     }
     return self::$_membershipTypeInfo;
   }
 
-
   /**
    * @param array $params
    * @param int $previousID
@@ -734,14 +718,14 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     }
     $fieldLabel = 'Membership Amount';
     $optionsIds = NULL;
-    $fieldParams = array(
+    $fieldParams = [
       'price_set_id ' => $priceSetId,
       'name' => $fieldName,
-    );
-    $results = array();
+    ];
+    $results = [];
     CRM_Price_BAO_PriceField::retrieve($fieldParams, $results);
     if (empty($results)) {
-      $fieldParams = array();
+      $fieldParams = [];
       $fieldParams['label'] = $fieldLabel;
       $fieldParams['name'] = $fieldName;
       $fieldParams['price_set_id'] = $priceSetId;
@@ -763,11 +747,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     }
     else {
       $fieldID = $results['id'];
-      $fieldValueParams = array(
+      $fieldValueParams = [
         'price_field_id' => $fieldID,
         'membership_type_id' => $membershipTypeId,
-      );
-      $results = array();
+      ];
+      $results = [];
       CRM_Price_BAO_PriceFieldValue::retrieve($fieldValueParams, $results);
       if (!empty($results)) {
         $results['label'] = $results['name'] = $params['name'];
@@ -775,14 +759,14 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         $optionsIds['id'] = $results['id'];
       }
       else {
-        $results = array(
+        $results = [
           'price_field_id' => $fieldID,
           'name' => $params['name'],
           'label' => $params['name'],
           'amount' => empty($params['minimum_fee']) ? 0 : $params['minimum_fee'],
           'membership_type_id' => $membershipTypeId,
           'is_active' => 1,
-        );
+        ];
       }
 
       if ($previousID) {
@@ -806,26 +790,26 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    * @param array $params
    */
   public static function updateAllPriceFieldValue($membershipTypeId, $params) {
-    $defaults = array();
-    $fieldsToUpdate = array(
+    $defaults = [];
+    $fieldsToUpdate = [
       'financial_type_id' => 'financial_type_id',
       'name' => 'label',
       'minimum_fee' => 'amount',
       'description' => 'description',
       'visibility' => 'visibility_id',
-    );
+    ];
     $priceFieldValueBAO = new CRM_Price_BAO_PriceFieldValue();
     $priceFieldValueBAO->membership_type_id = $membershipTypeId;
     $priceFieldValueBAO->find();
     while ($priceFieldValueBAO->fetch()) {
-      $updateParams = array(
+      $updateParams = [
         'id' => $priceFieldValueBAO->id,
         'price_field_id' => $priceFieldValueBAO->price_field_id,
-      );
+      ];
       //Get priceset details.
-      $fieldParams = array('fid' => $priceFieldValueBAO->price_field_id);
+      $fieldParams = ['fid' => $priceFieldValueBAO->price_field_id];
       $setID = CRM_Price_BAO_PriceSet::getSetId($fieldParams);
-      $setParams = array('id' => $setID);
+      $setParams = ['id' => $setID];
       $setValues = CRM_Price_BAO_PriceSet::retrieve($setParams, $defaults);
       if (!empty($setValues->is_quick_config) && $setValues->name != 'default_membership_type_amount') {
         foreach ($fieldsToUpdate as $key => $value) {
@@ -841,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];
+  }
+
 }