$this->_qill[$grouping][] = ts("%1 %2 %3", [1 => $field['title'], 2 => $qillop, 3 => $qillVal]);
}
elseif (!empty($field['pseudoconstant'])) {
+ // For the hacked fields we want to undo the hack to type to avoid missing the index by adding quotes.
+ $dataType = !empty($this->legacyHackedFields[$name]) ? CRM_Utils_Type::T_INT : $field['type'];
$this->optionValueQuery(
$name, $op, $value, $grouping,
'CRM_Contact_DAO_Contact',
$field,
$field['title'],
- 'String',
+ CRM_Utils_Type::typeToString($dataType),
TRUE
);
- if ($name == 'gender_id') {
+ if ($name === 'gender_id') {
self::$_openedPanes[ts('Demographics')] = TRUE;
}
}
'email_greeting',
'postal_greeting',
'addressee',
- 'gender_id',
- 'prefix_id',
- 'suffix_id',
- 'communication_style_id',
];
if ($useIDsOnly) {
// Special handling for on_hold, so that we actually use the 'where'
// property in order to limit the query by the on_hold status of the email,
// instead of using email.id which would be nonsensical.
- if ($field['name'] == 'on_hold') {
- $wc = "{$field['where']}";
+ if ($field['name'] === 'on_hold') {
+ $wc = $field['where'];
}
else {
$wc = "$tableName.id";
$wc = "{$field['where']}";
}
if (in_array($name, $pseudoFields)) {
- if (!in_array($name, ['gender_id', 'prefix_id', 'suffix_id', 'communication_style_id'])) {
- $wc = "contact_a.{$name}_id";
- }
+ $wc = "contact_a.{$name}_id";
$dataType = 'Positive';
$value = (!$value) ? 0 : $value;
}
$this->assertEquals(['=', 'Normal'], $qill);
}
+ /**
+ * Test tests that a value on 'any entity' with the right metadata will be handled.
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testGenericWhereHandling() {
+ $query = new CRM_Contact_BAO_Query([['suffix_id', '=', 2, 0]]);
+ $this->assertEquals("contact_a.suffix_id = 2", $query->_where[0][0]);
+ $this->assertEquals('Individual Suffix = Sr.', $query->_qill[0][0]);
+ $this->assertNotTrue(isset($query->_tables['civicrm_activity']));
+
+ $query = new CRM_Contact_BAO_Query([['prefix_id', '=', 2, 0]]);
+ $this->assertEquals('contact_a.prefix_id = 2', $query->_where[0][0]);
+ $this->assertEquals('Individual Prefix = Ms.', $query->_qill[0][0]);
+ $this->assertNotTrue(isset($query->_tables['civicrm_activity']));
+
+ $query = new CRM_Contact_BAO_Query([['gender_id', '=', 2, 0]]);
+ $this->assertEquals('contact_a.gender_id = 2', $query->_where[0][0]);
+ $this->assertEquals('Gender = Male', $query->_qill[0][0]);
+ $this->assertNotTrue(isset($query->_tables['civicrm_activity']));
+
+ $query = new CRM_Contact_BAO_Query([['communication_style_id', '=', 2, 0]]);
+ $this->assertEquals('contact_a.communication_style_id = 2', $query->_where[0][0]);
+ $this->assertEquals('Communication Style = Familiar', $query->_qill[0][0]);
+
+ $query = new CRM_Contact_BAO_Query([['communication_style_id', '=', 2, 0]]);
+ $this->assertEquals('contact_a.communication_style_id = 2', $query->_where[0][0]);
+ $this->assertEquals('Communication Style = Familiar', $query->_qill[0][0]);
+
+ $query = new CRM_Contact_BAO_Query([['contact_type', '=', 'Household', 0]]);
+ $this->assertEquals("contact_a.contact_type = 'Household'", $query->_where[0][0]);
+ $this->assertEquals('Contact Type = Household', $query->_qill[0][0]);
+
+ $query = new CRM_Contact_BAO_Query([['on_hold', '=', 0, 0]]);
+ $this->assertEquals('civicrm_email.on_hold = 0', $query->_where[0][0]);
+ $this->assertEquals('On Hold = 0', $query->_qill[0][0]);
+
+ $query = new CRM_Contact_BAO_Query([['on_hold', '=', 1, 0]]);
+ $this->assertEquals('civicrm_email.on_hold = 1', $query->_where[0][0]);
+ $this->assertEquals('On Hold = 1', $query->_qill[0][0]);
+
+ $query = new CRM_Contact_BAO_Query([['world_region', '=', 3, 0]]);
+ $this->assertEquals('civicrm_worldregion.id = 3', $query->_where[0][0]);
+ $this->assertEquals('World Region = Middle East and North Africa', $query->_qill[0][0]);
+ }
+
}