CRM-20673: Tag and group edit form: implement Select2 for tags
authordeb.monish <monish.deb@jmaconsulting.biz>
Wed, 14 Jun 2017 20:09:46 +0000 (01:39 +0530)
committerdeb.monish <monish.deb@jmaconsulting.biz>
Sat, 17 Jun 2017 17:56:55 +0000 (23:26 +0530)
CRM/Contact/Form/Contact.php
CRM/Contact/Form/Edit/TagsAndGroups.php
templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl
templates/CRM/common/Tagset.tpl

index 0a1c077b62c1c1c594aa826cca116cac53b3ff5e..0c9eb8fbc842dec7abab73d1c14673f911e0ca1a 100644 (file)
@@ -992,6 +992,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form {
 
     if (array_key_exists('TagsAndGroups', $this->_editOptions)) {
       //add contact to tags
+      $params['tag'] = array_flip(explode(',', $params['tag']));
       CRM_Core_BAO_EntityTag::create($params['tag'], 'civicrm_contact', $params['contact_id']);
 
       //save free tags
index def736d726e8eb8860deb2df56ef349ba6592e98..87b5d418917d4131fca2bcc6211d0ab78968cd16 100644 (file)
@@ -128,7 +128,7 @@ class CRM_Contact_Form_Edit_TagsAndGroups {
 
         if ($groupElementType == 'select' && !empty($groupsOptions)) {
           $form->add('select', $fName, $groupName, $groupsOptions, FALSE,
-            array('id' => $fName, 'multiple' => 'multiple', 'class' => 'crm-select2')
+            array('id' => $fName, 'multiple' => 'multiple', 'class' => 'crm-select2', 'style' => 'width: 310px')
           );
           $form->assign('groupCount', count($groupsOptions));
         }
@@ -145,72 +145,17 @@ class CRM_Contact_Form_Edit_TagsAndGroups {
     }
 
     if ($type & self::TAG) {
-      $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);
-      // let's not load jstree if there are not children. This also fixes blank
-      // display at the beginning of checkboxes
-      $loadJsTree = CRM_Utils_Array::retrieveValueRecursive($tree, 'children');
-      $form->assign('loadjsTree', FALSE);
-      if (!empty($loadJsTree)) {
-        // 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');
-        $form->assign('loadjsTree', TRUE);
-      }
-
-      $elements = array();
-      self::climbtree($form, $tree, $elements);
-
-      $form->addGroup($elements, $fName, $tagName, '<br />');
-      $form->assign('tagCount', count($elements));
-      $form->assign('tree', $tree);
-      $form->assign('tag', $tree);
-      $form->assign('entityID', $contactId);
-      $form->assign('entityTable', 'civicrm_contact');
-      $form->assign('allTags', CRM_Core_BAO_Tag::getTagsUsedFor('civicrm_contact', FALSE));
+      $tags = CRM_Core_BAO_Tag::getColorTags('civicrm_contact');
 
-      if ($isRequired) {
-        $form->addRule($fName, ts('%1 is a required field.', array(1 => $tagName)), 'required');
+      if (!empty($tags)) {
+        $form->add('select2', 'tag', ts('Tag(s)'), $tags, FALSE, array('class' => 'huge', 'placeholder' => ts('- select -'), 'multiple' => TRUE));
       }
-
-      // 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);
-  }
 
-  /**
-   * Climb tree.
-   *
-   * @param $form
-   * @param $tree
-   * @param $elements
-   *
-   * @return mixed
-   */
-  public 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, '', $varValue['name'], $tagAttribute);
-
-      if (array_key_exists('children', $varValue)) {
-        self::climbtree($form, $varValue['children'], $elements);
-      }
-    }
-    return $elements;
+    // 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);
   }
 
   /**
@@ -249,17 +194,8 @@ class CRM_Contact_Form_Edit_TagsAndGroups {
     }
 
     if ($type & self::TAG) {
-      $fName = 'tag';
-      if ($fieldName) {
-        $fName = $fieldName;
-      }
-
-      $contactTag = CRM_Core_BAO_EntityTag::getTag($id);
-      if ($contactTag) {
-        foreach ($contactTag as $tag) {
-          $defaults[$fName . '[' . $tag . ']'] = 1;
-        }
-      }
+      $defaults['tag'] = implode(',', CRM_Core_BAO_EntityTag::getTag($id, 'civicrm_contact'));
+      CRM_Core_Error::debug_var('tag', $defaults['tag']);
     }
   }
 
index 9e2da5f8f6eaaafe76e957c53fc3f9554bc421c4..2c14b4ef981ac8fbc9c450bf76f79856e8a41f2b 100644 (file)
   <div class="crm-accordion-header">{$title}</div>
   <div class="crm-accordion-body" id="tagGroup">
 {/if}
-<div class="form-layout-compressed{if $context EQ 'profile'} crm-profile-tagsandgroups{/if}">
-  {if !$type || $type eq 'group'}
-    <div class="crm-section crm-clearfix">
-      {if $title}
-        <div class="label">{$form.group.label}</div>
-      {/if}
-      {if $groupElementType eq 'select'}
-        <div class="content">{$form.group.html}</div>
-      {else}
-        {foreach key=key item=item from=$tagGroup.group}
-          <div class="group-wrapper">
-            {$form.group.$key.html}
-            {if $item.description}
-              <span class="description">{$item.description}</span>
+    <table class="form-layout-compressed{if $context EQ 'profile'} crm-profile-tagsandgroups{/if}">
+      <tr>
+        {if !$type || $type eq 'tag'}
+          <td>
+            <span class="label">{if $title}{$form.tag.label}{/if}</span><br />
+            {$form.tag.html}
+          </td>
+        {/if}
+        {if !$type || $type eq 'group'}
+          <td>
+            {if $groupElementType eq 'select'}
+              <span class="label">{if $title}{$form.group.label}{/if}</span>
+              {$form.group.html}
+            {else}
+              {foreach key=key item=item from=$tagGroup.group}
+                <div class="group-wrapper">
+                  {$form.group.$key.html}
+                  {if $item.description}
+                    <div class="description">{$item.description}</div>
+                  {/if}
+                </div>
+              {/foreach}
             {/if}
-          </div>
-        {/foreach}
-      {/if}
-    </div>
-  {/if}
-  {if (!$type || $type eq 'tag') && $tree}
-    <div class="crm-section crm-clearfix">
-      {if $title}
-        <div class="label">{$form.tag.label}</div>
+          </td>
+        {/if}
+      </tr>
+      {if !$type || $type eq 'tag'}
+        <tr><td>{include file="CRM/common/Tagset.tpl"}</td></tr>
       {/if}
-      <div class="content" id="tagtree">
-        {include file="CRM/Contact/Form/Edit/Tagtree.tpl" level=1}
-      </div>
-    </div>
-    {include file="CRM/common/Tagset.tpl"}
-  {/if}
-</div>
+    </table>
 {if $title}
   </div>
 </div><!-- /.crm-accordion-wrapper -->
index 94da2ab0ac22f2fac98f20ca76a05e006b0769d4..930ed4433768e47d8900459b4cdb4e1f1988e352 100644 (file)
@@ -41,8 +41,8 @@
     {else}
       <div class="crm-section tag-section {$tagsetType}-tagset {$tagsetType}-tagset-{$tagset.parentID}-section">
         <div class="crm-clearfix">
-          <div class="label">{$form.$elemName.$parID.label}</div>
-          <div class="content">{$form.$elemName.$parID.html}</div>
+          {$form.$elemName.$parID.label}
+          {$form.$elemName.$parID.html}
         </div>
       </div>
     {/if}