mirror of https://github.com/MISP/MISP
chg: [sync] Faster capturing sighting when pushing whole event
parent
0e9f9abdb3
commit
362707deb1
|
@ -3904,9 +3904,7 @@ class Event extends AppModel
|
|||
// zeroq: check if sightings are attached and add to event
|
||||
if (isset($data['Sighting']) && !empty($data['Sighting'])) {
|
||||
$this->Sighting = ClassRegistry::init('Sighting');
|
||||
foreach ($data['Sighting'] as $s) {
|
||||
$result = $this->Sighting->saveSightings($s['attribute_uuid'], false, $s['date_sighting'], $user, $s['type'], $s['source'], $s['uuid']);
|
||||
}
|
||||
$this->Sighting->captureSightings($data['Sighting'], null, $this->id, $user);
|
||||
}
|
||||
if ($fromXml) {
|
||||
$created_id = $this->id;
|
||||
|
@ -4167,9 +4165,7 @@ class Event extends AppModel
|
|||
// zeroq: if sightings then attach to event
|
||||
if (isset($data['Sighting']) && !empty($data['Sighting'])) {
|
||||
$this->Sighting = ClassRegistry::init('Sighting');
|
||||
foreach ($data['Sighting'] as $s) {
|
||||
$result = $this->Sighting->saveSightings($s['attribute_uuid'], false, $s['date_sighting'], $user, $s['type'], $s['source'], $s['uuid']);
|
||||
}
|
||||
$this->Sighting->captureSightings($data['Sighting'], null, $this->id, $user);
|
||||
}
|
||||
// if published -> do the actual publishing
|
||||
if ($changed && (!empty($data['Event']['published']) && 1 == $data['Event']['published'])) {
|
||||
|
|
|
@ -127,7 +127,7 @@ class Sighting extends AppModel
|
|||
|
||||
/**
|
||||
* @param array $sightings
|
||||
* @param int $attributeId
|
||||
* @param int|null $attributeId
|
||||
* @param int $eventId
|
||||
* @param array $user
|
||||
* @return bool
|
||||
|
@ -141,12 +141,34 @@ class Sighting extends AppModel
|
|||
// Fetch existing organisations in bulk
|
||||
$existingOrganisations = $this->existingOrganisations($sightings);
|
||||
|
||||
if ($attributeId === null) {
|
||||
// If attribute ID is not set, check real ID and also check if user can access that attribute
|
||||
$attributes = $this->Attribute->fetchAttributesSimple($user, [
|
||||
'conditions' => [
|
||||
'Attribute.uuid' => array_column($sightings, 'attribute_uuid'),
|
||||
'Attribute.event_id' => $eventId,
|
||||
],
|
||||
'fields' => ['Attribute.id', 'Attribute.uuid'],
|
||||
]);
|
||||
$attributes = array_column(array_column($attributes, 'Attribute'), 'id', 'uuid');
|
||||
}
|
||||
|
||||
$toSave = [];
|
||||
foreach ($sightings as $sighting) {
|
||||
if (isset($existingSighting[$sighting['uuid']])) {
|
||||
continue; // already exists, skip
|
||||
}
|
||||
|
||||
if ($attributeId === null) {
|
||||
if (isset($attributes[$sighting['attribute_uuid']])) {
|
||||
$sighting['attribute_id'] = $attributes[$sighting['attribute_uuid']];
|
||||
} else {
|
||||
continue; // attribute not exists ar user don't have permission to access it
|
||||
}
|
||||
} else {
|
||||
$sighting['attribute_id'] = $attributeId;
|
||||
}
|
||||
|
||||
$orgId = 0;
|
||||
if (isset($sighting['Organisation'])) {
|
||||
if (isset($existingOrganisations[$sighting['Organisation']['uuid']])) {
|
||||
|
@ -161,7 +183,6 @@ class Sighting extends AppModel
|
|||
|
||||
$sighting['org_id'] = $orgId;
|
||||
$sighting['event_id'] = $eventId;
|
||||
$sighting['attribute_id'] = $attributeId;
|
||||
$toSave[] = $sighting;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue