chg: [UI] Allow event mass export for all events

pull/8712/head
Jakub Onderka 2022-10-26 16:50:21 +02:00
parent 6461d7c8cd
commit b1c95771cf
4 changed files with 30 additions and 29 deletions

View File

@ -2780,7 +2780,7 @@ class EventsController extends AppController
public function delete($id = null)
{
if ($this->request->is('post') || $this->request->is('put') || $this->request->is('delete')) {
if ($this->request->is(['post', 'put', 'delete'])) {
if (isset($this->request->data['id'])) {
$this->request->data['Event'] = $this->request->data;
}
@ -2848,11 +2848,7 @@ class EventsController extends AppController
$this->redirect(array('action' => 'index'));
}
} else {
if (is_numeric($id)) {
$eventList = array($id);
} else {
$eventList = json_decode($id, true);
}
$eventList = is_numeric($id) ? [$id] : $this->_jsonDecode($id);
$this->request->data['Event']['id'] = json_encode($eventList);
$this->set('idArray', $eventList);
$this->render('ajax/eventDeleteConfirmationForm');

View File

@ -1,12 +1,8 @@
<table class="table table-striped table-hover table-condensed">
<tr>
<?php if ($isSiteAdmin): ?>
<th>
<input class="select_all select" type="checkbox" title="<?php echo __('Select all');?>" role="button" tabindex="0" aria-label="<?php echo __('Select all events on current page');?>" onclick="toggleAllCheckboxes();">
</th>
<?php else: ?>
<th style="padding-left:0;padding-right:0;">&nbsp;</th>
<?php endif;?>
<th>
<input class="select_all select" type="checkbox" title="<?php echo __('Select all');?>" role="button" tabindex="0" aria-label="<?php echo __('Select all events on current page');?>" onclick="toggleAllCheckboxes();">
</th>
<th class="filter" title="<?= __('Published') ?>"><?= $this->Paginator->sort('published', '<i class="fa fa-upload"></i>', ['escape' => false]) ?></th>
<?php
if (Configure::read('MISP.showorgalternate') && Configure::read('MISP.showorg')):
@ -42,13 +38,9 @@
</tr>
<?php foreach ($events as $event): $eventId = (int)$event['Event']['id']; ?>
<tr id="event_<?= $eventId ?>">
<?php if ($isSiteAdmin || ($event['Event']['orgc_id'] == $me['org_id'])):?>
<td style="width:10px">
<input class="select" type="checkbox" data-id="<?= $eventId ?>" data-uuid="<?= h($event['Event']['uuid']) ?>">
<input class="select" type="checkbox" data-id="<?= $eventId ?>" data-can-modify="<?= $this->Acl->canModifyEvent($event) ? 1 : 0 ?>">
</td>
<?php else: ?>
<td style="padding-left:0;padding-right:0;"></td>
<?php endif; ?>
<td class="dblclickElement" style="width:30px">
<a href="<?= "$baseurl/events/view/$eventId" ?>" title="<?= __('View') ?>" aria-label="<?= __('View') ?>">
<i class="fa <?= $event['Event']['published'] ? 'fa-check green' : 'fa-times grey' ?>"></i>
@ -215,7 +207,7 @@
var lastSelected = false;
$(function() {
$('.select').on('change', function() {
listCheckboxesChecked();
listCheckboxesCheckedEventIndex();
}).click(function(e) {
if ($(this).is(':checked')) {
if (e.shiftKey) {

View File

@ -78,14 +78,14 @@
'id' => 'multi-delete-button',
'title' => __('Delete selected events'),
'fa-icon' => 'trash',
'class' => 'hidden mass-select',
'class' => 'hidden mass-delete',
'onClick' => 'multiSelectDeleteEvents'
),
array(
'id' => 'multi-export-button',
'title' => __('Export selected events'),
'fa-icon' => 'file-export',
'class' => 'hidden mass-select',
'class' => 'hidden mass-export',
'onClick' => 'multiSelectExportEvents'
)
)

View File

@ -925,6 +925,21 @@ function listCheckboxesChecked() {
else $('.mass-select').addClass('hidden');
}
function listCheckboxesCheckedEventIndex() {
// Show mass delete just when user has permission to delete at least one of selected event
if ($('.select:checked[data-can-modify="1"]').length > 0) {
$('.mass-delete').removeClass('hidden');
} else {
$('.mass-delete').addClass('hidden');
}
if ($('.select:checked').length > 0) {
$('.mass-export').removeClass('hidden');
} else {
$('.mass-export').addClass('hidden');
}
}
function attributeListAnyProposalCheckBoxesChecked() {
if ($('.select_proposal:checked').length > 0) $('.mass-proposal-select').removeClass('hidden');
else $('.mass-proposal-select').addClass('hidden');
@ -937,8 +952,8 @@ function taxonomyListAnyCheckBoxesChecked() {
function multiSelectDeleteEvents() {
var selected = [];
$(".select").each(function() {
if ($(this).is(":checked")) {
$(".select:checked").each(function() {
if ($(this).data('can-modify')) {
var temp = $(this).data("id");
if (temp != null) {
selected.push(temp);
@ -954,12 +969,10 @@ function deleteEventPopup(eventId) {
function multiSelectExportEvents() {
var selected = [];
$(".select").each(function() {
if ($(this).is(":checked")) {
var temp = $(this).data("uuid");
if (temp != null) {
selected.push(temp);
}
$(".select:checked").each(function() {
var temp = $(this).data("id");
if (temp != null) {
selected.push(temp);
}
});
openGenericModal(baseurl + "/events/restSearchExport/" + JSON.stringify(selected))