From fffaf10cd6ff731e4cead0b197b345ccf1e0addc Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 15 May 2017 15:42:54 -0500 Subject: [PATCH] Replace fcbkComplete with select2 for extra field of type tag #1941 --- main/inc/ajax/extra_field.ajax.php | 18 +++++++--- main/inc/lib/extra_field.lib.php | 48 ++++++++++++++++---------- main/inc/lib/extra_field_value.lib.php | 4 +++ 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/main/inc/ajax/extra_field.ajax.php b/main/inc/ajax/extra_field.ajax.php index b5e0fb62b0..58dd1a2cb1 100755 --- a/main/inc/ajax/extra_field.ajax.php +++ b/main/inc/ajax/extra_field.ajax.php @@ -22,12 +22,20 @@ switch ($action) { } break; case 'search_tags': + header('Content-Type: application/json'); + $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null; - $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null; + $tag = isset($_REQUEST['q']) ? $_REQUEST['q'] : null; + $result = []; + + if (empty($tag)) { + echo json_encode(['items' => $result]); + exit; + } + $extraFieldOption = new ExtraFieldOption($type); - $result = []; $tags = Database::getManager() ->getRepository('ChamiloCoreBundle:Tag') ->createQueryBuilder('t') @@ -41,12 +49,12 @@ switch ($action) { /** @var Tag $tag */ foreach ($tags as $tag) { $result[] = [ - 'key' => $tag->getTag(), - 'value' => $tag->getTag() + 'id' => $tag->getTag(), + 'text' => $tag->getTag() ]; } - echo json_encode($result); + echo json_encode(['items' => $result]); break; default: exit; diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index b8c20a4ef1..50b89956fb 100755 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -1286,7 +1286,9 @@ class ExtraField extends Model $tagsSelect = $form->addSelect( "extra_{$field_details['variable']}", - $field_details['display_text'] + $field_details['display_text'], + [], + ['style' => 'width: 100%;'] ); if ($useTagAsSelect == false) { @@ -1296,6 +1298,8 @@ class ExtraField extends Model $tagsSelect->setAttribute('id', "extra_{$field_details['variable']}"); $tagsSelect->setMultiple(true); + $selectedOptions = []; + if ($this->type === 'user') { // The magic should be here $user_tags = UserManager::get_user_tags($itemId, $field_details['id']); @@ -1304,9 +1308,10 @@ class ExtraField extends Model foreach ($user_tags as $tag) { $tagsSelect->addOption( $tag['tag'], - $tag['tag'], - ['selected' => 'selected', 'class' => 'selected'] + $tag['tag'] ); + + $selectedOptions[] = $tag['tag']; } } $url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php'; @@ -1319,7 +1324,9 @@ class ExtraField extends Model 'fieldId' => $field_id, 'itemId' => $itemId ]); + /** @var \Chamilo\CoreBundle\Entity\ExtraFieldRelTag $fieldTag */ foreach ($fieldTags as $fieldTag) { + /** @var \Chamilo\CoreBundle\Entity\Tag $tag */ $tag = $em->find('ChamiloCoreBundle:Tag', $fieldTag->getTagId()); if (empty($tag)) { @@ -1327,9 +1334,9 @@ class ExtraField extends Model } $tagsSelect->addOption( $tag->getTag(), - $tag->getTag(), - ['selected' => 'selected', 'class' => 'selected'] + $tag->getTag() ); + $selectedOptions[] = $tag->getTag(); } if ($useTagAsSelect) { @@ -1366,22 +1373,27 @@ class ExtraField extends Model $url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php'; } - if ($useTagAsSelect == false) { - $complete_text = get_lang('StartToType'); - //if cache is set to true the jquery will be called 1 time + $form->setDefaults([ + 'extra_'.$field_details['variable'] => $selectedOptions + ]); - $jquery_ready_content .= <<type}", + if ($useTagAsSelect == false) { + $jquery_ready_content .= " + $('#extra_$variable').select2({ + ajax: { + url: '$url?a=search_tags&field_id=$field_id&type={$this->type}', + processResults: function (data) { + return { + results: data.items + } + } + }, cache: false, - filter_case: true, - filter_hide: true, - complete_text:"$complete_text", - firstselected: false, - filter_selected: true, - newel: true + tags: true, + tokenSeparators: [','], + placeholder: '".get_lang('StartToType')."' }); -EOF; + "; } break; case self::FIELD_TYPE_TIMEZONE: diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index e1816449fc..434a5b4a94 100755 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -160,6 +160,10 @@ class ExtraFieldValue extends Model $tags = []; foreach ($tagValues as $tagValue) { + if (empty($tagValue)) { + continue; + } + $tagsResult = $em->getRepository('ChamiloCoreBundle:Tag') ->findBy([ 'tag' => $tagValue,