Assets & Bibliotheken
Inhaltsverzeichnis
- Tabellarische Übersicht
- Runtime-Details
- Pfad, Autoload und Sonderfälle
- Interne Bild-Assets
- Neue Kandidaten außerhalb der Runtime
Tabellarische Übersicht
| Kategorie | Library | Runtime-Stand | Zweck | Eingebunden in |
|---|---|---|---|---|
| UI | tabler |
1.4.0 (nur tabler.min.css / tabler.min.js) |
Admin-UI-Framework | Admin / Member |
| UI | tabler-icons |
3.41.1 (nur tabler-icons.min.css + woff2/woff/ttf) |
Icon-Webfont | Admin |
| UI | photoswipe |
5.x-Build |
Lightbox | Frontend |
| Editor | editorjs |
2.31.6 |
Block-Editor | Admin / Frontend |
| Editor | suneditor |
3.0.5 |
Legacy-WYSIWYG | Admin |
| Auth | php-jwt |
gebündelter Snapshot | JWT | API / Auth |
| Auth | ldaprecord |
4.0.3 |
LDAP / AD | Auth |
| Auth | twofactorauth |
gebündelter Snapshot | TOTP | Auth |
| Auth | bacon-qr-code + dasprid-enum |
3.1.1 / 1.0.7 |
lokale TOTP-QR-Codes als SVG (kein externer QR-Dienst, kein GD) | Auth / Member |
| Auth | webauthn |
gebündelter Snapshot | Passkeys | Auth |
mailer |
8.0.8 |
Mail-Versand | System | |
mime |
8.0.8 |
MIME-Objekte / Anhänge | System | |
egulias-email-validator + doctrine-lexer |
4.0.4 / 3.0.2 |
RFC-Adressvalidierung (Pflicht für Mime\Address / SMTP) |
System | |
| Search | tntsearch |
5.0.3 |
Volltextsuche | Suche |
| SEO | melbahja-seo |
gebündelter Snapshot | SEO-Helfer | SEO |
| Security | htmlpurifier |
gebündelter Snapshot | XSS-Schutz | System |
| Security | dompurify + js/cms-csp-runtime.js |
3.4.16 |
Trusted-Types-default-Policy, Style-Nonce für dynamische <style> |
Admin / Member / Frontend |
| i18n | translation |
8.0.8 |
Übersetzungen | System |
| i18n | yaml |
8.0.8 |
Parser für CMS/lang/*.yaml |
System |
| AI | symfony/ai-platform |
0.6.0 |
AI-Plattform-Grundvertrag / Core-Adapter-Basis | System / AI Services |
| AI (transitiv) | serializer, property-info, property-access, type-info, uid, string, event-dispatcher |
8.0.8 |
Abhängigkeiten der AI Platform | Transitiv |
| AI (transitiv) | oskarstark-enum-helper, phpdocumentor-*, phpstan-phpdoc-parser, webmozart-assert, doctrine-deprecations |
aktuelle Stable | Abhängigkeiten der AI Platform | Transitiv |
| Util | Carbon |
3.11.4 (src/Carbon + lazy/Carbon) |
Datum / Zeit | System |
| Util | clock + psr/Clock |
8.0.8 / 1.0.0 |
Clock-Abstraktion für Carbon / AI | Transitiv |
| Util | psr |
Log 3.0.2, EventDispatcher 1.0.0, Container 2.0.2, Clock 1.0.0 |
PSR-Interfaces | Transitiv |
| Util | symfony-contracts |
3.6.1 |
Service-/Translation-/EventDispatcher-/HttpClient-/Deprecation-Contracts | Transitiv |
| Util | polyfill-* |
1.3x/1.4x |
mbstring, ctype, intl-idn, intl-normalizer, intl-grapheme, uuid (nur ohne Extension aktiv) | Transitiv |
dompdf |
3.1.5 |
PDF-Erzeugung | System | |
| Intern | css/js/images |
intern | 365CMS-eigene Runtime-Dateien | Admin / Frontend / Member |
| Referenz | msgraph |
Referenzstand (nur ASSETS/msgraph-sdk-php-2.56.0/ im lokalen Staging, kein CMS/assets/msgraph/) |
SDK-Ablage | nicht verdrahtet; Graph-Mailversand nutzt eigene HTTP-Aufrufe (AzureMailTokenProvider) |
Runtime-Details
Die produktive Detaildoku richtet sich nach den Laufzeitpfaden in CMS/assets/ und dem dokumentierten Vendor-Sonderfall CMS/vendor/dompdf/.
Wichtig im aktuellen Stand:
ASSETS/ist Quell- und Staging-Bereich, nicht der direkte Webroot-Assetpfadeditorjsundsuneditorsind keine simplen Ordnerkopien, sondern kuratierte bzw. gebaute Runtime-Setseditorjsbenötigt für das produktivedelimiter.umd.jsbei neuen Plugin-Ständen einen gezielten Build-/Refresh-Pfadtabler,tabler-iconsundPhotoSwipewerden nur mit ihren tatsächlich geladenen Dateien übernommen (keine RTL-/Map-/SVG-Font-/Varianten-Dateien)tntsearchliegt produktiv bewusst aufgeteilt intntsearchsrc/undtntsearchhelper/images/enthält produktive Dashboard-, Logo- und Branding-Beständeai-platform/enthält die produktiv registrierte Symfony-AI-Platform-Basis inklusive aller Pflichtabhängigkeiten; Provider-Bridges undsymfony/http-clientbleiben separat zu bewerten- Bibliotheken werden ohne
Test*/,Command/,DataCollector/,DependencyInjection/, Extractor- und Framework-Integrationsordner übernommen msgraph/bleibt Referenzablage, solange kein eigener produktiver Core-Service diese Bibliothek verdrahtet
Interne Bild-Assets
Der produktive Bildbestand liegt unter CMS/assets/images/ und umfasst aktuell
13 PNG-Dateien für Dashboard-Icons, Logos, Schriftzüge und Markenzeichen.
Die vollständige Dateiliste mit Abmessungen und Verwendungszweck steht in
assets/images/README.md. Die übergeordnete Runtime-Struktur
ist zusätzlich in DOC/FILELIST.md dokumentiert.
Für PHP-Referenzen gilt der zentrale Asset-Helper:
cms_asset_url('images/LOGO_365CMS-75px.png')
Pfad, Autoload und Sonderfälle
- Runtime-Pfad:
CMS/assets/ - Zentraler Autoloader:
CMS/assets/autoload.php– PSR-4-Map (cms_vendor_psr4_map()), Composer-files-Bootstraps (Polyfills,trigger_deprecation(),Clock\now(),String\u()) und Classmap für denNormalizer-Stub - Neue Library aufnehmen: Paket ohne Tests/Tooling nach
CMS/assets/<name>/kopieren, Präfix incms_vendor_psr4_map()eintragen, ggf.filesergänzen und inCMS/core/VendorRegistry.php(Bundle + ggf. Funktions-Probe) registrieren - Vendor-Sonderfall:
CMS/vendor/dompdf/wird separat überCMS/vendor/dompdf/autoload.phpgeladen - SunEditor-Sonderfall: Die Runtime wird aus
dist/plussrc/langs/de.jsübernommen; fehltdist/nach einem frischen Upstream-Download, müssen die Build-Artefakte zuerst lokal erzeugt werden - Editor.js-Sonderfall: Der Runtime-Vertrag folgt
CMS/core/Services/EditorJs/EditorJsAssetService.php, nicht dem kompletten Plugin-Baum;delimiter.umd.jswurde für den aktuellen Stand gezielt auseditorjs-delimiter-version1.0.2neu gebaut - JS/CSS-Ladung: erfolgt weiterhin manuell über Admin-Partials, Theme-Templates und Service-spezifische Loader; es gibt keine zentrale Bundling-Pipeline
Zusätzliche Hinweise:
cookieconsent,filepond,elfinder,simplepieundgridjssind keine Runtime-Bundles mehr und wurden in3.4.02ausCMS/assets/entfernt- die produktiv eingebundenen Symfony-8-Bundles deklarieren
PHP >= 8.4 .htaccesssperrtvendor/komplett sowie PHP-/Metadaten-/versteckte Dateien unterassets/- CSP-Vertrag: Inline-
<script>/<style>nur mitSecurity::instance()->nonceAttr(); keine Inline-Event-Handler (onclick…) – stattdessendata-cms-*-Attribute ausjs/cms-inline-actions.js;style="-Attribute bleiben per CSP blockiert (style-src-attr);CMS\Http\InlineStyleRewriter(core/Http/InlineStyleRewriter.php, gestartet inBootstrap::run()) überführt sie in vollständigen HTML-Antworten serverseitig in Klassen plus einen<style nonce>-Block vor</head>. Unsichere Werte ({ } < > @ \, Kommentare) bleiben blockiert; Fragmente, Downloads, Antworten mitContent-Length, gestreamte oder > 4 MB große Ausgaben bleiben unverändert; per JavaScript eingefügte Style-Attribute werden nicht umgeschrieben (dort CSSOMel.style.*nutzen). Tests:TESTS/csp-style-rewriter/run.php js/tabler-bootstrap-bridge.jsstelltwindow.bootstrapfür Tabler 1.4 (window.tabler) bereit- seit
3.3.42sind Tabler Icons produktiv lokal unterCMS/assets/tabler-icons/eingebunden; der Admin-Header lädt keine externen jsDelivr-/Tabler-Icon-Webfonts mehr DOC/FILELIST.mdbleibt die lesbare Strukturreferenz für die aktuelle Runtime-Oberfläche
Neue Kandidaten außerhalb der Runtime
Neu dokumentierte, aber noch nicht produktiv integrierte Pakete:
symfony/cacheunterASSETS/cache-8.0.8/guzzlehttp/guzzleunterASSETS/guzzle-7.10.0/adhocore/jwtunterASSETS/php-jwt_yuliyan_1.1.3/
Diese Kandidaten sind im aktuellen Core nicht aktiv verdrahtet. Die Code- und Laufzeitprüfung zeigte hierfür keine produktiven Referenzen in CMS/**; deshalb wurden sie beim Refresh nach 3.4.00 bewusst nicht in die aktive Runtime übernommen.
Tabler Icons waren früher ebenfalls Beobachtungskandidat, sind seit 3.3.42 aber gezielt als lokales Runtime-Bundle nach CMS/assets/tabler-icons/ übernommen und ersetzen dort den früheren CDN-Request.
Wichtig dazu: symfony/ai-platform gehört nicht mehr in diese Liste, weil die Basis jetzt bewusst produktiv unter CMS/assets/ai-platform/ gespiegelt, über CMS/assets/autoload.php auflösbar gemacht und in Diagnose -> Assets registriert wurde.
Hinweis zum jüngsten Bereinigungsschritt:
stichoza/google-translate-phpwird nicht mehr als Staging-Kandidat mitgeführt und wurde aus/ASSETSentfernt.- Für Übersetzungsfunktionen soll 365CMS stattdessen auf einen AI-Services-Bereich mit Provider-Scope setzen, nicht auf eine einzelne inoffizielle Crawling-Bibliothek.
Diese Kandidaten benötigen vor einer Aufnahme:
- vollständige Dependency-Prüfung
- Service-/Adapter-Schicht im Core
- Security-/Rate-Limit-/Provider-Konzept
- dokumentierte Entscheidung, ob lokales Bundling überhaupt sinnvoll ist
Die ausführliche Bewertungsdoku steht in ../ASSETS_NEW.md. Die kanonische AI-Konzeption liegt zusätzlich in ../ai/AI-SERVICES.md, ergänzt um den Admin-Kontext unter ../admin/system-settings/AI-SERVICES.md. Die Roadmap für Eigenersatz und Wrapper-Strategien steht in ../ASSETS_OwnAssets.md.
Prüfstand 2026-10-02
Abgleich mit CMS/assets/, CMS/assets/autoload.php und CMS/core/VendorRegistry.php:
| Library | Verifizierter Stand | Einbindung im Code |
|---|---|---|
dompurify |
3.4.16 (purify.min.js) |
cms_csp_runtime_tags() in includes/functions/options-runtime.php zusammen mit js/cms-csp-runtime.js |
editorjs |
2.31.6 + 27 Plugin-UMDs | EditorJsService / EditorJsAssetService |
photoswipe |
5.4.4 (ESM-Build) | Bootstrap.php (Customizer performance.enable_photoswipe), js/photoswipe-init.js |
tabler-icons |
3.41.1 | Admin-Header (lokal) |
htmlpurifier |
4.19.0 | eigener Autoloader in assets/autoload.php; PurifierService (Cache cache/htmlpurifier) |
cron (poliander/cron) |
3.3.1 | CronExpressionAdapter |
twofactorauth + bacon-qr-code |
Snapshot | Auth/MFA/TotpAdapter.php |
webauthn |
Snapshot | Auth/Passkey/WebAuthnAdapter.php |
ldaprecord |
4.0.3 | Auth/LDAP/LdapAuthProvider.php |
php-jwt |
Snapshot | Services/JwtService.php (von keiner Core-Route genutzt) |
melbahja-seo |
Snapshot | SeoSchemaRenderer, SitemapService, IndexingService, SEO-Suite |
mailer / mime |
8.0.8 | MailService |
translation / yaml |
8.0.8 | TranslationService (Kataloge CMS/lang/*.yaml) |
tntsearch |
5.0.3 | SearchService (Index cache/search/); die Seitensuche /search nutzt seit 3.4.06 SiteSearchService |
Carbon |
3.11.4 | time_ago() in includes/functions/redirects-auth.php |
suneditor |
3.0.5 | EditorService, nur bei setting_editor_type = suneditor |
dompdf |
3.1.5 | CMS/vendor/dompdf/, PdfService (z. B. PDF-Export im Router) |
images/ |
13 PNG + plugin-not-found.svg |
Logos, Dashboard-Icons, Member-Platzhalter |
Nicht (mehr) im Repository: cookieconsent, filepond, elfinder, gridjs, simplepie, msgraph unter CMS/assets/ sowie der Staging-Ordner ASSETS/ im Repository-Root. Die Unterordner-READMEs dieser Pakete sind als historische Notizen zu lesen.
Inhalte in diesem Bereich
- ASSET-Übersicht 365CMS assets/ASSET.md
- Vendor-/Drittpfad-Netzwerkpfade assets/VENDOR-NETWORK-PATHS.md
- Carbon assets/carbon/
- Cookie Consent assets/cookieconsent/
- Cron Library (poliander/cron 3.3.1) assets/cron/
- DOMPurify assets/dompurify/
- Editor.js assets/editorjs/
- elFinder assets/elfinder/
- FilePond assets/filepond/
- firebase/php-jwt assets/php-jwt/
- Grid.js assets/gridjs/
- HTMLPurifier assets/htmlpurifier/
- Interne Bild-Assets assets/images/
- Interne CSS-Assets assets/css/
- Interne JavaScript-Assets assets/js/
- lbuchs/WebAuthn assets/webauthn/
- LdapRecord assets/ldaprecord/
- melbahja-seo assets/melbahja-seo/
- Microsoft Graph SDK / Referenzablage assets/msgraph/
- PhotoSwipe assets/photoswipe/
- PSR-Interfaces assets/psr/
- RobThree TwoFactorAuth assets/twofactorauth/
- SimplePie assets/simplepie/
- SunEditor assets/suneditor/
- Symfony Mailer assets/mailer/
- Symfony Mime assets/mime/
- Symfony Translation assets/translation/
- Tabler Core assets/tabler/
- TNTSearch assets/tntsearch/