Cleanup membership api
authorColeman Watts <coleman@civicrm.org>
Sun, 4 Aug 2013 04:24:32 +0000 (21:24 -0700)
committerColeman Watts <coleman@civicrm.org>
Sun, 4 Aug 2013 16:45:26 +0000 (09:45 -0700)
CRM/Member/BAO/Membership.php
CRM/Utils/Array.php
api/v3/Membership.php

index 0e10c56b90fea64d943c8b8d527ae8a7d2cd90f7..04e3f0a88b8bc6d5384fe00feedadb82cdc3b008 100644 (file)
@@ -66,9 +66,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    */
   static function &add(&$params, &$ids) {
 
-    // get activity types for use in activity record creation
-    $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'name');
-
     if (CRM_Utils_Array::value('membership', $ids)) {
       CRM_Utils_Hook::pre('edit', 'Membership', $ids['membership'], $params);
       $oldStatus         = NULL;
@@ -142,40 +139,32 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     if (CRM_Utils_Array::value('membership', $ids)) {
       if ($membership->status_id != $oldStatus) {
-        $allStatus     = CRM_Member_PseudoConstant::membershipStatus();
+        $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
         $activityParam = array(
           'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$membership->status_id]}",
           'source_contact_id' => $membershipLog['modified_id'],
           'target_contact_id' => $membership->contact_id,
           'source_record_id' => $membership->id,
-          'activity_type_id' => array_search('Change Membership Status', $activityTypes),
+          'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Membership Status'),
           'status_id' => 2,
-          'version' => 3,
           'priority_id' => 2,
           'activity_date_time' => date('Y-m-d H:i:s'),
-          'is_auto' => 0,
-          'is_current_revision' => 1,
-          'is_deleted' => 0,
         );
-        $activityResult = civicrm_api('activity', 'create', $activityParam);
+        civicrm_api3('activity', 'create', $activityParam);
       }
       if (isset($membership->membership_type_id) && $membership->membership_type_id != $oldType) {
-        $membershipTypes = CRM_Member_PseudoConstant::membershipType();
+        $membershipTypes = CRM_Member_BAO_Membership::buildOptions('membership_type_id', 'get');
         $activityParam = array(
           'subject' => "Type changed from {$membershipTypes[$oldType]} to {$membershipTypes[$membership->membership_type_id]}",
           'source_contact_id' => $membershipLog['modified_id'],
           'target_contact_id' => $membership->contact_id,
           'source_record_id' => $membership->id,
-          'activity_type_id' => array_search('Change Membership Type', $activityTypes),
+          'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Membership Status'),
           'status_id' => 2,
-          'version' => 3,
           'priority_id' => 2,
           'activity_date_time' => date('Y-m-d H:i:s'),
-          'is_auto' => 0,
-          'is_current_revision' => 1,
-          'is_deleted' => 0,
         );
-        $activityResult = civicrm_api('activity', 'create', $activityParam);
+        civicrm_api3('activity', 'create', $activityParam);
       }
       CRM_Utils_Hook::post('edit', 'Membership', $membership->id, $membership);
     }
