From c9c5c58d36a8427b736be7e9453c0176305aa659 Mon Sep 17 00:00:00 2001 From: Allen Shaw Date: Tue, 13 Dec 2016 19:46:39 -0600 Subject: [PATCH] Towards CRM-19447 (activity search by subject/details): basic functionality --- CRM/Activity/BAO/Query.php | 61 ++++++++++++++++++- CRM/Activity/Form/Search.php | 1 + CRM/Contact/BAO/Query.php | 6 +- CRM/Contact/Form/Search/Advanced.php | 1 + templates/CRM/Activity/Form/Search/Common.tpl | 5 +- 5 files changed, 68 insertions(+), 6 deletions(-) diff --git a/CRM/Activity/BAO/Query.php b/CRM/Activity/BAO/Query.php index 737630b4da..8dc44b30ed 100644 --- a/CRM/Activity/BAO/Query.php +++ b/CRM/Activity/BAO/Query.php @@ -190,7 +190,6 @@ class CRM_Activity_BAO_Query { case 'activity_type_id': case 'activity_status_id': case 'activity_engagement_level': - case 'activity_subject': case 'activity_id': case 'activity_campaign_id': @@ -198,7 +197,7 @@ class CRM_Activity_BAO_Query { if (in_array($name, array('activity_engagement_level', 'activity_id'))) { $name = $qillName = str_replace('activity_', '', $name); } - if (in_array($name, array('activity_status_id', 'activity_subject'))) { + if (in_array($name, array('activity_status_id'))) { $name = str_replace('activity_', '', $name); $qillName = str_replace('_id', '', $qillName); } @@ -213,6 +212,12 @@ class CRM_Activity_BAO_Query { $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$qillName]['title'], 2 => $op, 3 => $value)); break; + case 'activity': + case 'activity_details': + case 'activity_subject': + self::activity($values, $query); + break; + case 'activity_type': case 'activity_status': $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("$name.label", $op, $value, 'String'); @@ -426,7 +431,15 @@ class CRM_Activity_BAO_Query { array('entity' => 'activity', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -')) ); $form->setDefaults(array('status_id' => array($activityStatus['Completed'], $activityStatus['Scheduled']))); - $form->addElement('text', 'activity_subject', ts('Subject'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); + $form->addElement('text', 'activity', ts('Activity Text'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); + $activity_options = array( + 2 => ts('Details Only'), + 3 => ts('Subject Only'), + 6 => ts('Both'), + ); + $form->addRadio('activity_option', '', $activity_options); + $form->setDefaults(array('activity_option' => 6)); + $form->addYesNo('activity_test', ts('Activity is a Test?')); $activity_tags = CRM_Core_BAO_Tag::getTags('civicrm_activity'); if ($activity_tags) { @@ -558,4 +571,46 @@ class CRM_Activity_BAO_Query { return empty($errors) ? TRUE : $errors; } + /** + * Where/qill clause for notes + * + * @param array $values + */ + public static function activity(&$values, &$query) { + list($name, $op, $value, $grouping, $wildcard) = $values; + + $activityOptionValues = $query->getWhereValues('activity_option', $grouping); + $activityOption = CRM_Utils_Array::value('2', $activityOptionValues, '6'); + $activityOption = ($name == 'activity_details') ? 2 : (($name == 'activity_subject') ? 3 : $activityOption); + + $query->_useDistinct = TRUE; + + $strtolower = function_exists('mb_strtolower') ? 'mb_strtolower' : 'strtolower'; + $n = trim($value); + $value = $strtolower(CRM_Core_DAO::escapeString($n)); + if ($wildcard) { + if (strpos($value, '%') === FALSE) { + $value = "%$value%"; + } + $op = 'LIKE'; + } + elseif ($op == 'IS NULL' || $op == 'IS NOT NULL') { + $value = NULL; + } + + $label = NULL; + $clauses = array(); + if ($activityOption % 2 == 0) { + $clauses[] = $query->buildClause('civicrm_activity.details', $op, $value, 'String'); + $label = ts('Activity: Details Only'); + } + if ($activityOption % 3 == 0) { + $clauses[] = $query->buildClause('civicrm_activity.subject', $op, $value, 'String'); + $label = $label ? ts('Activity: Details or Subject') : ts('Activity: Subject Only'); + } + $query->_where[$grouping][] = "( " . implode(' OR ', $clauses) . " )"; + list($qillOp, $qillVal) = $query->buildQillForFieldValue(NULL, $name, $n, $op); + $query->_qill[$grouping][] = ts("%1 %2 %3", array(1 => $label, 2 => $qillOp, 3 => $qillVal)); + } + } diff --git a/CRM/Activity/Form/Search.php b/CRM/Activity/Form/Search.php index 9cd9c78b1a..25cb120f8c 100644 --- a/CRM/Activity/Form/Search.php +++ b/CRM/Activity/Form/Search.php @@ -196,6 +196,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { 'activity_type_id', 'status_id', 'activity_subject', + 'activity_details', ); $changeNames = array('status_id' => 'activity_status_id'); CRM_Contact_BAO_Query::processSpecialFormValue($this->_formValues, $specialParams, $changeNames); diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index cb9a448a34..b87ffbfaf2 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -1886,6 +1886,9 @@ class CRM_Contact_BAO_Query { case 'followup_parent_id': case 'parent_id': case 'source_contact_id': + case 'activity': + case 'activity_option': + case 'activity_details': case 'activity_subject': case 'test_activities': case 'activity_type_id': @@ -4262,7 +4265,8 @@ civicrm_relationship.is_permission_a_b = 0 list($select, $from, $where, $having) = $query->query(); $groupBy = ($query->_useGroupBy) ? 'GROUP BY contact_a.id' : ''; - return "$select $from $where $groupBy $having"; + $query = "$select $from $where $groupBy $having"; + return $query; } /** diff --git a/CRM/Contact/Form/Search/Advanced.php b/CRM/Contact/Form/Search/Advanced.php index 8d9f4b4392..ffcb35ab79 100644 --- a/CRM/Contact/Form/Search/Advanced.php +++ b/CRM/Contact/Form/Search/Advanced.php @@ -343,6 +343,7 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search { 'activity_type_id', 'status_id', 'activity_subject', + 'activity_details', 'contribution_page_id', 'contribution_product_id', 'payment_instrument_id', diff --git a/templates/CRM/Activity/Form/Search/Common.tpl b/templates/CRM/Activity/Form/Search/Common.tpl index a839d6bf69..70bacb3df4 100644 --- a/templates/CRM/Activity/Form/Search/Common.tpl +++ b/templates/CRM/Activity/Form/Search/Common.tpl @@ -96,8 +96,9 @@ - {$form.activity_subject.label}
- {$form.activity_subject.html|crmAddClass:big} + {$form.activity.label}
+ {$form.activity.html|crmAddClass:big}
+ {$form.activity_option.html}
{$form.status_id.label}
-- 2.25.1