Permalink
Browse files

fixes #11439 manage tags search - drill into child nodes

  • Loading branch information...
1 parent c81ae9a commit d81756245162b2caaf4f9ea8b6fce96b6d7f7f19 @lcdservices lcdservices committed Dec 15, 2017
@@ -395,51 +395,71 @@ public static function recipientListing() {
*/
public static function getTagTree() {
$parent = CRM_Utils_Type::escape(CRM_Utils_Array::value('parent_id', $_GET, 0), 'Integer');
+ $substring = CRM_Utils_Type::escape(CRM_Utils_Array::value('str', $_GET), 'String');//NYSS 11439
$result = array();
- $parentClause = $parent ? "AND parent_id = $parent" : 'AND parent_id IS NULL';
- $sql = "SELECT *
- FROM civicrm_tag
- WHERE is_tagset <> 1 $parentClause
- GROUP BY id
- ORDER BY name";
+ //NYSS 11439
+ $whereClauses = array(
+ 'is_tagset <> 1',
+ $parent ? "parent_id = $parent" : 'parent_id IS NULL',
+ );
// fetch all child tags in Array('parent_tag' => array('child_tag_1', 'child_tag_2', ...)) format
- $childTagIDs = CRM_Core_BAO_Tag::getChildTags();
+ $childTagIDs = CRM_Core_BAO_Tag::getChildTags($substring);
+ $parentIDs = array_keys($childTagIDs);
+
+ if ($substring) {
+ $whereClauses['substring'] = " name LIKE '%$substring%' ";
+ if (!empty($parentIDs)) {
+ $whereClauses['substring'] = sprintf("( %s OR id IN (%s) )", $whereClauses['substring'], implode(',', $parentIDs));
+ }
+ }
- $dao = CRM_Core_DAO::executeQuery($sql);
+ $dao = CRM_Utils_SQL_Select::from('civicrm_tag')
+ ->where($whereClauses)
+ ->groupBy('id')
+ ->orderBy('name')
+ ->execute();
while ($dao->fetch()) {
- $style = '';
- if ($dao->color) {
- $style = "background-color: {$dao->color}; color: " . CRM_Utils_Color::getContrast($dao->color);
+ if (!empty($substring)) {
+ $result[] = $dao->id;
+ if (!empty($childTagIDs[$dao->id])) {
+ $result = array_merge($result, $childTagIDs[$dao->id]);
+ }
+ }
+ else {
+ $style = '';
+ if ($dao->color) {
+ $style = "background-color: {$dao->color}; color: " . CRM_Utils_Color::getContrast($dao->color);
+ }
+ $hasChildTags = empty($childTagIDs[$dao->id]) ? FALSE : TRUE;
+ $usedFor = (array) explode(',', $dao->used_for);
+ $result[] = array(
+ 'id' => $dao->id,
+ 'text' => $dao->name,
+ 'icon' => FALSE,
+ 'li_attr' => array(
+ 'title' => ((string) $dao->description) . ($dao->is_reserved ? ' (*' . ts('Reserved') . ')' : ''),
+ 'class' => $dao->is_reserved ? 'is-reserved' : '',
+ ),
+ 'a_attr' => array(
+ 'style' => $style,
+ 'class' => 'crm-tag-item',
+ ),
+ 'children' => $hasChildTags,
+ 'data' => array(
+ 'description' => (string) $dao->description,
+ 'is_selectable' => (bool) $dao->is_selectable,
+ 'is_reserved' => (bool) $dao->is_reserved,
+ 'used_for' => $usedFor,
+ 'color' => $dao->color ? $dao->color : '#ffffff',
+ 'usages' => civicrm_api3('EntityTag', 'getcount', array(
+ 'entity_table' => array('IN' => $usedFor),
+ 'tag_id' => $dao->id,
+ )),
+ ),
+ );
}
- $hasChildTags = empty($childTagIDs[$dao->id]) ? FALSE : TRUE;
- $usedFor = (array) explode(',', $dao->used_for);
- $result[] = array(
- 'id' => $dao->id,
- 'text' => $dao->name,
- 'icon' => FALSE,
- 'li_attr' => array(
- 'title' => ((string) $dao->description) . ($dao->is_reserved ? ' (*' . ts('Reserved') . ')' : ''),
- 'class' => $dao->is_reserved ? 'is-reserved' : '',
- ),
- 'a_attr' => array(
- 'style' => $style,
- 'class' => 'crm-tag-item',
- ),
- 'children' => $hasChildTags,
- 'data' => array(
- 'description' => (string) $dao->description,
- 'is_selectable' => (bool) $dao->is_selectable,
- 'is_reserved' => (bool) $dao->is_reserved,
- 'used_for' => $usedFor,
- 'color' => $dao->color ? $dao->color : '#ffffff',
- 'usages' => civicrm_api3('EntityTag', 'getcount', array(
- 'entity_table' => array('IN' => $usedFor),
- 'tag_id' => $dao->id,
- )),
- ),
- );
}
if (!empty($_REQUEST['is_unit_test'])) {
Oops, something went wrong.

0 comments on commit d817562

Please sign in to comment.