From 3e4a4597633d9981932048e51d067bfe278c3161 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Sat, 15 Mar 2014 21:42:48 +0530 Subject: [PATCH] -- CRM-14113 fixed search builder error for activity type and activity status ---------------------------------------- * CRM-14113: Activity Search Builder http://issues.civicrm.org/jira/browse/CRM-14113 --- CRM/Activity/BAO/Query.php | 75 +++++++++++++++++++++----------------- CRM/Contact/BAO/Query.php | 1 + 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/CRM/Activity/BAO/Query.php b/CRM/Activity/BAO/Query.php index ed3b9b07fc..6eeb8bfdad 100644 --- a/CRM/Activity/BAO/Query.php +++ b/CRM/Activity/BAO/Query.php @@ -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]; + } } diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index 3b6a00d7f8..7757decbb0 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -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': -- 2.25.1