stash light
This commit is contained in:
49
templates/admin/base.html.twig
Normal file
49
templates/admin/base.html.twig
Normal file
@@ -0,0 +1,49 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{% block title %}Admin{% endblock %}</title>
|
||||
|
||||
<link href="/assets/styles/bootstrap.min.css" rel="stylesheet"/>
|
||||
<link rel="stylesheet" href="/assets/styles/base.css">
|
||||
</head>
|
||||
<body class="bg-dark text-light">
|
||||
|
||||
<nav class="navbar navbar-dark bg-black text-info px-3">
|
||||
<span class="navbar-brand">mitho Admin</span>
|
||||
|
||||
<div class="ms-auto d-flex align-items-center gap-3">
|
||||
{% if app.user %}
|
||||
<span class="small text-secondary">{{ app.user.userIdentifier }}</span>
|
||||
<a class="btn btn-sm btn-outline-light" href="{{ path('admin_logout') }}">Logout</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-2 bg-black text-info border-end border-secondary min-vh-100 pt-3">
|
||||
<ul class="nav flex-column">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-light" href="{{ path('admin_dashboard') }}">Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-light" href="{{ path('admin_documents') }}">Dokumente</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-light" href="{{ path('admin_jobs') }}">
|
||||
Ingest Jobs
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-10 pt-3">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
21
templates/admin/dashboard/index.html.twig
Normal file
21
templates/admin/dashboard/index.html.twig
Normal file
@@ -0,0 +1,21 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Admin Dashboard{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1 class="h4 mb-3">Dashboard</h1>
|
||||
|
||||
<div class="card bg-black text-info border-secondary">
|
||||
<div class="card-body">
|
||||
<div class="mb-2">
|
||||
<strong>User:</strong> {{ app.user.userIdentifier }}
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<strong>Rollen:</strong> {{ app.user.roles|join(', ') }}
|
||||
</div>
|
||||
|
||||
<hr class="border-secondary">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
61
templates/admin/document/index.html.twig
Normal file
61
templates/admin/document/index.html.twig
Normal file
@@ -0,0 +1,61 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Dokumente{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h1 class="h4 mb-0">Dokumente</h1>
|
||||
<a href="{{ path('admin_document_new') }}" class="btn btn-sm btn-light">
|
||||
+ Neues Dokument
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if documents is empty %}
|
||||
<div class="alert alert-secondary">
|
||||
Keine Dokumente vorhanden.
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="card bg-black text-info border-secondary">
|
||||
<div class="card-body p-0">
|
||||
<table class="table table-dark table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Titel</th>
|
||||
<th>Status</th>
|
||||
<th>Versionen</th>
|
||||
<th>Aktive Version</th>
|
||||
<th>Erstellt am</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for document in documents %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('admin_document_show', {id: document.id}) }}" class="text-decoration-none text-light">
|
||||
{{ document.title }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if document.status == 'ACTIVE' %}
|
||||
<span class="badge bg-success">Aktiv</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">Archiviert</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ document.versions|length }}</td>
|
||||
<td>
|
||||
{% if document.currentVersion %}
|
||||
v{{ document.currentVersion.versionNumber }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ document.createdAt|date('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
23
templates/admin/document/new.html.twig
Normal file
23
templates/admin/document/new.html.twig
Normal file
@@ -0,0 +1,23 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Neues Dokument{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1 class="h4 mb-4">Neues Dokument</h1>
|
||||
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Titel</label>
|
||||
<input class="form-control" name="title" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Datei</label>
|
||||
<input type="file" class="form-control" name="file" required>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-light">Speichern</button>
|
||||
|
||||
</form>
|
||||
{% endblock %}
|
||||
29
templates/admin/document/new_version.html.twig
Normal file
29
templates/admin/document/new_version.html.twig
Normal file
@@ -0,0 +1,29 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Neue Version{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<a href="{{ path('admin_document_show', {id: document.id}) }}"
|
||||
class="btn btn-sm btn-outline-light mb-3">
|
||||
← Zurück
|
||||
</a>
|
||||
|
||||
<h1 class="h4 mb-4">
|
||||
Neue Version für: {{ document.title }}
|
||||
</h1>
|
||||
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Datei auswählen</label>
|
||||
<input type="file" class="form-control" name="file" required>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-light">
|
||||
Version hochladen
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
138
templates/admin/document/show.html.twig
Normal file
138
templates/admin/document/show.html.twig
Normal file
@@ -0,0 +1,138 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Dokument{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<a href="{{ path('admin_documents') }}" class="btn btn-sm btn-outline-light mb-3">
|
||||
← Zurück
|
||||
</a>
|
||||
|
||||
<h1 class="h4 mb-3">{{ document.title }}</h1>
|
||||
|
||||
<div class="card bg-black text-info border-secondary mb-4">
|
||||
<div class="card-body">
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Status:</strong>
|
||||
{% if document.status == 'ACTIVE' %}
|
||||
<span class="badge bg-success">Aktiv</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">Archiviert</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Erstellt von:</strong>
|
||||
{{ document.createdBy.email }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Erstellt am:</strong>
|
||||
{{ document.createdAt|date('d.m.Y H:i') }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Aktive Version:</strong>
|
||||
{% if document.currentVersion %}
|
||||
v{{ document.currentVersion.versionNumber }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="h5 mb-3">Versionen</h2>
|
||||
<a href="{{ path('admin_document_version_new', {id: document.id}) }}"
|
||||
class="btn btn-sm btn-light mb-3">
|
||||
+ Neue Version
|
||||
</a>
|
||||
{% if document.versions is empty %}
|
||||
<div class="alert alert-secondary">
|
||||
Keine Versionen vorhanden.
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="card bg-black text-info border-secondary">
|
||||
<div class="card-body p-0">
|
||||
<table class="table table-dark table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Version</th>
|
||||
<th>Aktiv</th>
|
||||
<th>Ingest</th>
|
||||
<th>Checksum</th>
|
||||
<th>Erstellt von</th>
|
||||
<th>Datum</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for version in document.versions %}
|
||||
<tr>
|
||||
<td>v{{ version.versionNumber }}</td>
|
||||
|
||||
<td>
|
||||
{% if version.isActive %}
|
||||
<span class="badge bg-success">Ja</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">Nein</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if version.ingestStatus == 'INDEXED' %}
|
||||
<span class="badge bg-success">INDEXED</span>
|
||||
{% elseif version.ingestStatus == 'RUNNING' %}
|
||||
<span class="badge bg-warning text-dark">RUNNING</span>
|
||||
{% elseif version.ingestStatus == 'FAILED' %}
|
||||
<span class="badge bg-danger">FAILED</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">PENDING</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ version.checksum[:10] }}...
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ version.createdBy.email }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ version.createdAt|date('d.m.Y H:i') }}
|
||||
</td>
|
||||
<td>
|
||||
{% if version.isActive %}
|
||||
|
||||
{% if version.ingestStatus != constant('App\\Entity\\DocumentVersion::INGEST_RUNNING') %}
|
||||
|
||||
<form method="post"
|
||||
action="{{ path('admin_document_version_ingest', {versionId: version.id}) }}"
|
||||
style="display:inline;">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('ingest_version') }}">
|
||||
<button class="btn btn-sm btn-outline-info">
|
||||
Ingest starten
|
||||
</button>
|
||||
</form>
|
||||
|
||||
{% else %}
|
||||
<span class="text-warning">Läuft...</span>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
<span class="text-muted">Nicht aktiv</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
109
templates/admin/job/index.html.twig
Normal file
109
templates/admin/job/index.html.twig
Normal file
@@ -0,0 +1,109 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Ingest Jobs{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<h1 class="h4 mb-4">Ingest Jobs</h1>
|
||||
|
||||
<form method="post"
|
||||
action="{{ path('admin_global_reindex') }}"
|
||||
onsubmit="return confirm('Global Reindex starten? Dies kann einige Zeit dauern.');">
|
||||
|
||||
<button type="submit"
|
||||
class="btn btn-danger mb-3">
|
||||
Global Reindex starten
|
||||
</button>
|
||||
</form>
|
||||
|
||||
{% if jobs is empty %}
|
||||
<div class="alert alert-secondary">
|
||||
Keine Jobs vorhanden.
|
||||
</div>
|
||||
{% else %}
|
||||
|
||||
<div class="card bg-black text-info border-secondary">
|
||||
<div class="card-body p-0">
|
||||
|
||||
<table class="table table-dark table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Typ</th>
|
||||
<th>Status</th>
|
||||
<th>Dokument</th>
|
||||
<th>Version</th>
|
||||
<th>Gestartet</th>
|
||||
<th>Beendet</th>
|
||||
<th>User</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{% for job in jobs %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('admin_job_show', {id: job.id}) }}"
|
||||
class="text-decoration-none text-light">
|
||||
{{ job.id }}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ job.type }}</td>
|
||||
|
||||
<td>
|
||||
{% if job.status == 'COMPLETED' %}
|
||||
<span class="badge bg-success">COMPLETED</span>
|
||||
{% elseif job.status == 'RUNNING' %}
|
||||
<span class="badge bg-warning text-dark">RUNNING</span>
|
||||
{% elseif job.status == 'FAILED' %}
|
||||
<span class="badge bg-danger">FAILED</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">{{ job.status }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if job.documentId %}
|
||||
{{ job.documentId }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if job.documentVersionId %}
|
||||
{{ job.documentVersionId }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>{{ job.startedAt|date('d.m.Y H:i:s') }}</td>
|
||||
|
||||
<td>
|
||||
{% if job.finishedAt %}
|
||||
{{ job.finishedAt|date('d.m.Y H:i:s') }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if job.startedBy %}
|
||||
{{ job.startedBy.email }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
88
templates/admin/job/show.html.twig
Normal file
88
templates/admin/job/show.html.twig
Normal file
@@ -0,0 +1,88 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Ingest Job{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<a href="{{ path('admin_jobs') }}"
|
||||
class="btn btn-sm btn-outline-light mb-3">
|
||||
← Zurück
|
||||
</a>
|
||||
|
||||
<h1 class="h4 mb-4">Ingest Job</h1>
|
||||
|
||||
<div class="card bg-black text-info border-secondary">
|
||||
<div class="card-body">
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>ID:</strong> {{ job.id }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Typ:</strong> {{ job.type }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Status:</strong>
|
||||
{% if job.status == 'COMPLETED' %}
|
||||
<span class="badge bg-success">COMPLETED</span>
|
||||
{% elseif job.status == 'RUNNING' %}
|
||||
<span class="badge bg-warning text-dark">RUNNING</span>
|
||||
{% elseif job.status == 'FAILED' %}
|
||||
<span class="badge bg-danger">FAILED</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">{{ job.status }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Dokument:</strong>
|
||||
{{ job.documentId ?? '-' }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Version:</strong>
|
||||
{{ job.documentVersionId ?? '-' }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Gestartet:</strong>
|
||||
{{ job.startedAt|date('d.m.Y H:i:s') }}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Beendet:</strong>
|
||||
{% if job.finishedAt %}
|
||||
{{ job.finishedAt|date('d.m.Y H:i:s') }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<strong>Gestartet von:</strong>
|
||||
{% if job.startedBy %}
|
||||
{{ job.startedBy.email }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if job.errorMessage %}
|
||||
<div class="alert alert-danger mt-3">
|
||||
<strong>Fehler:</strong><br>
|
||||
{{ job.errorMessage }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if job.logPath %}
|
||||
<div class="mt-3">
|
||||
<strong>Log Datei:</strong><br>
|
||||
<code>{{ job.logPath }}</code>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
36
templates/admin/security/login.html.twig
Normal file
36
templates/admin/security/login.html.twig
Normal file
@@ -0,0 +1,36 @@
|
||||
{% extends 'admin/base.html.twig' %}
|
||||
|
||||
{% block title %}Admin Login{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-md-5 col-lg-4">
|
||||
|
||||
<h1 class="h4 mb-3">Admin Login</h1>
|
||||
|
||||
{% if error %}
|
||||
<div class="alert alert-danger">
|
||||
{{ error.messageKey|trans(error.messageData, 'security') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="{{ path('admin_login') }}">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">E-Mail</label>
|
||||
<input class="form-control" name="_username" value="{{ last_username }}" autocomplete="email" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Passwort</label>
|
||||
<input class="form-control" type="password" name="_password" autocomplete="current-password" required>
|
||||
</div>
|
||||
|
||||
{# CSRF #}
|
||||
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
|
||||
|
||||
<button class="btn btn-light w-100" type="submit">Einloggen</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user