$joinTable = 'contact_a';
}
elseif ($field['extends'] == 'civicrm_contribution') {
- $joinTable = 'civicrm_contribution';
- }
- elseif ($field['extends'] == 'civicrm_participant') {
- $joinTable = 'civicrm_participant';
- }
- elseif ($field['extends'] == 'civicrm_membership') {
- $joinTable = 'civicrm_membership';
- }
- elseif ($field['extends'] == 'civicrm_pledge') {
- $joinTable = 'civicrm_pledge';
- }
- elseif ($field['extends'] == 'civicrm_activity') {
- $joinTable = 'civicrm_activity';
+ $joinTable = $field['extends'];
}
- elseif ($field['extends'] == 'civicrm_relationship') {
- $joinTable = 'civicrm_relationship';
+ elseif (in_array($field['extends'], self::$extendsMap)) {
+ $joinTable = $field['extends'];
}
- elseif ($field['extends'] == 'civicrm_grant') {
- $joinTable = 'civicrm_grant';
+ else {
+ return;
}
- elseif ($field['extends'] == 'civicrm_address') {
- $joinTable = 'civicrm_address';
- }
- elseif ($field['extends'] == 'civicrm_case') {
- $joinTable = 'civicrm_case';
+
+ $this->_tables[$name] = "\nLEFT JOIN $name ON $name.entity_id = $joinTable.id";
+
+ if ($this->_ids[$id]) {
+ $this->_whereTables[$name] = $this->_tables[$name];
}
- if ($joinTable != 'contact_a') {
- $this->_whereTables[$joinTable] = $this->_tables[$joinTable] = 1;
- }
- elseif ($this->_contactSearch) {
- CRM_Contact_BAO_Query::$_openedPanes[ts('Custom Fields')] = TRUE;
+ if ($joinTable) {
+ $joinClause = 1;
+ $joinTableAlias = $joinTable;
+ // Set location-specific query
+ if (isset($this->_locationSpecificCustomFields[$id])) {
+ list($locationType, $locationTypeId) = $this->_locationSpecificCustomFields[$id];
+ $joinTableAlias = "$locationType-address";
+ $joinClause = "\nLEFT JOIN $joinTable `$locationType-address` ON (`$locationType-address`.contact_id = contact_a.id AND `$locationType-address`.location_type_id = $locationTypeId)";
+ }
+ $this->_tables[$name] = "\nLEFT JOIN $name ON $name.entity_id = `$joinTableAlias`.id";
+ if ($this->_ids[$id]) {
+ $this->_whereTables[$name] = $this->_tables[$name];
+ }
+ if ($joinTable != 'contact_a') {
+ $this->_whereTables[$joinTableAlias] = $this->_tables[$joinTableAlias] = $joinClause;
+ }
+ elseif ($this->_contactSearch) {
+ CRM_Contact_BAO_Query::$_openedPanes[ts('Custom Fields')] = TRUE;
+ }
}
}
}