X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContact%2FForm%2FEdit%2FTagsAndGroups.php;h=d7b91d266ebd7683ef061809b045f2d41d02c5a7;hb=d3c71b2f4fb869348bdaf270fc02fdc4f29b8641;hp=2b2366a42f84e66b2d7bf42d933583449ba5c124;hpb=e425a965789b9e5a86069069c8fa18c50d3e2b6a;p=civicrm-core.git diff --git a/CRM/Contact/Form/Edit/TagsAndGroups.php b/CRM/Contact/Form/Edit/TagsAndGroups.php index 2b2366a42f..d7b91d266e 100644 --- a/CRM/Contact/Form/Edit/TagsAndGroups.php +++ b/CRM/Contact/Form/Edit/TagsAndGroups.php @@ -35,7 +35,7 @@ class CRM_Contact_Form_Edit_TagsAndGroups { /** - * constant to determine which forms we are generating + * Constant to determine which forms we are generating * * Used by both profile and edit contact */ @@ -45,13 +45,16 @@ class CRM_Contact_Form_Edit_TagsAndGroups { * This function is to build form elements * params object $form object of the form * - * @param Object $form the form object that we are operating on - * @param int $contactId contact id - * @param int $type what components are we interested in - * @param boolean $visibility visibility of the field - * @param string $groupName if used for building group block - * @param string $tagName if used for building tag block - * @param string $fieldName this is used in batch profile(i.e to build multiple blocks) + * @param CRM_Core_Form $form the form object that we are operating on + * @param int $contactId contact id + * @param int $type what components are we interested in + * @param boolean $visibility visibility of the field + * @param null $isRequired + * @param string $groupName if used for building group block + * @param string $tagName if used for building tag block + * @param string $fieldName this is used in batch profile(i.e to build multiple blocks) + * + * @param string $groupElementType * * @static * @access public @@ -110,7 +113,7 @@ class CRM_Contact_Form_Edit_TagsAndGroups { ) { continue; } - + if ($groupElementType == 'select') { $groupsOptions[$id] = $group['title']; } @@ -139,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'); @@ -161,20 +173,37 @@ 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, TRUE, TRUE); + 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 + * Set defaults for relevant form elements * - * @param int $id the contact id - * @param array $defaults the defaults array to store the values in - * @param int $type what components are we interested in + * @param int $id the contact id + * @param array $defaults the defaults array to store the values in + * @param int $type what components are we interested in * @param string $fieldName this is used in batch profile(i.e to build multiple blocks) * + * @param string $groupElementType + * * @return void * @access public * @static @@ -216,11 +245,14 @@ class CRM_Contact_Form_Edit_TagsAndGroups { } /** - * This function sets the default values for the form. Note that in edit/view mode + * Set default values for the form. Note that in edit/view mode * the default values are retrieved from the database * * @access public * + * @param CRM_Core_Form $form + * @param $defaults + * * @return void */ public static function setDefaultValues(&$form, &$defaults) {