chg: [object:edit] Added similarity amount between objects

pull/4530/head
mokaddem 2019-04-23 14:54:09 +02:00
parent 675af7d357
commit 8bb9201a3d
2 changed files with 34 additions and 24 deletions

View File

@ -92,37 +92,26 @@ class ObjectsController extends AppController
$this->set('multiple_attribute_allowed', $multiple_attribute_allowed);
// try to fetch similar objects
$cur_attrs = Hash::extract($this->request->data, 'Attribute.{n}.value');
$options = array(
'conditions' => array(
'event_id' => $event_id,
'NOT' => array(
'AND' => array(
'object_id' => $object_id,
'object_id' => 0
)
),
'value' => $cur_attrs
),
);
$conditions = array(
'AND' => array(
$this->MispObject->buildConditions($this->Auth->user()),
'event_id' => $event_id,
'NOT' => array(
'AND' => array(
'object_id' => $object_id,
'object_id' => 0
)
),
'value' => $cur_attrs
)
);
$similar_object_ids = $this->MispObject->Attribute->find('list', array(
$similar_objects = $this->MispObject->Attribute->find('all', array(
'conditions' => $conditions,
'recursive' => -1,
'fields' => 'object_id',
'group' => 'object_id'
'fields' => 'object_id, count(object_id) as similarity_amount',
'group' => 'object_id',
'order' => 'similarity_amount DESC'
));
$similar_object_ids = array();
$similar_object_similarity_amount = array();
foreach ($similar_objects as $obj) {
$similar_object_ids[] = $obj['Attribute']['object_id'];
$similar_object_similarity_amount[$obj['Attribute']['object_id']] = $obj[0]['similarity_amount'];
}
$this->set('distributionLevels', $this->MispObject->Attribute->distributionLevels);
$this->set('action', $action);
@ -130,10 +119,22 @@ class ObjectsController extends AppController
$this->set('object_id', $object_id);
$this->set('event', $event);
$this->set('data', $this->request->data);
if (count($similar_object_ids) < 5) {
$similar_objects_count = count($similar_object_ids);
if ($similar_objects_count > 0) {
$similar_object_ids = array_slice($similar_object_ids, 0, 10);
$similar_objects = $this->MispObject->fetchObjects($this->Auth->user(), array('conditions' => array('Object.id' => $similar_object_ids, 'Object.template_uuid' => $template['ObjectTemplate']['uuid'])));
foreach ($similar_objects as $key => $obj) {
$similar_objects[$key]['Object']['similarity_amount'] = $similar_object_similarity_amount[$obj['Object']['id']];
}
usort($similar_objects, function ($a, $b) {
if ($a['Object']['similarity_amount'] == $b['Object']['similarity_amount']) {
return 0;
}
return ($a['Object']['similarity_amount'] > $b['Object']['similarity_amount']) ? -1 : 1;
});
$this->set('similar_objects', $similar_objects);
$this->set('similar_objects_count', $similar_objects_count);
$this->set('similar_object_similarity_amount', $similar_object_similarity_amount);
}
}

View File

@ -119,7 +119,7 @@
$temp_comparison = 'equal';
}
?>
<div style="border: 1px solid #3465a4 ; border-radius: 5px; <?php echo $temp_comparison == 'above' ? 'filter: grayscale(60%);' : ''; ?>" class="span5 similarObjectPanel">
<div style="border: 1px solid #3465a4 ; border-radius: 5px; margin-top: 15px; display: inline-block; vertical-align: top; float: unset; overflow-x: auto; <?php echo $temp_comparison == 'above' ? 'filter: grayscale(60%);' : ''; ?>" class="span5 similarObjectPanel">
<?php
if ($temp_comparison == 'below') {
$btn_style = 'btn-warning';
@ -135,6 +135,7 @@
<div class="blueElement" style="padding: 4px 5px;">
<div style="text-align: center;">
<input type="button" class="btn <?php echo $btn_style; ?>" onclick="setMergeObject(<?php echo h($object['Object']['id']) ?> ,<?php echo $temp_comparison == 'below' ? 'true' : 'false'; ?>)" value="<?php echo $temp_text; ?>" <?php echo $temp_comparison == 'above' ? 'disabled' : ''; ?>></input>
<span class="badge badge-inverse" style="float: right;" title="<?php echo __('Similarity amount') ?>"><?php echo number_format(intval($similar_object_similarity_amount[$object['Object']['id']]) / count($data['Attribute']), 2)*100 . '%'; ?></span>
</div>
<div>
<span class="bold"><?php echo __('ID') . ':'; ?></span>
@ -225,6 +226,14 @@
<?php endif; ?>
</div>
<?php endforeach; ?>
<?php if ($similar_objects_count > 10): ?>
<div class="row span12" style="margin-top: 20px;">
<div class="alert alert-info">
<h4><?php echo __('All similar objects not displayed'); ?></h4>
<?php echo h($similar_objects_count) . __(' Similar objects found.'); ?>
</div>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php