From 6dac2504dbbadd5830da919b467f4bad9574b64c Mon Sep 17 00:00:00 2001 From: TeNNoX Date: Mon, 22 Sep 2014 17:43:06 +0100 Subject: [PATCH] Applied clean patch from bettertagoverview2 --- CRM/Contact/Form/Edit/TagsAndGroups.php | 42 +++++++-- CRM/Core/BAO/Tag.php | 3 +- .../CRM/Contact/Form/Edit/TagsAndGroups.tpl | 88 +++++++++++++------ templates/CRM/Contact/Form/Edit/Tagtree.tpl | 41 +++++++++ templates/CRM/Tag/Form/Tagtree.tpl | 2 +- 5 files changed, 140 insertions(+), 36 deletions(-) create mode 100644 templates/CRM/Contact/Form/Edit/Tagtree.tpl diff --git a/CRM/Contact/Form/Edit/TagsAndGroups.php b/CRM/Contact/Form/Edit/TagsAndGroups.php index 8e09b3af29..539f7206cb 100644 --- a/CRM/Contact/Form/Edit/TagsAndGroups.php +++ b/CRM/Contact/Form/Edit/TagsAndGroups.php @@ -142,21 +142,30 @@ class CRM_Contact_Form_Edit_TagsAndGroups { } if ($type & self::TAG) { + // CODE FROM CRM/Tag/Form/Tag.php // + CRM_Core_Resources::singleton() + ->addScriptFile('civicrm', 'packages/jquery/plugins/jstree/jquery.jstree.js', 0, 'html-header', FALSE) + ->addStyleFile('civicrm', 'packages/jquery/plugins/jstree/themes/default/style.css', 0, 'html-header'); + $fName = 'tag'; if ($fieldName) { $fName = $fieldName; } $form->_tagGroup[$fName] = 1; + + // get the list of all the categories + $tags = new CRM_Core_BAO_Tag(); + $tree = $tags->getTree('civicrm_contact', TRUE); + $elements = array(); - $tag = CRM_Core_BAO_Tag::getTags(); + self::climbtree($form, $tree, $elements); - foreach ($tag as $id => $name) { - $elements[] = $form->createElement('checkbox', $id, NULL, $name); - } - if (!empty($elements)) { - $form->addGroup($elements, $fName, $tagName, '
'); - $form->assign('tagCount', count($elements)); - } + $form->addGroup($elements, $fName, $tagName, '
'); + $form->assign('tagCount', count($elements)); + $form->assign('tree', $tree); + $form->assign('tag', $tree); + $form->assign('entityID', $contactId); + $form->assign('entityTable', 'civicrm_contact'); if ($isRequired) { $form->addRule($fName, ts('%1 is a required field.', array(1 => $tagName)), 'required'); @@ -164,11 +173,26 @@ class CRM_Contact_Form_Edit_TagsAndGroups { // build tag widget $parentNames = CRM_Core_BAO_Tag::getTagSet('civicrm_contact'); - CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_contact', $contactId, FALSE, TRUE); } $form->assign('tagGroup', $form->_tagGroup); } + + static function climbtree($form, $tree, &$elements) { + foreach ($tree as $tagID => $varValue) { + $tagAttribute = array( + 'onclick' => "return changeRowColor(\"rowidtag_$tagID\")", + 'id' => "tag_{$tagID}", + ); + + $elements[$tagID] = $form->createElement('checkbox', $tagID, '', '', $tagAttribute); + + if (array_key_exists('children', $varValue)) { + self::climbtree($form, $varValue['children'], $elements); + } + } + return $elements; + } /** * set defaults for relevant form elements diff --git a/CRM/Core/BAO/Tag.php b/CRM/Core/BAO/Tag.php index 1b8e840aa2..065ef53d2a 100644 --- a/CRM/Core/BAO/Tag.php +++ b/CRM/Core/BAO/Tag.php @@ -84,7 +84,7 @@ class CRM_Core_BAO_Tag extends CRM_Core_DAO_Tag { * @param bool $excludeHidden */ function buildTree($usedFor = NULL, $excludeHidden = FALSE) { - $sql = "SELECT id, parent_id, name, description FROM civicrm_tag"; + $sql = "SELECT id, parent_id, name, description, is_selectable FROM civicrm_tag"; $whereClause = array(); if ($usedFor) { @@ -109,6 +109,7 @@ class CRM_Core_BAO_Tag extends CRM_Core_DAO_Tag { $thisref['parent_id'] = $dao->parent_id; $thisref['name'] = $dao->name; $thisref['description'] = $dao->description; + $thisref['is_selectable'] = $dao->is_selectable; if (!$dao->parent_id) { $this->tree[$dao->id] = &$thisref; diff --git a/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl b/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl index 7db44d910a..bc40ef11a3 100644 --- a/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl +++ b/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl @@ -23,6 +23,63 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} +{literal} + + + {if $title}