Newwebshop/templates/admin/override/index.tpl

373 lines
15 KiB
Smarty

{extends file="admin/layout.tpl"}
{block name="title"}Override-Verwaltung{/block}
{block name="content"}
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<i class="fas fa-code"></i> Override-Verwaltung
</h3>
<div class="card-tools">
<a href="/admin/override/create" class="btn btn-primary btn-sm">
<i class="fas fa-plus"></i> Neuer Override
</a>
<a href="/admin/override/statistics" class="btn btn-info btn-sm">
<i class="fas fa-chart-bar"></i> Statistiken
</a>
<a href="/admin/override/settings" class="btn btn-secondary btn-sm">
<i class="fas fa-cog"></i> Einstellungen
</a>
</div>
</div>
<div class="card-body">
<!-- Statistiken -->
<div class="row mb-4">
<div class="col-lg-3 col-6">
<div class="small-box bg-info">
<div class="inner">
<h3>{$statistics.total}</h3>
<p>Gesamt Overrides</p>
</div>
<div class="icon">
<i class="fas fa-code"></i>
</div>
</div>
</div>
<div class="col-lg-3 col-6">
<div class="small-box bg-success">
<div class="inner">
<h3>{$statistics.class}</h3>
<p>Class Overrides</p>
</div>
<div class="icon">
<i class="fas fa-cube"></i>
</div>
</div>
</div>
<div class="col-lg-3 col-6">
<div class="small-box bg-warning">
<div class="inner">
<h3>{$statistics.template}</h3>
<p>Template Overrides</p>
</div>
<div class="icon">
<i class="fas fa-file-alt"></i>
</div>
</div>
</div>
<div class="col-lg-3 col-6">
<div class="small-box bg-danger">
<div class="inner">
<h3>{$statistics.controller}</h3>
<p>Controller Overrides</p>
</div>
<div class="icon">
<i class="fas fa-cogs"></i>
</div>
</div>
</div>
</div>
<!-- Override-Tabelle -->
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>ID</th>
<th>Typ</th>
<th>Original</th>
<th>Override-Pfad</th>
<th>Modul</th>
<th>Status</th>
<th>Erstellt</th>
<th>Aktionen</th>
</tr>
</thead>
<tbody>
{if $overrides}
{foreach from=$overrides item=override}
<tr>
<td>{$override.id}</td>
<td>
<span class="badge badge-{if $override.type == 'class'}info{elseif $override.type == 'template'}warning{else}danger{/if}">
{$override.type|ucfirst}
</span>
</td>
<td>
<code>{$override.original_path}</code>
</td>
<td>
<code>{$override.override_path}</code>
</td>
<td>
<span class="badge badge-secondary">{$override.module_name}</span>
</td>
<td>
{if $override.active}
<span class="badge badge-success">Aktiv</span>
{else}
<span class="badge badge-secondary">Inaktiv</span>
{/if}
</td>
<td>{$override.created_at|date_format:'%d.%m.%Y %H:%M'}</td>
<td>
<div class="btn-group btn-group-sm">
<a href="/admin/override/edit/{$override.id}" class="btn btn-primary" title="Bearbeiten">
<i class="fas fa-edit"></i>
</a>
<a href="/admin/override/validate/{$override.id}" class="btn btn-info" title="Validieren">
<i class="fas fa-check"></i>
</a>
<a href="/admin/override/backup/{$override.id}" class="btn btn-warning" title="Backup erstellen">
<i class="fas fa-save"></i>
</a>
{if $override.active}
<a href="/admin/override/toggle/{$override.id}" class="btn btn-secondary" title="Deaktivieren">
<i class="fas fa-pause"></i>
</a>
{else}
<a href="/admin/override/toggle/{$override.id}" class="btn btn-success" title="Aktivieren">
<i class="fas fa-play"></i>
</a>
{/if}
<a href="/admin/override/delete/{$override.id}" class="btn btn-danger" title="Löschen"
onclick="return confirm('Override wirklich löschen?')">
<i class="fas fa-trash"></i>
</a>
</div>
</td>
</tr>
{/foreach}
{else}
<tr>
<td colspan="8" class="text-center">
<div class="alert alert-info">
<i class="fas fa-info-circle"></i> Keine Overrides gefunden
</div>
</td>
</tr>
{/if}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Override-Details Modal -->
<div class="modal fade" id="overrideDetailsModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Override-Details</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div id="overrideDetailsContent">
<!-- Wird via AJAX geladen -->
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Schließen</button>
</div>
</div>
</div>
</div>
<!-- Override-Validierung Modal -->
<div class="modal fade" id="overrideValidationModal" tabindex="-1">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Override-Validierung</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div id="overrideValidationContent">
<!-- Wird via AJAX geladen -->
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Schließen</button>
</div>
</div>
</div>
</div>
{/block}
{block name="scripts"}
<script>
$(document).ready(function() {
// Override-Details anzeigen
$('.btn-details').click(function(e) {
e.preventDefault();
var overrideId = $(this).data('id');
$.get('/admin/override/details/' + overrideId, function(data) {
$('#overrideDetailsContent').html(data);
$('#overrideDetailsModal').modal('show');
});
});
// Override-Validierung anzeigen
$('.btn-validate').click(function(e) {
e.preventDefault();
var overrideId = $(this).data('id');
$.get('/admin/override/validate/' + overrideId, function(data) {
$('#overrideValidationContent').html(data);
$('#overrideValidationModal').modal('show');
});
});
// Override-Status ändern
$('.btn-toggle').click(function(e) {
e.preventDefault();
var overrideId = $(this).data('id');
var currentStatus = $(this).data('status');
$.post('/admin/override/toggle/' + overrideId, function(response) {
if (response.success) {
location.reload();
} else {
alert('Fehler beim Ändern des Status');
}
});
});
// Override-Backup erstellen
$('.btn-backup').click(function(e) {
e.preventDefault();
var overrideId = $(this).data('id');
if (confirm('Backup für diesen Override erstellen?')) {
$.post('/admin/override/backup/' + overrideId, function(response) {
if (response.success) {
alert('Backup erfolgreich erstellt');
} else {
alert('Fehler beim Erstellen des Backups');
}
});
}
});
// Override löschen
$('.btn-delete').click(function(e) {
e.preventDefault();
var overrideId = $(this).data('id');
if (confirm('Override wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.')) {
$.post('/admin/override/delete/' + overrideId, function(response) {
if (response.success) {
location.reload();
} else {
alert('Fehler beim Löschen des Overrides');
}
});
}
});
// Suchfunktion
$('#overrideSearch').on('keyup', function() {
var value = $(this).val().toLowerCase();
$('table tbody tr').filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
});
});
// Filter nach Typ
$('#overrideTypeFilter').change(function() {
var type = $(this).val();
if (type) {
$('table tbody tr').hide();
$('table tbody tr').each(function() {
if ($(this).find('td:nth-child(2)').text().toLowerCase().indexOf(type) > -1) {
$(this).show();
}
});
} else {
$('table tbody tr').show();
}
});
// Filter nach Status
$('#overrideStatusFilter').change(function() {
var status = $(this).val();
if (status !== '') {
$('table tbody tr').hide();
$('table tbody tr').each(function() {
var rowStatus = $(this).find('td:nth-child(6)').text().toLowerCase();
if (rowStatus.indexOf(status) > -1) {
$(this).show();
}
});
} else {
$('table tbody tr').show();
}
});
});
</script>
{/block}
{block name="styles"}
<style>
.override-table {
font-size: 0.9rem;
}
.override-table code {
font-size: 0.8rem;
background-color: #f8f9fa;
padding: 2px 4px;
border-radius: 3px;
}
.badge {
font-size: 0.75rem;
}
.btn-group-sm .btn {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
}
.small-box {
margin-bottom: 0;
}
.small-box .inner {
padding: 10px;
}
.small-box .icon {
color: rgba(0, 0, 0, 0.15);
z-index: 0;
}
.modal-xl {
max-width: 90%;
}
.alert {
margin-bottom: 0;
}
</style>
{/block}