*/
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;
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);
}
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
*
* @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)) {
*/
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.
*
* {@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);
}
}
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;
}
/**
* @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;
}