Skip to content
Snippets Groups Projects
Commit 3901c3bd authored by Dave Greenberg's avatar Dave Greenberg
Browse files

Merge pull request #2681 from pradpnayak/CRM-14113

-- CRM-14113 fixed search builder error for activity type and activity s...
parents 02474214 3e4a4597
Branches
Tags
No related merge requests found
......@@ -188,32 +188,18 @@ class CRM_Activity_BAO_Query {
switch ($name) {
case 'activity_type_id':
case 'activity_type':
$types = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE);
//get the component activity types.
$compActTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE, TRUE);
$clause = array();
if (is_array($value)) {
foreach ($value as $id => $dontCare) {
if (array_key_exists($id, $types) && $dontCare) {
$clause[] = "'" . CRM_Utils_Type::escape($types[$id], 'String') . "'";
if (array_key_exists($id, $compActTypes)) {
CRM_Contact_BAO_Query::$_considerCompActivities = TRUE;
}
}
}
$activityTypes = implode(',', array_keys($value));
}
else {
$clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'";
$activityTypes = $value;
if (array_key_exists($value, $compActTypes)) {
$activityTypeIds = self::buildWhereAndQill($query, $value, $types, $op, $grouping, array('Activity Type', 'civicrm_activity.activity_type_id'));
foreach ($activityTypeIds as $activityTypeId) {
if (array_key_exists($activityTypeId, $compActTypes)) {
CRM_Contact_BAO_Query::$_considerCompActivities = TRUE;
break;
}
}
$query->_where[$grouping][] = ' civicrm_activity.activity_type_id IN (' . $activityTypes . ')';
$query->_qill[$grouping][] = ts('Activity Type') . ' ' . implode(' ' . ts('or') . ' ', $clause);
break;
case 'activity_survey_id':
......@@ -261,19 +247,8 @@ class CRM_Activity_BAO_Query {
case 'activity_status':
$status = CRM_Core_PseudoConstant::activityStatus();
$clause = array();
if (is_array($value)) {
foreach ($value as $k => $v) {
if ($k) {
$clause[] = "'" . CRM_Utils_Type::escape($status[$k], 'String') . "'";
}
}
}
else {
$clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'";
}
$query->_where[$grouping][] = ' civicrm_activity.status_id IN (' . implode(',', array_keys($value)) . ')';
$query->_qill[$grouping][] = ts('Activity Status') . ' - ' . implode(' ' . ts('or') . ' ', $clause);
$activityTypeIds = self::buildWhereAndQill($query, $value, $status, $op, $grouping, array('Activity Status', 'civicrm_activity.status_id'));
break;
case 'activity_subject':
......@@ -597,5 +572,39 @@ class CRM_Activity_BAO_Query {
return $properties;
}
static function buildWhereAndQill(&$query, $value, $pseudoconstantType, $op, $grouping, $params) {
$matches = $val = $clause = array();
if (is_array($value)) {
foreach ($value as $k => $v) {
if ($k) {
$val[] = $k;
}
}
if (count($val) > 0) {
// Overwrite $op so it works with an IN where statement.
$op = 'IN';
}
else {
// If we somehow have an empty array, just return
return;
}
$value = $matches[0] = $val;
}
else {
preg_match_all('/\d+/', $value, $matches);
}
foreach ($matches[0] as $qill) {
$clause[] = CRM_Utils_Array::value($qill, $pseudoconstantType);
}
$query->_qill[$grouping][] = ts($params[0] . ' %1 ', array(1 => $op)) . implode(' ' . ts('or') . ' ', $clause);
$query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($params[1],
$op, $value, "Integer"
);
return $matches[0];
}
}
......@@ -1629,6 +1629,7 @@ class CRM_Contact_BAO_Query {
case 'activity_subject':
case 'test_activities':
case 'activity_type_id':
case 'activity_type':
case 'activity_survey_id':
case 'activity_tags':
case 'activity_taglist':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment