RM-15491 fix membership_status api to be more appropriate on update
authorEileen McNaughton <eileen@fuzion.co.nz>
Sun, 19 Oct 2014 21:01:50 +0000 (10:01 +1300)
committerEileen McNaughton <eileen@fuzion.co.nz>
Mon, 20 Oct 2014 00:42:08 +0000 (13:42 +1300)
CRM/Contribute/BAO/Contribution.php
CRM/Core/DAO.php
CRM/Member/BAO/MembershipStatus.php
CRM/Price/BAO/PriceFieldValue.php
api/v3/MembershipStatus.php
tests/phpunit/api/v3/SyntaxConformanceTest.php

index 61aedbb19bf95a5032ca2e23ec80b0c2a12d19e3..268187dd22dcebeb0bd71dcf07933bd93f6a41c2 100644 (file)
@@ -136,7 +136,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
 
    //set defaults in create mode
     if (!$contributionID) {
-      self::setDefaults($params);
+      CRM_Core_DAO::setCreateDefaults($params, self::getDefaults());
       self::calculateMissingAmountParams($params);
     }
 
@@ -214,20 +214,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
       ),
       'contribution_status_id' => CRM_Core_OptionGroup::getValue('contribution_status', 'Completed', 'name'),
     );
-
   }
 
-  /**
-   * Set defaults when creating new entity
-   * @param $params
-   */
-  static function setDefaults(&$params) {
-    foreach (self::getDefaults() as $key => $value) {
-      if (empty($params[$key])) {
-        $params[$key] = $value;
-      }
-    }
-  }
   /**
    * Given the list of params in the params array, fetch the object
    * and store the values in the values array
index 3bd298dcd6be2987ef338d5ca230124f368a823c..c0f9c5b055333166fdc14e7963437126262754d9 100644 (file)
@@ -1666,6 +1666,24 @@ SELECT contact_id
   }
   }
 
+  /**
+   * Set defaults when creating new entity
+   * (don't call this set defaults as already in use with different signature in some places)
+   *
+   * @param $params
+   * @param $defaults
+   */
+  static function setCreateDefaults(&$params, $defaults) {
+    if (isset($params['id'])) {
+      return;
+    }
+    foreach ($defaults as $key => $value) {
+      if (!array_key_exists($key, $params) || $params[$key] === NULL) {
+        $params[$key] = $value;
+      }
+    }
+  }
+
   /**
    * @param string $prefix
    * @param bool $addRandomString
index 5c1c8f35b70b5940d2308a6e616f43bbf850a34b..e0f424299b824b09bba9187d6f4bdd452f20ebd1 100644 (file)
@@ -122,40 +122,52 @@ class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus {
    * @return object
    */
   static function add(&$params, $ids = array()) {
-    $params['is_active'] = CRM_Utils_Array::value('is_active', $params, FALSE);
-    $params['is_current_member'] = CRM_Utils_Array::value('is_current_member', $params, FALSE);
-    $params['is_admin'] = CRM_Utils_Array::value('is_admin', $params, FALSE);
-    $params['is_default'] = CRM_Utils_Array::value('is_default', $params, FALSE);
+    $id = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membershipStatus', $ids));
+    if (!$id) {
+      CRM_Core_DAO::setCreateDefaults($params, self::getDefaults());
+      //copy name to label when not passed.
+      if (empty($params['label']) && !empty($params['name'])) {
+        $params['label'] = $params['name'];
+      }
+
+      if (empty($params['name']) && !empty($params['label'])) {
+        $params['name'] = $params['label'];
+      }
+    }
 
     // set all other defaults to false.
-    if ($params['is_default']) {
+    if (!empty($params['is_default'])) {
       $query = "UPDATE civicrm_membership_status SET is_default = 0";
       CRM_Core_DAO::executeQuery($query,
         CRM_Core_DAO::$_nullArray
       );
     }
 
-    //copy name to label when not passed.
-    if (empty($params['label']) && !empty($params['name'])) {
-      $params['label'] = $params['name'];
-    }
 
-    //for add mode, copy label to name.
-    $statusId = !empty($params['id']) ? $params['id'] : CRM_Utils_Array::value('membershipStatus', $ids);
-    if (!$statusId && !empty($params['label']) && empty($params['name'])) {
-      $params['name'] = $params['label'];
-    }
 
     // action is taken depending upon the mode
     $membershipStatus = new CRM_Member_DAO_MembershipStatus();
     $membershipStatus->copyValues($params);
 
-    $membershipStatus->id = $statusId;
+    $membershipStatus->id = $id;
 
     $membershipStatus->save();
     return $membershipStatus;
   }
 
+  /**
+   * Get defaults for new entity
+   * @return array
+   */
+  static function getDefaults() {
+    return array(
+      'is_active' => FALSE,
+      'is_current_member' => FALSE,
+      'is_admin' => FALSE,
+      'is_default' => FALSE,
+    );
+  }
+
   /**
    * Function to get  membership status
    *
index 57a9d91cb952ceef7fbbdddd1de9941852e67a96..73a22e9406d965fb23eb691baf51a1c9b313e7fc 100644 (file)
@@ -101,7 +101,7 @@ class CRM_Price_BAO_PriceFieldValue extends CRM_Price_DAO_PriceFieldValue {
     }
     else {
       if (!$id) {
-        self::setDefaults($params);
+        CRM_Core_DAO::setCreateDefaults($params, self::getDefaults());
         if (empty($params['name'])) {
           $params['name'] = CRM_Utils_String::munge(CRM_Utils_Array::value('label', $params), '_', 64);
         }
@@ -122,18 +122,6 @@ class CRM_Price_BAO_PriceFieldValue extends CRM_Price_DAO_PriceFieldValue {
 
   }
 
-  /**
-   * Set defaults when creating new entity
-   * @param $params
-   */
-  static function setDefaults(&$params) {
-    foreach (self::getDefaults() as $key => $value) {
-      if (empty($params[$key])) {
-        $params[$key] = $value;
-      }
-    }
-  }
-
   /**
    * Takes a bunch of params that are needed to match certain criteria and
    * retrieves the relevant objects.
index ddaf0bc6e15b3a6fdf241ea05340e37fec64fe0d..82490d371ca3feee328709b75f9b5a1961a193b1 100644 (file)
@@ -52,16 +52,6 @@ function civicrm_api3_membership_status_create($params) {
   return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
-/**
- * Adjust Metadata for Create action
- *
- * The metadata is used for setting defaults, documentation & validation
- * @param array $params array or parameters determined by getfields
- */
-function _civicrm_api3_membership_status_create_spec(&$params) {
-  $params['name']['api.aliases'] = array('label');
-}
-
 /**
  * Get a membership status.
  *
index ca1243984fa20092d97f26abd2be875e2fd764f6..3593ffbad2761a35be3872ba4147fce47fb09a71 100644 (file)
@@ -321,7 +321,6 @@ class api_v3_SyntaxConformanceTest extends CiviUnitTestCase {
       'Note',
       'OptionGroup',
       'Membership',
-      'MembershipStatus',
       'Group',
       'GroupOrganization',
       'GroupNesting',