Merge pull request #4616 from Edzelopez/CRM-15642
[civicrm-core.git] / CRM / Member / BAO / MembershipType.php
index d130a77bc98085d199ad2d6a06ad938d9b5345c5..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,7 +82,7 @@ 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 array contains the id (deprecated)
@@ -113,15 +109,19 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     $membershipType->copyValues($params);
     $membershipType->id = $id;
 
-    // $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 ($id) {
       self::updateAllPriceFieldValue($id, $params);
@@ -131,7 +131,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
   }
 
   /**
-   * Function to delete membership Types
+   * delete membership Types
    *
    * @param int $membershipTypeId
    *
@@ -188,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
@@ -234,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) {
@@ -609,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();
@@ -660,12 +657,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
 
 
   /**
-   * @param $params
-   * @param $ids
+   * @param array $params
    * @param $previousID
    * @param $membershipTypeId
    */
-  public static function createMembershipPriceField($params, $ids, $previousID, $membershipTypeId) {
+  public static function createMembershipPriceField($params, $previousID, $membershipTypeId) {
 
     $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_membership_type_amount', 'id', 'name');
 
@@ -702,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'];