From 4d63cfde57b2d0cddc449fde105588c8ba06ee98 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sat, 3 Aug 2013 21:24:32 -0700 Subject: [PATCH] Cleanup membership api --- CRM/Member/BAO/Membership.php | 23 ++---- CRM/Utils/Array.php | 7 +- api/v3/Membership.php | 147 ++++++++-------------------------- 3 files changed, 42 insertions(+), 135 deletions(-) diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 0e10c56b90..04e3f0a88b 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -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); } diff --git a/CRM/Utils/Array.php b/CRM/Utils/Array.php index b0ebe5fac0..b685b9482f 100644 --- a/CRM/Utils/Array.php +++ b/CRM/Utils/Array.php @@ -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)) { diff --git a/api/v3/Membership.php b/api/v3/Membership.php index 1f7f5f5460..89bb468cef 100644 --- a/api/v3/Membership.php +++ b/api/v3/Membership.php @@ -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; } -- 2.25.1