}
$field = $this->_fields[$elementName] ?? NULL;
- if (isset($this->_pseudoConstantsSelect[$field['name']])) {
- $this->_pseudoConstantsSelect[$name . '-' . $field['name']] = $this->_pseudoConstantsSelect[$field['name']];
+ if (!empty($field)) {
+ if (isset($this->_pseudoConstantsSelect[$field['name']])) {
+ $this->_pseudoConstantsSelect[$name . '-' . $field['name']] = $this->_pseudoConstantsSelect[$field['name']];
+ }
}
// hack for profile, add location id
if (CRM_Core_Permission::check('access deleted contacts')) {
if (!$onlyDeleted) {
- $this->_permissionWhereClause = str_replace('( 1 )', '(contact_a.is_deleted = 0)', $this->_permissionWhereClause);
+ $this->_permissionWhereClause .= ' AND (contact_a.is_deleted = 0)';
}
else {
- if ($this->_permissionWhereClause === '( 1 )') {
- $this->_permissionWhereClause = str_replace('( 1 )', '(contact_a.is_deleted)', $this->_permissionWhereClause);
- }
- else {
- $this->_permissionWhereClause .= " AND (contact_a.is_deleted) ";
- }
+ $this->_permissionWhereClause .= " AND (contact_a.is_deleted) ";
}
}
return $clause;
case 'RLIKE':
- return " {$clause} BINARY '{$value}' ";
+ return " CAST({$field} AS BINARY) RLIKE BINARY '{$value}' ";
case 'IN':
case 'NOT IN':
$this->_qill[0][] = $iqill;
}
if (strpos($from, $qcache['from']) === FALSE) {
- // lets replace all the INNER JOIN's in the $from so we dont exclude other data
- // this happens when we have an event_type in the quert (CRM-7969)
- $from = str_replace("INNER JOIN", "LEFT JOIN", $from);
- $from .= $qcache['from'];
+ if (strpos($from, "INNER JOIN") !== FALSE) {
+ // lets replace all the INNER JOIN's in the $from so we dont exclude other data
+ // this happens when we have an event_type in the quert (CRM-7969)
+ $from = str_replace("INNER JOIN", "LEFT JOIN", $from);
+ // Make sure the relationship join right after the FROM and other joins afterwards.
+ // This gives us the possibility to change the join on civicrm case.
+ $from = preg_replace("/LEFT JOIN/", $qcache['from'] . " LEFT JOIN", $from, 1);
+ }
+ else {
+ $from .= $qcache['from'];
+ }
$where = $qcache['where'];
+ if (!empty($this->_tables['civicrm_case'])) {
+ // Change the join on CiviCRM case so that it joins on the right contac from the relationship.
+ $from = str_replace("ON civicrm_case_contact.contact_id = contact_a.id", "ON civicrm_case_contact.contact_id = transform_temp.contact_id", $from);
+ $where .= " AND displayRelType.case_id = civicrm_case_contact.case_id ";
+ }
if (!empty($this->_permissionFromClause) && !stripos($from, 'aclContactCache')) {
$from .= " $this->_permissionFromClause";
}