Files
breadcrumb-the-shire/pages/admin/permissions/index(default).phtml
2026-02-04 23:31:53 +01:00

122 lines
4.1 KiB
PHTML

<?php
use MintyPHP\Router;
$canCreatePermissions = can('permissions.create');
$canUpdatePermissions = can('permissions.update');
$canDeletePermissions = can('permissions.delete');
?>
<div class="app-breadcrumb">
<a href="/admin">Startseite</a><i class="bi bi-chevron-right"></i><?php e(t('Permissions')); ?>
</div>
<div class="app-list-titlebar">
<h1><?php e(t('Permissions')); ?></h1>
<div class="app-list-titlebar-actions">
<button
class="outline secondary"
type="button"
data-toolbar-toggle
data-toolbar-target="#permissions-toolbar"
data-toolbar-text-show="<?php e(t('Show filters')); ?>"
data-toolbar-text-hide="<?php e(t('Hide filters')); ?>"
>
<i class="bi bi-funnel-fill"></i> <span data-toolbar-label><?php e(t('Hide filters')); ?></span>
</button>
<?php if ($canCreatePermissions): ?>
<a role="button" class="primary" href="admin/permissions/create">
<i class="bi bi-plus"></i> <?php e(t('Create permission')); ?>
</a>
<?php endif; ?>
</div>
</div>
<div class="app-list-toolbar" id="permissions-toolbar">
<input type="search" id="permission-search" placeholder="<?php e(t('Search...')); ?>">
</div>
<div class="app-list-table">
<div id="permissions-grid"></div>
</div>
<?php $gridFactoryVersion = @filemtime('web/js/core/app-grid-factory.js') ?: time(); ?>
<script src="<?php e(asset('vendor/gridjs/gridjs.umd.js')); ?>"></script>
<script type="module">
import { initToolbarToggles } from "<?php e(asset('js/components/app-toggle-toolbar.js')); ?>";
import { createServerGrid } from "<?php e(asset('js/core/app-grid-factory.js?v=' . $gridFactoryVersion)); ?>";
import { buildUrl, postAction, badgeHtml } from "<?php e(asset('js/pages/app-list-utils.js')); ?>";
initToolbarToggles();
const appBase = "<?php e(localeBase()); ?>";
const csrf = <?php MintyPHP\Buffer::get('grid_csrf'); ?>;
const deleteConfirm = "<?php e(t('Delete this permission?')); ?>";
const buildActionUrl = (action, id) => buildUrl(appBase, `admin/permissions/${action}/${id}`);
const initPermissionsGrid = () => {
const gridConfig = createServerGrid({
gridjs: window.gridjs,
container: '#permissions-grid',
dataUrl: 'admin/permissions/data',
appBase,
columns: [
{ name: "<?php e(t('Description')); ?>", sort: true },
{ name: "<?php e(t('Permission key')); ?>", sort: true },
{ name: "<?php e(t('Created')); ?>", sort: true, formatter: (cell) => badgeHtml(gridjs, cell) },
{ name: 'ID', hidden: true }
],
sortColumns: ['description', 'key', 'created', null],
paginationLimit: 10,
language: <?php MintyPHP\Buffer::get('grid_lang'); ?>,
mapData: (data) => data.data.map((row) => [
row.description,
row.key,
row.created,
row.id
]),
actions: {
enabled: true,
label: "<?php e(t('Actions')); ?>",
getRowId: (row) => row?.cells?.[3]?.data,
items: [
{
key: 'edit',
type: 'link',
label: "<i class=\"bi bi-pencil-fill\"></i>",
href: ({ id }) => buildActionUrl('edit', id)
},
<?php if ($canDeletePermissions): ?>
{
key: 'delete',
label: "<i class=\"bi bi-trash3-fill\"></i>",
className: 'danger outline',
confirm: deleteConfirm
}
<?php endif; ?>
],
onAction: async ({ action, id, grid }) => {
if (action !== 'delete') return;
const url = buildActionUrl('delete', id);
const response = await postAction(url, csrf);
if (response.ok) {
grid.forceRender();
} else {
window.location.href = new URL('admin/permissions', appBase).toString();
}
}
},
rowDblClick: {
getUrl: (row) => {
const id = row?.cells?.[3]?.data;
return id ? buildActionUrl('edit', id) : '';
}
},
search: {
input: '#permission-search',
param: 'search',
debounce: 250
}
});
return gridConfig;
};
initPermissionsGrid();
</script>