Prechádzať zdrojové kódy

Add js to load tags see BT#10849

Julio 8 rokov pred
rodič
commit
318520db8a
2 zmenil súbory, kde vykonal 99 pridanie a 2 odobranie
  1. 64 0
      main/inc/ajax/extra_field.ajax.php
  2. 35 2
      search.php

+ 64 - 0
main/inc/ajax/extra_field.ajax.php

@@ -49,6 +49,70 @@ switch ($action) {
 
         echo json_encode($result);
         break;
+    case 'search_options_from_tags':
+        $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
+        $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
+        $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null;
+        $extraFieldOption = new ExtraFieldOption($type);
+
+        $from = isset($_REQUEST['from']) ? $_REQUEST['from'] : '';
+        $search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';
+        $options = isset($_REQUEST['options']) ? json_decode($_REQUEST['options']) : '';
+
+        $extraField = new ExtraField('session');
+        $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $from));
+        $id = $extraFieldInfo['id'];
+
+        $extraFieldInfoTag = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $search));
+        $tagId = $extraFieldInfoTag['id'];
+
+        $table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
+        $tagRelExtraTable = Database::get_main_table(TABLE_MAIN_EXTRA_FIELD_REL_TAG);
+        $tagTable = Database::get_main_table(TABLE_MAIN_TAG);
+        $optionsTable = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS);
+
+        $sql = "SELECT DISTINCT t.* FROM $tagRelExtraTable te INNER JOIN $tagTable t
+                ON (t.id = te.tag_id)
+                WHERE te.field_id = $tagId AND te.item_id IN (
+                    SELECT DISTINCT item_id 
+                    FROM $table 
+                    WHERE 
+                        field_id = $id AND 
+                        value IN ('".implode("','", $options)."')
+               )
+               ";
+
+        $sql = "SELECT DISTINCT t.*, v.value, o.display_text
+                FROM $tagRelExtraTable te 
+                INNER JOIN $tagTable t
+                ON (t.id = te.tag_id AND te.field_id = t.field_id AND te.field_id = $tagId) 
+                INNER JOIN $table v
+                ON (te.item_id = v.item_id AND v.field_id = $id)
+                INNER JOIN $optionsTable o
+                ON (o.option_value = v.value)
+                WHERE v.value IN ('".implode("','", $options)."')     
+                           
+                ORDER BY v.value
+               ";
+        $result = Database::query($sql);
+        $result = Database::store_result($result);
+        $options = [];
+        $groups = [];
+        foreach ($result as $data) {
+            $groups[$data['display_text']][$data['id']] = [
+                'id' => $data['id'],
+                'text' => $data['tag']
+            ];
+
+        }
+        foreach ($groups as $key => $data) {
+            $options[] = [
+                'text' => $key,
+                'children' => $groups[$key]
+            ];
+        }
+        echo json_encode($options);
+        break;
     default:
         exit;
         break;

+ 35 - 2
search.php

@@ -67,8 +67,41 @@ $(document).ready(function() {
             extraFiliere.hide();
         }
     });
-    //
-
+        
+    $("#extra_domaine").on("change", function() {
+        var domainList = [];
+        $( "#extra_domaine option:selected" ).each(function() {       
+            domainList.push($(this).val());
+        });
+        
+        var domainListToString = JSON.stringify(domainList);        
+        $.ajax({
+            contentType: "application/x-www-form-urlencoded",
+            type: "GET",
+            url: "'.api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=search_options_from_tags&type=session&from=extra_domaine&search=extra_theme&options="+domainListToString,
+            success: function(data) {            
+                $("#extra_theme")
+                    .find("option")
+                    .remove()
+                    .end();                    
+               $("#extra_theme").empty();
+                var selectToString = "";
+                jQuery.each(JSON.parse(data), function(i, item) {
+                   selectToString += "<optgroup label=\'"+item.text+"\'>";                   
+                   jQuery.each(item.children, function(j, data) {
+                        if (data.text != "") {                                    
+                            selectToString += "<option value=\'"+data.text+"\'> " +data.text+"</option>"
+                        }
+                    });                         
+                    selectToString += "</optgroup>";
+                });        
+                
+                $("#extra_theme").html(selectToString);                 
+                $("#extra_theme").selectpicker("refresh");
+            }           
+            
+         });        
+    });
 });
 </script>';