From caca32ba161fd23d3f60d11ce29318fa44b06b10 Mon Sep 17 00:00:00 2001 From: eileen Date: Wed, 28 Aug 2013 16:13:28 +1200 Subject: [PATCH] CRM-13294 fix membership to support IN format on contact_id Conflicts: tests/phpunit/api/v3/MembershipTest.php --- api/v3/Membership.php | 8 ++--- tests/phpunit/api/v3/MembershipTest.php | 45 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/api/v3/Membership.php b/api/v3/Membership.php index a04bf1b0d2..3d4d54140b 100644 --- a/api/v3/Membership.php +++ b/api/v3/Membership.php @@ -191,8 +191,8 @@ function civicrm_api3_membership_get($params) { } $activeOnly = CRM_Utils_Array::value('active_only', $params, $activeOnly); - 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) && !is_array($params['contact_id'])) { + $membershipValues = _civicrm_api3_membership_get_customv2behaviour($params, $membershipTypeId, $activeOnly ); } else { //legacy behaviour only ever worked when contact_id passed in - use standard api function otherwise @@ -260,9 +260,9 @@ function civicrm_api3_membership_get($params) { * @param array $params parameters passed into get function * @return array result for calling function */ -function _civicrm_api3_membership_get_customv2behaviour(&$params, $contactID, $membershipTypeId, $activeOnly) { +function _civicrm_api3_membership_get_customv2behaviour(&$params, $membershipTypeId, $activeOnly) { // get the membership for the given contact ID - $membershipParams = array('contact_id' => $contactID); + $membershipParams = array('contact_id' => $params['contact_id']); if ($membershipTypeId) { $membershipParams['membership_type_id'] = $membershipTypeId; } diff --git a/tests/phpunit/api/v3/MembershipTest.php b/tests/phpunit/api/v3/MembershipTest.php index 4965eb5cbe..ed58352fed 100644 --- a/tests/phpunit/api/v3/MembershipTest.php +++ b/tests/phpunit/api/v3/MembershipTest.php @@ -185,6 +185,51 @@ class api_v3_MembershipTest extends CiviUnitTestCase { * Test civicrm_membership_get with params not array. * Gets treated as contact_id, memberships expected. */ + function testGetInSyntax() { + $this->_membershipID = $this->contactMembershipCreate($this->_params); + $this->_membershipID2 = $this->contactMembershipCreate($this->_params); + $this->_membershipID3 = $this->contactMembershipCreate($this->_params); + $params = array( + 'id' => array('IN' => array($this->_membershipID, $this->_membershipID3)), + ); + $membership = $this->callAPISuccess('membership', 'get', $params); + $this->assertEquals(2, $membership['count']); + $this->assertEquals(array($this->_membershipID, $this->_membershipID3), array_keys($membership['values'])); + $params = array( + 'id' => array('NOT IN' => array($this->_membershipID, $this->_membershipID3)), + ); + $membership = $this->callAPISuccess('membership', 'get', $params); + $this->assertEquals(1, $membership['count']); + $this->assertEquals(array($this->_membershipID2), array_keys($membership['values'])); + } + /** + * Test civicrm_membership_get with params not array. + * Gets treated as contact_id, memberships expected. + */ + function testGetInSyntaxOnContactID() { + $this->_membershipID = $this->contactMembershipCreate($this->_params); + $contact2 = $this->individualCreate(); + $contact3 = $this->individualCreate(array('first_name' => 'Scout', 'last_name' => 'Canine')); + $this->_membershipID2 = $this->contactMembershipCreate(array_merge($this->_params, array('contact_id' => $contact2))); + $this->_membershipID3 = $this->contactMembershipCreate(array_merge($this->_params, array('contact_id' => $contact3))); + $params = array( + 'contact_id' => array('IN' => array($this->_contactID, $contact3)), + ); + $membership = $this->callAPISuccess('membership', 'get', $params); + $this->assertEquals(2, $membership['count']); + $this->assertEquals(array($this->_membershipID, $this->_membershipID3), array_keys($membership['values'])); + $params = array( + 'contact_id' => array('NOT IN' => array($this->_contactID, $contact3)), + ); + $membership = $this->callAPISuccess('membership', 'get', $params); + $this->assertEquals(1, $membership['count']); + $this->assertEquals(array($this->_membershipID2), array_keys($membership['values'])); + } + /** + * Test civicrm_membership_get with params not array. + * Gets treated as contact_id, memberships expected. + */ + function testGetWithParamsMemberShipTypeId() { $result = $this->callAPISuccess($this->_entity, 'create', $this->_params); $params = array( -- 2.25.1