ManageAssets: allow batch deletion of assets
This commit is contained in:
parent
5b8551a726
commit
a4cc528951
@ -14,10 +14,37 @@ class ManageAssets extends HTMLController
|
|||||||
if (!Registry::get('user')->isAdmin())
|
if (!Registry::get('user')->isAdmin())
|
||||||
throw new NotAllowedException();
|
throw new NotAllowedException();
|
||||||
|
|
||||||
|
if (isset($_POST['deleteChecked'], $_POST['delete']) && Session::validateSession())
|
||||||
|
$this->handleAssetDeletion();
|
||||||
|
|
||||||
Session::resetSessionToken();
|
Session::resetSessionToken();
|
||||||
|
|
||||||
$options = [
|
$options = [
|
||||||
|
'form' => [
|
||||||
|
'action' => BASEURL . '/manageassets/?' . Session::getSessionTokenKey() . '=' . Session::getSessionToken(),
|
||||||
|
'method' => 'post',
|
||||||
|
'class' => 'col-md-6 text-end',
|
||||||
|
'is_embed' => true,
|
||||||
|
'buttons' => [
|
||||||
|
'deleteChecked' => [
|
||||||
|
'type' => 'submit',
|
||||||
|
'caption' => 'Delete checked',
|
||||||
|
'class' => 'btn-danger',
|
||||||
|
'onclick' => 'return confirm(\'Are you sure you want to delete these items?\')',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
'columns' => [
|
'columns' => [
|
||||||
|
'checkbox' => [
|
||||||
|
'header' => '<input type="checkbox" id="selectall">',
|
||||||
|
'is_sortable' => false,
|
||||||
|
'parse' => [
|
||||||
|
'type' => 'function',
|
||||||
|
'data' => function($row) {
|
||||||
|
return '<input type="checkbox" class="asset_select" name="delete[]" value="' . $row['id_asset'] . '">';
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
'id_asset' => [
|
'id_asset' => [
|
||||||
'value' => 'id_asset',
|
'value' => 'id_asset',
|
||||||
'header' => 'ID',
|
'header' => 'ID',
|
||||||
@ -71,6 +98,7 @@ class ManageAssets extends HTMLController
|
|||||||
'title' => 'Manage assets',
|
'title' => 'Manage assets',
|
||||||
'no_items_label' => 'No assets meet the requirements of the current filter.',
|
'no_items_label' => 'No assets meet the requirements of the current filter.',
|
||||||
'items_per_page' => 30,
|
'items_per_page' => 30,
|
||||||
|
'index_class' => 'col-md-6',
|
||||||
'base_url' => BASEURL . '/manageassets/',
|
'base_url' => BASEURL . '/manageassets/',
|
||||||
'get_data' => function($offset = 0, $limit = 30, $order = '', $direction = 'down') {
|
'get_data' => function($offset = 0, $limit = 30, $order = '', $direction = 'down') {
|
||||||
if (!in_array($order, ['id_asset', 'id_user_uploaded', 'title', 'subdir', 'filename']))
|
if (!in_array($order, ['id_asset', 'id_user_uploaded', 'title', 'subdir', 'filename']))
|
||||||
@ -100,7 +128,25 @@ class ManageAssets extends HTMLController
|
|||||||
];
|
];
|
||||||
|
|
||||||
$table = new GenericTable($options);
|
$table = new GenericTable($options);
|
||||||
parent::__construct('Asset management - Page ' . $table->getCurrentPage() .'');
|
parent::__construct('Asset management - Page ' . $table->getCurrentPage());
|
||||||
$this->page->adopt(new TabularData($table));
|
|
||||||
|
$wrapper = new AssetManagementWrapper();
|
||||||
|
$this->page->adopt($wrapper);
|
||||||
|
$wrapper->adopt(new TabularData($table));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleAssetDeletion()
|
||||||
|
{
|
||||||
|
if (!isset($_POST['delete']) || !is_array($_POST['delete']))
|
||||||
|
throw new UnexpectedValueException();
|
||||||
|
|
||||||
|
foreach ($_POST['delete'] as $id_asset)
|
||||||
|
{
|
||||||
|
$asset = Asset::fromId($id_asset);
|
||||||
|
$asset->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
header('Location: ' . BASEURL . '/manageassets/');
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
templates/AssetManagementWrapper.php
Normal file
36
templates/AssetManagementWrapper.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/*****************************************************************************
|
||||||
|
* AssetManagementWrapper.php
|
||||||
|
* Defines asset management wrapper template.
|
||||||
|
*
|
||||||
|
* Kabuki CMS (C) 2013-2015, Aaron van Geffen
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
class AssetManagementWrapper extends Template
|
||||||
|
{
|
||||||
|
public function html_main()
|
||||||
|
{
|
||||||
|
echo '
|
||||||
|
<form action="" method="post">';
|
||||||
|
|
||||||
|
foreach ($this->_subtemplates as $template)
|
||||||
|
$template->html_main();
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</form>
|
||||||
|
<script type="text/javascript" defer="defer">
|
||||||
|
const allAreSelected = () => {
|
||||||
|
return document.querySelectorAll(".asset_select").length ===
|
||||||
|
document.querySelectorAll(".asset_select:checked").length;
|
||||||
|
};
|
||||||
|
|
||||||
|
const selectAll = document.getElementById("selectall");
|
||||||
|
selectAll.addEventListener("change", event => {
|
||||||
|
const newSelectedState = !allAreSelected();
|
||||||
|
document.querySelectorAll(".asset_select").forEach(el => {
|
||||||
|
el.checked = newSelectedState;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>';
|
||||||
|
}
|
||||||
|
}
|
@ -145,8 +145,12 @@ class TabularData extends SubTemplate
|
|||||||
|
|
||||||
protected function showForm($form)
|
protected function showForm($form)
|
||||||
{
|
{
|
||||||
echo '
|
if (!isset($form['is_embed']))
|
||||||
|
echo '
|
||||||
<form action="', $form['action'], '" method="', $form['method'], '" class="', $form['class'], '">';
|
<form action="', $form['action'], '" method="', $form['method'], '" class="', $form['class'], '">';
|
||||||
|
else
|
||||||
|
echo '
|
||||||
|
<div class="', $form['class'], '">';
|
||||||
|
|
||||||
if (!empty($form['is_group']))
|
if (!empty($form['is_group']))
|
||||||
echo '
|
echo '
|
||||||
@ -206,7 +210,12 @@ class TabularData extends SubTemplate
|
|||||||
foreach ($form['buttons'] as $name => $button)
|
foreach ($form['buttons'] as $name => $button)
|
||||||
{
|
{
|
||||||
echo '
|
echo '
|
||||||
<button class="btn ', isset($button['class']) ? $button['class'] : 'btn-primary', '" type="', $button['type'], '" name="', $name, '">', $button['caption'], '</button>';
|
<button class="btn ', isset($button['class']) ? $button['class'] : 'btn-primary', '" type="', $button['type'], '" name="', $name, '"';
|
||||||
|
|
||||||
|
if (isset($button['onclick']))
|
||||||
|
echo ' onclick="', $button['onclick'], '"';
|
||||||
|
|
||||||
|
echo '>', $button['caption'], '</button>';
|
||||||
|
|
||||||
if (isset($button['html_after']))
|
if (isset($button['html_after']))
|
||||||
echo $button['html_after'];
|
echo $button['html_after'];
|
||||||
@ -216,7 +225,11 @@ class TabularData extends SubTemplate
|
|||||||
echo '
|
echo '
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
echo '
|
if (!isset($form['is_embed']))
|
||||||
|
echo '
|
||||||
</form>';
|
</form>';
|
||||||
|
else
|
||||||
|
echo '
|
||||||
|
</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user