Towards CRM-19447 (activity search by subject/details): basic functionality
authorAllen Shaw <allen@JoineryHQ.com>
Wed, 14 Dec 2016 01:46:39 +0000 (19:46 -0600)
committerdeb.monish <monish.deb@webaccessglobal.com>
Thu, 29 Dec 2016 09:22:51 +0000 (14:52 +0530)
CRM/Activity/BAO/Query.php
CRM/Activity/Form/Search.php
CRM/Contact/BAO/Query.php
CRM/Contact/Form/Search/Advanced.php
templates/CRM/Activity/Form/Search/Common.tpl

index 737630b4da5e7d759bf2b5ba76cf3ec04ad1c2e2..8dc44b30edc6af9c7a2bac99fcebf40cb864d2ae 100644 (file)
@@ -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));
+  }
+
 }
index 9cd9c78b1a25921d394e499e007c2fcf91727523..25cb120f8c7ac80630e70a9704bfa6bf55056f21 100644 (file)
@@ -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);
index cb9a448a34519991bc45da806f37edbee4d4221c..b87ffbfaf21de03b6c287f962b15819037980756 100644 (file)
@@ -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;
   }
 
   /**
index 8d9f4b439212f50bfe3ddd1c8aa5469afe1bad62..ffcb35ab79f0d7dd047806025b6ae80a2fd914d0 100644 (file)
@@ -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',
index a839d6bf696719a1944366d04fef146abc4a2f48..70bacb3df4cce43d354d4eb4ede8ce7ffa43e4b3 100644 (file)
@@ -96,8 +96,9 @@
 </tr>
 <tr>
   <td>
-    {$form.activity_subject.label}<br/>
-    {$form.activity_subject.html|crmAddClass:big}
+    {$form.activity.label}<br/>
+    {$form.activity.html|crmAddClass:big}<br/>
+    {$form.activity_option.html}<br/>
   </td>
   <td colspan="2">
     {$form.status_id.label}<br/>