Merge pull request #4616 from Edzelopez/CRM-15642
[civicrm-core.git] / CRM / Member / BAO / MembershipType.php
index 99ee45ae8774d04519a5e02f14a8ac2b8391ecdc..e3c492cb9b289d531004b19db20835c5e6dd67d0 100644 (file)
@@ -49,16 +49,12 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   }
 
   /**
-   * Takes a bunch of params that are needed to match certain criteria and
-   * retrieves the relevant objects. Typically the valid params are only
-   * contact_id. We'll tweak this function to be more full featured over a period
-   * of time. This is the inverse function of create. It also stores all the retrieved
-   * values in the default array
+   * Fetch object based on array of properties
    *
    * @param array $params   (reference ) an assoc array of name/value pairs
    * @param array $defaults (reference ) an assoc array to hold the flattened values
    *
-   * @return object CRM_Member_BAO_MembershipType object
+   * @return CRM_Member_BAO_MembershipType object
    * @access public
    * @static
    */
@@ -86,47 +82,56 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   }
 
   /**
-   * function to add the membership types
+   * add the membership types
    *
    * @param array $params reference array contains the values submitted by the form
-   * @param array $ids    reference array contains the id
+   * @param array $ids array contains the id (deprecated)
    *
    * @access public
    * @static
    *
    * @return object
    */
-  static function add(&$params, &$ids) {
-    $params['is_active'] = CRM_Utils_Array::value('is_active', $params, FALSE);
+  static function add(&$params, $ids = array()) {
+    $id = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membershipType', $ids));
+    if (!$id) {
+      if (!isset($params['is_active'])) {
+        // do we need this?
+        $params['is_active'] = FALSE;
+      }
+      if (!isset($params['domain_id'])) {
+        $params['domain_id'] = CRM_Core_Config::domainID();
+      }
+    }
 
     // action is taken depending upon the mode
     $membershipType = new CRM_Member_DAO_MembershipType();
-
     $membershipType->copyValues($params);
+    $membershipType->id = $id;
 
-    $membershipType->domain_id = CRM_Core_Config::domainID();
-
-    $membershipType->id = CRM_Utils_Array::value('membershipType', $ids);
-
-    // $previousID is the old organization id for membership type i.e 'member_of_contact_id'. This is used when an oganization is changed.
+    // $previousID is the old organization id for membership type i.e 'member_of_contact_id'. This is used when an organization is changed.
     $previousID = NULL;
-    if ($membershipType->id) {
-      $previousID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $membershipType->id, 'member_of_contact_id');
+    if ($id) {
+      $previousID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $id, 'member_of_contact_id');
     }
 
     $membershipType->save();
-
-    self::createMembershipPriceField($params, $ids, $previousID, $membershipType->id);
+    if ($id) {
+      // 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);
+    }
+    self::createMembershipPriceField($params, $previousID, $membershipType->id);
     // update all price field value for quick config when membership type is set CRM-11718
-    if (!empty($ids['membershipType'])) {
-      self::updateAllPriceFieldValue($ids['membershipType'], $params);
+    if ($id) {
+      self::updateAllPriceFieldValue($id, $params);
     }
 
     return $membershipType;
   }
 
   /**
-   * Function to delete membership Types
+   * delete membership Types
    *
    * @param int $membershipTypeId
    *
@@ -183,7 +188,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   }
 
   /**
-   * Function to convert membership Type's 'start day' & 'rollover day' to human readable formats.
+   * convert membership Type's 'start day' & 'rollover day' to human readable formats.
    *
    * @param array $membershipType an array of membershipType-details.
    * @static
@@ -229,7 +234,6 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
    * @param bool $public
    *
    * @return array
-   * @internal param int $membershipTypeId
    * @static
    */
   static function getMembershipTypes($public = TRUE) {
@@ -275,10 +279,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * Function to calculate start date and end date for new membership
    *
-   * @param int  $membershipTypeId membership type id
+   * @param int $membershipTypeId membership type id
    * @param date $joinDate member since ( in mysql date format )
    * @param date $startDate start date ( in mysql date format )
-   * @param int  $numRenewTerms    how many membership terms are being added to end date (default is 1)
+   * @param null $endDate
+   * @param int $numRenewTerms how many membership terms are being added to end date (default is 1)
    *
    * @return array associated array with  start date, end date and join date for the membership
    * @static
@@ -603,11 +608,9 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   /**
    * The function returns all the Organization for  all membershiptypes .
    *
-   * @param null $membershipTypeId
+   * @param int $membershipTypeId
    *
    * @return array
-   * @internal param array $allmembershipTypes array of allMembershipTypes
-   *  with organization id Key - value pairs.
    */
   static function getMembershipTypeOrganization($membershipTypeId = NULL) {
     $allmembershipTypes = array();
@@ -653,7 +656,12 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   }
 
 
-  public static function createMembershipPriceField($params, $ids, $previousID, $membershipTypeId) {
+  /**
+   * @param array $params
+   * @param $previousID
+   * @param $membershipTypeId
+   */
+  public static function createMembershipPriceField($params, $previousID, $membershipTypeId) {
 
     $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_membership_type_amount', 'id', 'name');
 
@@ -690,7 +698,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         CRM_Member_Form_MembershipType::checkPreviousPriceField($previousID, $priceSetId, $membershipTypeId, $optionsIds);
         $fieldParams['option_id'] = CRM_Utils_Array::value('option_id', $optionsIds);
       }
-      $priceField = CRM_Price_BAO_PriceField::create($fieldParams);
+      CRM_Price_BAO_PriceField::create($fieldParams);
     }
     else {
       $fieldID = $results['id'];