Wiederkehrende Aufgaben ohne Cronjob (ADR 073): Sicherung, Statistik kuerzen, geplante Veroeffentlichung, Updatepruefung und Aufraeumen laufen als Plan in der Tabelle scheduled_task - eine Zeile je Aufgabe mit Faelligkeit, Sperre und letztem Ergebnis. Auf geteiltem Hosting gibt es oft keinen Cronjob; der Plan haengt stattdessen an Anfragen und an einem Takt aus dem geoeffneten Backend. Diese Arbeit entstand in einer parallel laufenden Sitzung und lag bis hierher unveroeffentlicht im Arbeitsverzeichnis: die Releases 1.5.0 bis 1.5.5 wurden bewusst aus dem jeweiligen Tag gebaut und enthielten sie deshalb nicht. Vor der Veroeffentlichung geprueft, nicht bloss eingepackt: - phpunit 452/452, npm test 28/28, npm run test:editor vollstaendig. - Die Migration 20260914000100 legt nur die Tabelle scheduled_task an und nimmt sie beim Zurueckrollen wieder weg. Sie fasst keine bestehenden Daten an. - Seit einer Stunde keine Schreibzugriffe der anderen Sitzung mehr. Dabei zwei Fehler behoben: - config/services.yaml verwendet !tagged_iterator. Das ist gueltiges Symfony, aber "lint:yaml config" kennt eigene Tags nur mit --parse-tags und gab 1 zurueck - der CI-Lauf waere daran gescheitert. Flag ergaenzt. - AdminHeadersSubscriber.php (aus 1.5.3) entsprach nicht dem Stil von php-cs-fixer; composer lint gab 8 zurueck. Behoben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.9 KiB
Twig
36 lines
1.9 KiB
Twig
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title>{% block title %}Verwaltung{% endblock %} · KantSites</title>
|
|
{% include 'favicon.html.twig' %}
|
|
<link rel="stylesheet" href="/assets/admin.css?v={{ kant_version() }}">
|
|
{# Die Fassungskennung fuer die Module untereinander.
|
|
|
|
Die Einstiegsdatei bekommt ihr `?v=` aus der Vorlage, ein `import './editor-model.js'`
|
|
darin nicht - und `public/.htaccess` laesst jede .js-Datei ein Jahr lang als `immutable`
|
|
zwischenspeichern. Nach einem Update lud der Browser damit das neue `editor.js`, behielt
|
|
aber das alte `editor-model.js` und brach mit "does not provide an export named ..." ab.
|
|
Die Importkarte haengt die Fassung an die aufgeloeste Adresse, ohne dass eine einzige
|
|
Importzeile sie kennen muss. Sie steht vor jedem Modul-Skript; spaeter geladen wirkt sie
|
|
nicht mehr. #}
|
|
<script type="importmap" nonce="{{ csp_nonce() }}">{"imports":{
|
|
{%- for modul in ['editor-model', 'media', 'design-panel', 'rich-text', 'canvas-overlay', 'library-previews'] %}
|
|
"/assets/{{ modul }}.js": "/assets/{{ modul }}.js?v={{ kant_version() }}"{{ loop.last ? '' : ',' }}
|
|
{%- endfor %}
|
|
}}</script>
|
|
<script src="/assets/color-field.js?v={{ kant_version() }}" defer></script>
|
|
{% block styles %}{% endblock %}
|
|
{% block scripts %}{% endblock %}
|
|
{# Eigener Block, nicht Teil von `scripts`: Bildschirme wie die Mediathek ersetzen `scripts`
|
|
vollstaendig, und der Takt der Verwaltung darf davon nicht abhaengen. #}
|
|
{% block worker %}{% endblock %}
|
|
</head>
|
|
<body class="{% block body_class %}{% endblock %}">
|
|
<a class="skip-link" href="#admin-main">Zum Inhalt springen</a>
|
|
{% block body %}{% endblock %}
|
|
</body>
|
|
</html>
|