),
);
}
- CRM_Contact_BAO_Relationship::relatedMemberships($relationship->contact_id_a, $params, $ids, $action);
$title = CRM_Contact_BAO_Contact::displayName($relationship->contact_id_a) . ' (' . CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType',
$relationship->relationship_type_id, 'label_a_b'
* @param int $count get the no of relationships
* $param int $relationshipId relationship id
* @param string $direction the direction we are interested in a_b or b_a
+ * @param array $params array of extra values including relationship_type_id per api spec
*
* return string the query for this diretion
* @static
* @access public
*/
- static function makeURLClause($contactId, $status, $numRelationship, $count, $relationshipId, $direction) {
+ static function makeURLClause($contactId, $status, $numRelationship, $count, $relationshipId, $direction, $params = array()) {
$select = $from = $where = '';
$select = '( ';
// CRM-6181
$where .= ' AND civicrm_contact.is_deleted = 0';
-
+ if(!empty($params['membership_type_id']) && empty($params['relationship_type_id'])) {
+ $where .= self::membershipTypeToRelationshipTypes($params, $direction);
+ }
+ if(!empty($params['relationship_type_id'])) {
+ if(is_array($params['relationship_type_id'])) {
+ $where .= " AND " . CRM_Core_DAO::createSQLFilter('relationship_type_id', $params['relationship_type_id'], 'Integer');
+ }
+ else {
+ $where .= ' AND relationship_type_id = ' . CRM_Utils_Type::escape($params['relationship_type_id'], 'Positive');
+ }
+ }
if ($direction == 'a_b') {
$where .= ' ) UNION ';
}
* $param array $links the list of links to display
* $param int $permissionMask the permission mask to be applied for the actions
* $param boolean $permissionedContact to return only permissioned Contact
- *
+ * $param array $params array of variables consistent with filters supported by the api
* return array $values relationship records
* @static
* @access public
$status = 0, $numRelationship = 0,
$count = 0, $relationshipId = 0,
$links = NULL, $permissionMask = NULL,
- $permissionedContact = FALSE
+ $permissionedContact = FALSE,
+ $params = array()
) {
$values = array();
if (!$contactId && !$relationshipId) {
}
list($select1, $from1, $where1) = self::makeURLClause($contactId, $status, $numRelationship,
- $count, $relationshipId, 'a_b'
+ $count, $relationshipId, 'a_b', $params
);
list($select2, $from2, $where2) = self::makeURLClause($contactId, $status, $numRelationship,
- $count, $relationshipId, 'b_a'
+ $count, $relationshipId, 'b_a', $params
);
$order = $limit = '';
* Helper function to check whether to delete the membership or
* not.
*
+ * @static
+ *
*/
- function isDeleteRelatedMembership($relTypeIds, $contactId, $mainRelatedContactId, $relTypeId, $relIds) {
+ static function isDeleteRelatedMembership($relTypeIds, $contactId, $mainRelatedContactId, $relTypeId, $relIds) {
if (in_array($relTypeId, $relTypeIds)) {
return TRUE;
}
}
return TRUE;
}
+
+ /**
+ * Function filters the query by possible relationships for the membership type
+ * It is intended to be called when constructing queries for the api (reciprocal & non-reciprocal)
+ * and to add clauses to limit the return to those relationships which COULD inherit a membership type
+ * (as opposed to those who inherit a particular membership
+ *
+ * @param array $params api input array
+ */
+ static function membershipTypeToRelationshipTypes(&$params, $direction = NULL) {
+ $membershipType = civicrm_api3('membership_type', 'getsingle', array('id' => $params['membership_type_id'], 'return' => 'relationship_type_id, relationship_direction'));
+ $relationshipTypes = $membershipType['relationship_type_id'];
+ if(empty($relationshipTypes)) {
+ return;
+ }
+ // if we don't have any contact data we can only filter on type
+ if(empty($params['contact_id']) && empty($params['contact_id_a']) && empty($params['contact_id_a'])) {
+ $params['relationship_type_id'] = array('IN' => $relationshipTypes);
+ return;
+ }
+ else {
+ $relationshipDirections = $membershipType['relationship_direction'];
+ // if we have contact_id_a OR contact_id_b we can make a call here
+ // if we have contact??
+ foreach ($relationshipDirections as $index => $mtdirection) {
+ if(isset($params['contact_id_a']) && $mtdirection == 'a_b' || $direction == 'a_b') {
+ $types[] = $relationshipTypes[$index];
+ }
+ if(isset($params['contact_id_b']) && $mtdirection == 'b_a' || $direction == 'b_a') {
+ $types[] = $relationshipTypes[$index];
+ }
+ }
+ if(!empty($types)) {
+ $params['relationship_type_id'] = array('IN' => $types);
+ }
+ elseif(!empty($clauses)) {
+ return explode(' OR ', $clauses);
+ }
+ else{
+ // effectively setting it to return no results
+ $params['relationship_type_id'] = 0;
+ }
+ }
+ }
}