Kaynağa Gözat

Replace fcbkComplete with select2 for extra field of type tag #1941

Angel Fernando Quiroz Campos 7 yıl önce
ebeveyn
işleme
fffaf10cd6

+ 13 - 5
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;

+ 30 - 18
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 .= <<<EOF
-                                $("#extra_$variable").fcbkcomplete({
-                                    json_url: "$url?a=search_tags&field_id=$field_id&type={$this->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:

+ 4 - 0
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,