mirror of https://github.com/MISP/MISP
chg: [eventReport] Load tags in one call
parent
e2263d6c56
commit
02ba939e57
|
@ -1116,10 +1116,13 @@ class TagsController extends AppController
|
|||
'conditions' => $conditions,
|
||||
'recursive' => -1
|
||||
));
|
||||
if (!$searchIfTagExists && empty($tags)) {
|
||||
$tags = [];
|
||||
foreach ($tag as $i => $tagName) {
|
||||
$tags[] = ['Tag' => ['name' => $tagName], 'simulatedTag' => true];
|
||||
if (!$searchIfTagExists) {
|
||||
$foundTagNames = Hash::extract($tags, "{n}.Tag.name");
|
||||
foreach ($tag as $tagName) {
|
||||
if (!in_array($tagName, $foundTagNames, true)) {
|
||||
// Tag not found, insert simulated tag
|
||||
$tags[] = ['Tag' => ['name' => $tagName], 'simulatedTag' => true];
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->loadModel('Taxonomy');
|
||||
|
|
|
@ -651,23 +651,34 @@ function attachRemoteMISPElements() {
|
|||
$div.html(cache_matrix[cacheKey])
|
||||
}
|
||||
})
|
||||
|
||||
var tagNamesToLoad = [];
|
||||
var tagsLoading = [];
|
||||
$('.embeddedTag[data-scope="tag"]').each(function() {
|
||||
var $div = $(this)
|
||||
$div.append($('<span/>').append(loadingSpanAnimation))
|
||||
var eventID = $div.data('eventid')
|
||||
var elementID = $div.data('elementid')
|
||||
var cacheKey = eventid + '-' + elementID
|
||||
clearTimeout(tagTimers[cacheKey]);
|
||||
if (cache_tag[cacheKey] === undefined) {
|
||||
tagTimers[cacheKey] = setTimeout(function() {
|
||||
fetchTagInfo(eventID, elementID, function() {
|
||||
attachTagInfo($div, eventID, elementID, true)
|
||||
})
|
||||
}, firstCustomPostRenderCall ? 0 : slowDebounceDelay);
|
||||
var $div = $(this);
|
||||
var elementID = $div.data('elementid');
|
||||
if (!(elementID in cache_tag)) {
|
||||
$div.append($('<span/>').append(loadingSpanAnimation));
|
||||
tagNamesToLoad.push(elementID);
|
||||
tagsLoading.push($div);
|
||||
} else {
|
||||
$div.html(cache_tag[cacheKey])
|
||||
$div.html(cache_tag[elementID]);
|
||||
}
|
||||
})
|
||||
}).promise().done(function() {
|
||||
if (tagNamesToLoad.length === 0) {
|
||||
return;
|
||||
}
|
||||
fetchTagInfo(tagNamesToLoad, function() {
|
||||
$.each(tagsLoading, function() {
|
||||
var $div = $(this);
|
||||
var elementID = $div.data('elementid');
|
||||
if (elementID in cache_tag) {
|
||||
$div.html(cache_tag[elementID]);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if (firstCustomPostRenderCall) {
|
||||
// Wait, because .each calls are asynchronous
|
||||
setTimeout(function() {
|
||||
|
@ -720,56 +731,53 @@ function attachGalaxyMatrix($elem, eventid, elementID) {
|
|||
})
|
||||
}
|
||||
|
||||
function attachTagInfo($elem, eventid, elementID, all) {
|
||||
var cacheKey = eventid + '-' + elementID
|
||||
$elem.html(cache_tag[cacheKey])
|
||||
if (all === true) {
|
||||
$('.embeddedTag[data-scope="tag"]').filter(function() {
|
||||
return $(this).data('eventid') == eventid && $(this).data('elementid') == elementID
|
||||
}).html(cache_tag[cacheKey])
|
||||
}
|
||||
}
|
||||
|
||||
function fetchTagInfo(eventid, tagName, callback) {
|
||||
function fetchTagInfo(tagNames, callback) {
|
||||
$.ajax({
|
||||
data: {
|
||||
"tag": tagName,
|
||||
"tag": tagNames,
|
||||
},
|
||||
success:function(data, textStatus) {
|
||||
var $tag
|
||||
success: function (data) {
|
||||
var $tag, tagName;
|
||||
data = $.parseJSON(data)
|
||||
var tagData;
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var tag = data[i];
|
||||
if (tag.Tag.name == tagName) {
|
||||
tagData = data[i]
|
||||
break
|
||||
tagName = tag.Tag.name;
|
||||
|
||||
proxyMISPElements['tag'][tagName] = tag;
|
||||
|
||||
$tag = getTagReprensentation(tag);
|
||||
cache_tag[tagName] = $tag[0].outerHTML;
|
||||
}
|
||||
|
||||
// If tag name doesn't exists, construct empty placeholder
|
||||
for (i = 0; i < tagNames.length; i++) {
|
||||
tagName = tagNames[i];
|
||||
if (!(tagName in cache_tag)) {
|
||||
$tag = constructTagHtml(tagName, '#ffffff', {'border': '1px solid #000'});
|
||||
cache_tag[tagName] = $tag[0].outerHTML;
|
||||
}
|
||||
}
|
||||
if (tagData === undefined) {
|
||||
tagData = {}
|
||||
$tag = constructTagHtml(tagName, '#ffffff', {'border': '1px solid #000'})
|
||||
} else {
|
||||
$tag = getTagReprensentation(tagData)
|
||||
proxyMISPElements['tag'][tagName] = tagData
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
// Query failed, fill cache with placeholder
|
||||
var tagName, templateVariables;
|
||||
for (var i = 0; i < tagNames.length; i++) {
|
||||
tagName = tagNames[i];
|
||||
if (!(tagName in cache_tag)) {
|
||||
templateVariables = sanitizeObject({
|
||||
scope: 'Error while fetching tag',
|
||||
id: tagName
|
||||
});
|
||||
cache_tag[tagName] = dotTemplateInvalid(templateVariables);
|
||||
}
|
||||
}
|
||||
var cacheKey = eventid + '-' + tagName
|
||||
cache_tag[cacheKey] = $tag[0].outerHTML;
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
var templateVariables = sanitizeObject({
|
||||
scope: 'Error while fetching tag',
|
||||
id: tagName
|
||||
})
|
||||
var placeholder = dotTemplateInvalid(templateVariables)
|
||||
cache_tag[cacheKey] = placeholder;
|
||||
},
|
||||
complete: function() {
|
||||
complete: function () {
|
||||
if (callback !== undefined) {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
type:"post",
|
||||
type: "post",
|
||||
url: baseurl + "/tags/search/0/1/0"
|
||||
})
|
||||
}
|
||||
|
@ -1423,10 +1431,11 @@ function constructTag(tagName) {
|
|||
|
||||
function getTagReprensentation(tagData) {
|
||||
var $tag
|
||||
if(tagData.GalaxyCluster !== undefined) {
|
||||
if (tagData.GalaxyCluster !== undefined) {
|
||||
$tag = constructClusterTagHtml(tagData)
|
||||
} else {
|
||||
$tag = constructTagHtml(tagData.Tag.name, tagData.Tag.colour)
|
||||
var color = tagData.Tag.colour ? tagData.Tag.colour : tagData.TaxonomyPredicate.colour;
|
||||
$tag = constructTagHtml(tagData.Tag.name, color)
|
||||
}
|
||||
return $tag
|
||||
}
|
||||
|
@ -1491,8 +1500,7 @@ function constructTaxonomyInfo(tagData) {
|
|||
}
|
||||
|
||||
function constructGalaxyInfo(tagData) {
|
||||
var cacheKey = eventid + '-' + tagData.Tag.name
|
||||
var tagHTML = cache_tag[cacheKey]
|
||||
var tagHTML = cache_tag[tagData.Tag.name]
|
||||
var $tag = $(tagHTML)
|
||||
var $cluster = $('<div/>').append(
|
||||
$('<span/>').append($tag),
|
||||
|
|
Loading…
Reference in New Issue