forked from Public/pics
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())
|
||||
throw new NotAllowedException();
|
||||
|
||||
if (isset($_POST['deleteChecked'], $_POST['delete']) && Session::validateSession())
|
||||
$this->handleAssetDeletion();
|
||||
|
||||
Session::resetSessionToken();
|
||||
|
||||
$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' => [
|
||||
'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' => [
|
||||
'value' => 'id_asset',
|
||||
'header' => 'ID',
|
||||
@ -71,6 +98,7 @@ class ManageAssets extends HTMLController
|
||||
'title' => 'Manage assets',
|
||||
'no_items_label' => 'No assets meet the requirements of the current filter.',
|
||||
'items_per_page' => 30,
|
||||
'index_class' => 'col-md-6',
|
||||
'base_url' => BASEURL . '/manageassets/',
|
||||
'get_data' => function($offset = 0, $limit = 30, $order = '', $direction = 'down') {
|
||||
if (!in_array($order, ['id_asset', 'id_user_uploaded', 'title', 'subdir', 'filename']))
|
||||
@ -100,7 +128,25 @@ class ManageAssets extends HTMLController
|
||||
];
|
||||
|
||||
$table = new GenericTable($options);
|
||||
parent::__construct('Asset management - Page ' . $table->getCurrentPage() .'');
|
||||
$this->page->adopt(new TabularData($table));
|
||||
parent::__construct('Asset management - Page ' . $table->getCurrentPage());
|
||||
|
||||
$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)
|
||||
{
|
||||
echo '
|
||||
if (!isset($form['is_embed']))
|
||||
echo '
|
||||
<form action="', $form['action'], '" method="', $form['method'], '" class="', $form['class'], '">';
|
||||
else
|
||||
echo '
|
||||
<div class="', $form['class'], '">';
|
||||
|
||||
if (!empty($form['is_group']))
|
||||
echo '
|
||||
@ -206,7 +210,12 @@ class TabularData extends SubTemplate
|
||||
foreach ($form['buttons'] as $name => $button)
|
||||
{
|
||||
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']))
|
||||
echo $button['html_after'];
|
||||
@ -216,7 +225,11 @@ class TabularData extends SubTemplate
|
||||
echo '
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
if (!isset($form['is_embed']))
|
||||
echo '
|
||||
</form>';
|
||||
else
|
||||
echo '
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user