CRM-21613: Search issues on 'Manage Tag' page
authordeb.monish <monish.deb@jmaconsulting.biz>
Fri, 29 Dec 2017 19:28:38 +0000 (00:58 +0530)
committerdeb.monish <monish.deb@jmaconsulting.biz>
Sat, 30 Dec 2017 14:12:42 +0000 (19:42 +0530)
CRM/Admin/Page/AJAX.php
CRM/Core/BAO/Tag.php
templates/CRM/Tag/Page/Tag.tpl

index 6a326c59046db5dab667a5d4bbb4494ba1c0294a..3b1d779f82202f06c41a6a86f1cda4a8dff8251c 100644 (file)
@@ -305,26 +305,31 @@ class CRM_Admin_Page_AJAX {
     $substring = CRM_Utils_Type::escape(CRM_Utils_Array::value('str', $_GET), 'String');
     $result = array();
 
-    $whereClauses = array(
-      'is_tagset <> 1',
-      $parent ? "parent_id = $parent" : 'parent_id IS NULL',
-    );
+    $whereClauses = array('is_tagset <> 1');
+    $orderColumn = 'name';
 
     // fetch all child tags in Array('parent_tag' => array('child_tag_1', 'child_tag_2', ...)) format
     $childTagIDs = CRM_Core_BAO_Tag::getChildTags($substring);
     $parentIDs = array_keys($childTagIDs);
 
-    if ($substring) {
+    if ($parent) {
+      $whereClauses[] = "parent_id = $parent";
+    }
+    elseif ($substring) {
       $whereClauses['substring'] = " name LIKE '%$substring%' ";
       if (!empty($parentIDs)) {
-        $whereClauses['substring'] = sprintf("( %s OR id IN (%s) )", $whereClauses['substring'], implode(',', $parentIDs));
+        $whereClauses['substring'] = sprintf(" %s OR id IN (%s) ", $whereClauses['substring'], implode(',', $parentIDs));
       }
+      $orderColumn = 'id';
+    }
+    else {
+      $whereClauses[] = "parent_id IS NULL";
     }
 
     $dao = CRM_Utils_SQL_Select::from('civicrm_tag')
             ->where($whereClauses)
             ->groupBy('id')
-            ->orderBy('name')
+            ->orderBy($orderColumn)
             ->execute();
 
     while ($dao->fetch()) {
@@ -369,6 +374,10 @@ class CRM_Admin_Page_AJAX {
       }
     }
 
+    if ($substring) {
+      $result = array_values(array_unique($result));
+    }
+
     if (!empty($_REQUEST['is_unit_test'])) {
       return $result;
     }
index 8303bc91359efe60399a77c675d06fbb0b7e8a75..7087a5a456a7f81d414e88c72084efd96609368d 100644 (file)
@@ -573,6 +573,17 @@ class CRM_Core_BAO_Tag extends CRM_Core_DAO_Tag {
               ->execute();
     while ($dao->fetch()) {
       $childTagIDs[$dao->parent_id] = (array) explode(',', $dao->child_id);
+      $parentID = $dao->parent_id;
+      if ($searchString) {
+        // recursively search for parent tag ID and it's child if any
+        while ($parentID) {
+          $newParentID = CRM_Core_DAO::singleValueQuery(" SELECT parent_id FROM civicrm_tag WHERE id = $parentID ");
+          if ($newParentID) {
+            $childTagIDs[$newParentID] = array($parentID);
+          }
+          $parentID = $newParentID;
+        }
+      }
     }
 
     // check if child tag has any childs, if found then include those child tags inside parent tag
index 61a20c86d6289b3938c17c4ba79a750c4077480c..bafa7054919ef64a8db791ffd70287f36eace504 100644 (file)
           });
 
         $('input[name=filter_tag_tree]', $panel).on('keyup change', function() {
-          if ($(this).val() == null) {
-            $('.tag-tree', $panel).jstree(true).refresh();
+          if ($(this).val() === '') {
+            $('.tag-tree', $panel).jstree("clear_search");
+            $('.tag-tree', $panel).jstree("refresh", true, true);
           }
           else {
             $(".tag-tree", $panel).jstree("search", $(this).val());