mirror of https://github.com/MISP/MISP
chg: [clusterRelations:view_relations] Quick submit and few fixes
parent
1390ed6a91
commit
d01b142582
|
@ -100,46 +100,28 @@ class GalaxyClusterRelationsController extends AppController
|
|||
$relation['GalaxyClusterRelation']['sharing_group_id'] = null;
|
||||
}
|
||||
|
||||
// Fetch cluster source and adapt IDs
|
||||
$conditions = array();
|
||||
if (!is_numeric($relation['GalaxyClusterRelation']['source_id'])) {
|
||||
$conditions['GalaxyCluster.uuid'] = $relation['GalaxyClusterRelation']['source_id'];
|
||||
} else {
|
||||
$conditions['GalaxyCluster.id'] = $relation['GalaxyClusterRelation']['source_id'];
|
||||
}
|
||||
$clusterSource = $this->GalaxyClusterRelation->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => $conditions), false);
|
||||
if (empty($clusterSource)) {
|
||||
throw new NotFoundException('Source cluster not found.');
|
||||
}
|
||||
$clusterSource = $clusterSource[0];
|
||||
$relation['GalaxyClusterRelation']['galaxy_cluster_id'] = $clusterSource['GalaxyCluster']['id'];
|
||||
unset($relation['GalaxyClusterRelation']['source_id']);
|
||||
$adpatedRelation = $this->adaptIds($relation);
|
||||
$relation = $adpatedRelation['relation'];
|
||||
$clusterSource = $adpatedRelation['clusterSource'];
|
||||
$clusterTarget = $adpatedRelation['clusterTarget'];
|
||||
|
||||
// Fetch cluster target and adapt IDs
|
||||
$conditions = array();
|
||||
if (!is_numeric($relation['GalaxyClusterRelation']['target_id'])) {
|
||||
$conditions['GalaxyCluster.uuid'] = $relation['GalaxyClusterRelation']['target_id'];
|
||||
} else {
|
||||
$conditions['GalaxyCluster.id'] = $relation['GalaxyClusterRelation']['target_id'];
|
||||
}
|
||||
$clusterTarget = $this->GalaxyClusterRelation->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => $conditions), false);
|
||||
if (empty($clusterSource)) {
|
||||
throw new NotFoundException('Target cluster not found.');
|
||||
}
|
||||
$clusterTarget = $clusterTarget[0];
|
||||
$relation['GalaxyClusterRelation']['referenced_galaxy_cluster_id'] = $clusterTarget['GalaxyCluster']['id'];
|
||||
unset($relation['GalaxyClusterRelation']['target_id']);
|
||||
|
||||
$saveSuccess = $this->GalaxyClusterRelation->saveRelation($this->Auth->user(), $relation);
|
||||
$message = $saveSuccess ? __('Relationship added.') : __('Relationship could not be added.');
|
||||
$errors = $this->GalaxyClusterRelation->saveRelation($this->Auth->user(), $relation);
|
||||
$message = empty($errors) ? __('Relationship added.') : __('Relationship could not be added.');
|
||||
if ($this->_isRest()) {
|
||||
if ($result) {
|
||||
if (empty($errors)) {
|
||||
return $this->RestResponse->saveSuccessResponse('GalaxyClusterRelation', 'add', $this->response->type(), $message);
|
||||
} else {
|
||||
return $this->RestResponse->saveFailResponse('GalaxyClusterRelation', 'add', $message, $this->response->type());
|
||||
}
|
||||
} elseif ($this->request->is('ajax')) {
|
||||
$this->autoRender = false;
|
||||
if (empty($errors)) {
|
||||
return new CakeResponse(array('body'=> json_encode(array('saved' => true, 'success' => '')),'status' => 200, 'type' => 'json'));
|
||||
} else {
|
||||
return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => 'Could not save relation, reason: ' . json_encode(array_merge($errors, $this->GalaxyClusterRelation->validationErrors)))),'status' => 200, 'type' => 'json'));
|
||||
}
|
||||
} else {
|
||||
if ($saveSuccess) {
|
||||
if (empty($errors)) {
|
||||
$this->Flash->success($message);
|
||||
$this->redirect(array('action' => 'index'));
|
||||
} else {
|
||||
|
@ -181,6 +163,12 @@ class GalaxyClusterRelationsController extends AppController
|
|||
if ($this->request->is('post') || $this->request->is('put')) {
|
||||
$relation = $this->request->data;
|
||||
$relation['GalaxyClusterRelation']['id'] = $id;
|
||||
if ($relation['GalaxyClusterRelation']['distribution'] != 4) {
|
||||
$relation['GalaxyClusterRelation']['sharing_group_id'] = null;
|
||||
}
|
||||
$adpatedRelation = $this->adaptIds($relation);
|
||||
$relation = $adpatedRelation['relation'];
|
||||
|
||||
$errors = $this->GalaxyClusterRelation->editRelation($this->Auth->user(), $relation);
|
||||
$message = empty($errors) ? __('Relationship saved.') : __('Relationship could not be edited.');
|
||||
if ($this->_isRest()) {
|
||||
|
@ -236,4 +224,42 @@ class GalaxyClusterRelationsController extends AppController
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function adaptIds($relation)
|
||||
{
|
||||
// Fetch cluster source and adapt IDs
|
||||
$conditions = array();
|
||||
if (!is_numeric($relation['GalaxyClusterRelation']['source_id'])) {
|
||||
$conditions['GalaxyCluster.uuid'] = $relation['GalaxyClusterRelation']['source_id'];
|
||||
} else {
|
||||
$conditions['GalaxyCluster.id'] = $relation['GalaxyClusterRelation']['source_id'];
|
||||
}
|
||||
$clusterSource = $this->GalaxyClusterRelation->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => $conditions), false);
|
||||
if (empty($clusterSource)) {
|
||||
throw new NotFoundException('Source cluster not found.');
|
||||
}
|
||||
$clusterSource = $clusterSource[0];
|
||||
$relation['GalaxyClusterRelation']['galaxy_cluster_id'] = $clusterSource['GalaxyCluster']['id'];
|
||||
unset($relation['GalaxyClusterRelation']['source_id']);
|
||||
|
||||
// Fetch cluster target and adapt IDs
|
||||
$conditions = array();
|
||||
if (!is_numeric($relation['GalaxyClusterRelation']['target_id'])) {
|
||||
$conditions['GalaxyCluster.uuid'] = $relation['GalaxyClusterRelation']['target_id'];
|
||||
} else {
|
||||
$conditions['GalaxyCluster.id'] = $relation['GalaxyClusterRelation']['target_id'];
|
||||
}
|
||||
$clusterTarget = $this->GalaxyClusterRelation->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => $conditions), false);
|
||||
if (empty($clusterSource)) {
|
||||
throw new NotFoundException('Target cluster not found.');
|
||||
}
|
||||
$clusterTarget = $clusterTarget[0];
|
||||
$relation['GalaxyClusterRelation']['referenced_galaxy_cluster_id'] = $clusterTarget['GalaxyCluster']['id'];
|
||||
unset($relation['GalaxyClusterRelation']['target_id']);
|
||||
return array(
|
||||
'clusterSource' => $clusterSource,
|
||||
'clusterTarget' => $clusterTarget,
|
||||
'relation' => $relation,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -849,5 +849,10 @@ class GalaxyClustersController extends AppController
|
|||
$this->set('existingRelations', $existingRelations);
|
||||
$this->set('cluster', $cluster);
|
||||
$this->set('tree', $tree);
|
||||
$this->loadModel('Attribute');
|
||||
$distributionLevels = $this->Attribute->distributionLevels;
|
||||
unset($distributionLevels[4]);
|
||||
unset($distributionLevels[5]);
|
||||
$this->set('distributionLevels', $distributionLevels);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,8 +192,10 @@ class GalaxyClusterRelation extends AppModel
|
|||
|
||||
public function saveRelation($user, $relation)
|
||||
{
|
||||
$errors = array();
|
||||
if (!$user['Role']['perm_galaxy_editor'] && !$user['Role']['perm_site_admin']) {
|
||||
return false;
|
||||
$errors[] = __('Incorrect permission');
|
||||
return $errors;
|
||||
}
|
||||
$relation['GalaxyClusterRelation']['org_id'] = $user['org_id'];
|
||||
if (!isset($relation['GalaxyClusterRelation']['orgc_id'])) {
|
||||
|
@ -211,18 +213,21 @@ class GalaxyClusterRelation extends AppModel
|
|||
'GalaxyClusterRelation.org_id' => $relation['GalaxyClusterRelation']['org_id'],
|
||||
)));
|
||||
if (!empty($existingRelation)) {
|
||||
return false;
|
||||
$errors[] = __('Relation already exists');
|
||||
return $errors;
|
||||
}
|
||||
$this->create();
|
||||
$saveSuccess = $this->save($relation);
|
||||
if ($saveSuccess) {
|
||||
$savedRelation = $this->find('first', array(
|
||||
'conditions' => array('id' => $this->id),
|
||||
'recursive' => -1
|
||||
));
|
||||
// TODO: save tags as well
|
||||
if (empty($errors)) {
|
||||
$this->create();
|
||||
$saveSuccess = $this->save($relation);
|
||||
if ($saveSuccess) {
|
||||
$savedRelation = $this->find('first', array(
|
||||
'conditions' => array('id' => $this->id),
|
||||
'recursive' => -1
|
||||
));
|
||||
// TODO: save tags as well
|
||||
}
|
||||
}
|
||||
return $saveSuccess;
|
||||
return $errors;
|
||||
}
|
||||
|
||||
public function editRelation($user, $relation, $fieldList=array())
|
||||
|
|
|
@ -6,14 +6,14 @@ echo $this->element('genericElements/assetLoader', array(
|
|||
|
||||
<div>
|
||||
<div style="padding: 5px; background-color: #f6f6f6; border-bottom: 1px solid #ccc; ">
|
||||
<div id="relationsQuickAddForm">
|
||||
<form id="relationsQuickAddForm">
|
||||
<div class="input">
|
||||
<label for="RelationshipSource"><?= __('Source UUID') ?></label>
|
||||
<input id="RelationshipSource" type="text" value="<?= h($cluster['GalaxyCluster']['uuid']) ?>" disabled></input>
|
||||
<input id="RelationshipSource" name="source_id" type="text" value="<?= h($cluster['GalaxyCluster']['uuid']) ?>" disabled></input>
|
||||
</div>
|
||||
<div class="input">
|
||||
<label for="RelationshipType"><?= __('Relationship type') ?></label>
|
||||
<select id="RelationshipType">
|
||||
<select id="RelationshipType" name="referenced_galaxy_cluster_type">
|
||||
<?php foreach ($existingRelations as $relation): ?>
|
||||
<option value="<?= h($relation) ?>"><?= h($relation) ?></option>
|
||||
<?php endforeach; ?>
|
||||
|
@ -23,18 +23,26 @@ echo $this->element('genericElements/assetLoader', array(
|
|||
</div>
|
||||
<div class="input">
|
||||
<label for="RelationshipTarget"><?= __('Target UUID') ?></label>
|
||||
<input id="RelationshipTarget" type="text"></input>
|
||||
<input id="RelationshipTarget" name="target_id" type="text"></input>
|
||||
</div>
|
||||
<div class="input">
|
||||
<label for="RelationshipDistribution"><?= __('Distribution') ?></label>
|
||||
<select id="RelationshipDistribution" name="distribution">
|
||||
<?php foreach ($distributionLevels as $k => $distribution): ?>
|
||||
<option value="<?= h($k) ?>"><?= h($distribution) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input">
|
||||
<label for="RelationshipTags"><?= __('Tags') ?></label>
|
||||
<input id="RelationshipTags" type="text"></input>
|
||||
<input id="RelationshipTags" name="tags" type="text"></input>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<button id="buttonAddRelationship" type="button" class="btn btn-primary" style="">
|
||||
<i class="fas fa-plus"></i>
|
||||
Add relationship
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -63,26 +71,47 @@ echo $this->element('genericElements/assetLoader', array(
|
|||
})
|
||||
|
||||
function submitRelationshipForm() {
|
||||
var url = "<?= $baseurl ?>/galaxy_clusters/addRelations/";
|
||||
$.ajax({
|
||||
beforeSend: function (XMLHttpRequest) {
|
||||
toggleLoadingButton(true);
|
||||
var url = "<?= $baseurl ?>/galaxy_cluster_relations/add/";
|
||||
var data = {
|
||||
source_id: $('#RelationshipSource').val(),
|
||||
target_id: $('#RelationshipTarget').val(),
|
||||
type: $('#RelationshipType').val(),
|
||||
tags: $('#RelationshipTags').val(),
|
||||
distribution: $('#RelationshipDistribution').val(),
|
||||
tags: $('#RelationshipTags').val(),
|
||||
};
|
||||
if (data.referenced_galaxy_cluster_type === 'custom') {
|
||||
data['referenced_galaxy_cluster_type'] = freeTextVal;
|
||||
}
|
||||
toggleLoadingButton(true);
|
||||
fetchFormDataAjax(url,
|
||||
function(formData) {
|
||||
$('body').append($('<div id="temp"/>').html(formData));
|
||||
$('#temp #GalaxyClusterRelationSourceId').val(data.source_id);
|
||||
$('#temp #GalaxyClusterRelationTargetId').val(data.target_id);
|
||||
$('#temp #GalaxyClusterRelationReferencedGalaxyClusterType').val(data.type);
|
||||
$('#temp #GalaxyClusterRelationDistribution').val(data.distribution);
|
||||
$('#temp #GalaxyClusterRelationTags').val(data.tags);
|
||||
$.ajax({
|
||||
data: $('#GalaxyClusterRelationAddForm').serialize(),
|
||||
success:function (data) {
|
||||
console.log(data);
|
||||
},
|
||||
error:function(jqXHR, textStatus, errorThrown) {
|
||||
showMessage('fail', textStatus + ": " + errorThrown);
|
||||
},
|
||||
complete:function() {
|
||||
toggleLoadingButton(false);
|
||||
$('#temp').remove();
|
||||
},
|
||||
type:"post",
|
||||
url: $('#GalaxyClusterRelationAddForm').attr('action')
|
||||
});
|
||||
},
|
||||
data: $('#relationsQuickAddForm').serialize(),
|
||||
success: function (data, textStatus) {
|
||||
$('#top').html(data);
|
||||
showMessage("success", "Relation added");
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
showMessage('fail', textStatus + ": " + errorThrown);
|
||||
},
|
||||
complete: function() {
|
||||
function() {
|
||||
toggleLoadingButton(false);
|
||||
},
|
||||
type:"post",
|
||||
cache: false,
|
||||
url: url,
|
||||
});
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
function toggleLoadingButton(loading) {
|
||||
|
|
|
@ -37,6 +37,9 @@
|
|||
'label' => __('Tags'),
|
||||
'type' => 'text',
|
||||
),
|
||||
),
|
||||
'submit' => array(
|
||||
'ajaxSubmit' => ''
|
||||
)
|
||||
)
|
||||
));
|
||||
|
|
|
@ -4815,7 +4815,7 @@ function changeTaxonomyRequiredState(checkbox) {
|
|||
});
|
||||
}
|
||||
|
||||
function fetchFormDataAjax(url, callback) {
|
||||
function fetchFormDataAjax(url, callback, errorCallback) {
|
||||
var formData = false;
|
||||
$.ajax({
|
||||
data: '[]',
|
||||
|
@ -4824,6 +4824,9 @@ function fetchFormDataAjax(url, callback) {
|
|||
},
|
||||
error:function() {
|
||||
handleGenericAjaxResponse({'saved':false, 'errors':['Request failed due to an unexpected error.']});
|
||||
if (errorCallback !== undefined) {
|
||||
errorCallback();
|
||||
}
|
||||
},
|
||||
async: false,
|
||||
type:"get",
|
||||
|
|
Loading…
Reference in New Issue