index b0ebe5fac057f4795136a15d83a688d8e7f68468..b685b9482fa5b09a70c57b65b45d31cf99fe72e4 100644 (file)
@@ -39,13 +39,12 @@ class CRM_Utils_Array {
    *
    * @access public
    *
-   * @param array  $list  the array to be searched
    * @param string $key   the key value
+   * @param array $list  the array to be searched
+   * @param mixed $default
    *
-   * @return value if exists else null
+   * @return mixed value if exists else $default
    * @static
-   * @access public
-   *
    */
   static function value($key, $list, $default = NULL) {
     if (is_array($list)) {
index 1f7f5f54601fff98d732981235af73aeb28efddb..89bb468ceff55ecce2a94f3182edf2342796b2ac 100644 (file)
@@ -52,15 +52,6 @@ function civicrm_api3_membership_delete($params) {
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
-/**
- * modify metadata
- */
-function _civicrm_api3_membership_delete_spec(&$params) {
-  // set as not required as membership_id also acceptable & no either/or std yet
-  $params['id']['api.required'] = 1;
-  $params['id']['api.aliases'] = array('membership_id');
-}
-
 /**
  * Create a Contact Membership
  *
@@ -74,50 +65,38 @@ function _civicrm_api3_membership_delete_spec(&$params) {
  * @access public
  */
 function civicrm_api3_membership_create($params) {
-// @todo shouldn't be required - should be handling by api.aliases & api.required in _spec
-  civicrm_api3_verify_one_mandatory($params, NULL, array('membership_type_id', 'membership_type'));
   // check params for membership id during update
-  if (CRM_Utils_Array::value('id', $params) && !isset($params['skipStatusCal'])) {
+  if (!empty($params['id']) && !isset($params['skipStatusCal'])) {
     //don't calculate dates on exisiting membership - expect API use to pass them in
     // or leave unchanged
     $params['skipStatusCal'] = 1;
   }
   else {
     // also check for status id if override is set (during add/update)
-    if (isset($params['is_override']) &&
-      !CRM_Utils_Array::value('status_id', $params)
-    ) {
+    if (!empty($params['is_override']) && empty($params['status_id'])) {
       return civicrm_api3_create_error('Status ID required');
     }
   }
 
-
   $values = array();
-  $error = _civicrm_api3_membership_format_params($params, $values);
-
-  if (civicrm_error($error)) {
-    return $error;
-  }
   _civicrm_api3_custom_format_params($params, $values, 'Membership');
   $params = array_merge($params, $values);
 
-
   $action = CRM_Core_Action::ADD;
   // we need user id during add mode
     $ids = array ();
-    if(CRM_Utils_Array::value('contact_id',$params)){
+    if(CRM_Utils_Array::value('contact_id', $params)) {
       $ids['userId'] = $params['contact_id'];
     }
   //for edit membership id should be present
   if (CRM_Utils_Array::value('id', $params)) {
-      $ids['membership'] = $params['id'];
+    $ids['membership'] = $params['id'];
     $action = CRM_Core_Action::UPDATE;
   }
 
   //need to pass action to handle related memberships.
   $params['action'] = $action;
 
-
   $membershipBAO = CRM_Member_BAO_Membership::create($params, $ids, TRUE);
 
   if (array_key_exists('is_error', $membershipBAO)) {
@@ -141,8 +120,20 @@ function civicrm_api3_membership_create($params) {
  */
 function _civicrm_api3_membership_create_spec(&$params) {
   $params['contact_id']['api.required'] = 1;
+  $params['membership_type_id']['api.required'] = 1;
+  $params['membership_type_id']['api.aliases'] = array('membership_type');
   $params['skipStatusCal'] = array('title' => 'skip status calculation. By default this is 0 if id is not set and 1 if it is set');
 }
+/**
+ * Adjust Metadata for Get action
+ *
+ * The metadata is used for setting defaults, documentation & validation
+ * @param array $params array or parameters determined by getfields
+ */
+function _civicrm_api3_membership_get_spec(&$params) {
+  $params['membership_type_id']['api.aliases'] = array('membership_type');
+}
+
 /**
  * Get contact membership record.
  *
@@ -159,35 +150,24 @@ function _civicrm_api3_membership_create_spec(&$params) {
  * {@getfields membership_get}
  */
 function civicrm_api3_membership_get($params) {
-  $contactID = $activeOnly = $membershipTypeId = $membershipType = NULL;
+  $activeOnly = $membershipTypeId = $membershipType = NULL;
 
   $contactID = CRM_Utils_Array::value('contact_id', $params);
-  if (is_array(CRM_Utils_Array::value('filters', $params)) && !empty($params['filters'])) {
+  if (!empty($params['filters']) && is_array($params['filters'])) {
     $activeOnly = CRM_Utils_Array::value('is_current', $params['filters'], FALSE);
   }
   $activeOnly = CRM_Utils_Array::value('active_only', $params, $activeOnly);
-  //@todo replace this by handling in API layer - we should have enough info to do this
-  // between pseudoconstant & fk - see comments in format_params
-  $membershipTypeId = CRM_Utils_Array::value('membership_type_id', $params);
-  if (!$membershipTypeId) {
-    $membershipType = CRM_Utils_Array::value('membership_type', $params);
-    if ($membershipType) {
-      $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType',
-        $membershipType, 'id', 'name'
-      );
-    }
-  }
-    if(CRM_Utils_Array::value('contact_id',$params)){
-      $membershipValues = _civicrm_api3_membership_get_customv2behaviour($params, $contactID, $membershipTypeId, $activeOnly );
+
+  if (CRM_Utils_Array::value('contact_id', $params)) {
+    $membershipValues = _civicrm_api3_membership_get_customv2behaviour($params, $contactID, $membershipTypeId, $activeOnly );
   }
-    else{
-      //legacy behaviour only ever worked when contact_id passed in - use standard api function otherwise
+  else {
+    //legacy behaviour only ever worked when contact_id passed in - use standard api function otherwise
     $membershipValues = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, FALSE);
   }
 
-
   if (empty($membershipValues)) {
-    # No results is NOT an error!
+    // No results is NOT an error!
     return civicrm_api3_create_success($membershipValues, $params);
   }
 
@@ -235,67 +215,6 @@ function civicrm_api3_membership_get($params) {
   }
 
   return civicrm_api3_create_success($members, $params, 'membership', 'get');
-
-}
-
-
-/**
- * @deprecated
- * Deprecated function to support membership create. Do not call this. It will be removed in favour of
- * wrapper layer formatting
- * take the input parameter list as specified in the data model and
- * convert it into the same format that we use in QF and BAO object
- *
- * @param array  $params       Associative array of property name/value
- *                             pairs to insert in new contact.
- * @param array  $values       The reformatted properties that we can use internally
- *
- * @param array  $create       Is the formatted Values array going to
- *                             be used for CRM_Member_BAO_Membership:create()
- *
- * @return array|error
- * @access public
- */
-function _civicrm_api3_membership_format_params($params, &$values, $create = FALSE) {
-
-  $fields = CRM_Member_DAO_Membership::fields();
-  _civicrm_api3_store_values($fields, $params, $values);
-
-  foreach ($params as $key => $value) {
-    // ignore empty values or empty arrays etc
-    if (CRM_Utils_System::isNull($value)) {
-      continue;
-    }
-
-    switch ($key) {
-
-      case 'membership_type':
-        // @todo we still need to adequately figure out how to handle this @ the API layer.
-        // it is an FK & a pseudoconstant - we should probably alias it onto membership_type_id &
-        // then in the validate_integer function do an if(!is_integer && $fieldInfo['pseudoconstant) look
-        // up pseudoconstant & flip it over. By the time it hits api it will be a valid membership_type & handling @
-        // api layer not required
-        $membershipTypeId = CRM_Utils_Array::key(ucfirst($value),
-          CRM_Member_PseudoConstant::membershipType()
-        );
-        if ($membershipTypeId) {
-          if (CRM_Utils_Array::value('membership_type_id', $values) &&
-            $membershipTypeId != $values['membership_type_id']
-          ) {
-            return civicrm_api3_create_error('Mismatched membership Type and Membership Type Id');
-          }
-        }
-        else {
-          return civicrm_api3_create_error('Invalid Membership Type');
-        }
-        $values['membership_type_id'] = $membershipTypeId;
-        break;
-      default:
-        break;
-    }
-  }
-
-  return NULL;
 }
 
 /**
@@ -308,13 +227,13 @@ function _civicrm_api3_membership_format_params($params, &$values, $create = FAL
  * @param array $params parameters passed into get function
  * @return array result for calling function
  */
-function _civicrm_api3_membership_get_customv2behaviour(&$params, $contactID, $membershipTypeId, $activeOnly ){
-    // get the membership for the given contact ID
-    $membershipParams = array( 'contact_id' => $contactID );
-    if ( $membershipTypeId ) {
-      $membershipParams['membership_type_id'] = $membershipTypeId;
-    }
-    $membershipValues = array();
-    CRM_Member_BAO_Membership::getValues( $membershipParams, $membershipValues, $activeOnly );
-    return $membershipValues;
+function _civicrm_api3_membership_get_customv2behaviour(&$params, $contactID, $membershipTypeId, $activeOnly{
+  // get the membership for the given contact ID
+  $membershipParams = array('contact_id' => $contactID);
+  if ($membershipTypeId) {
+    $membershipParams['membership_type_id'] = $membershipTypeId;
+  }
+  $membershipValues = array();
+  CRM_Member_BAO_Membership::getValues($membershipParams, $membershipValues, $activeOnly);
+  return $membershipValues;
 }