Version von CMS „GIRVAS“ vom 3. Oktober 2026 in der Entwicklungsphase „Segezha“.
Letzte Änderungen
QueryBuilder: Unterstützung für JOIN, CASE-Ausdrücke und Indizes
Umgesetzt:
- Enum
IndexTypemit Indexarten hinzugefügt (BTREE,HASH,GIST,GIN,SPGIST,BRIN,FULLTEXT) - Klasse
ClauseJoinfür JOINs inSELECThinzugefügt (INNER,LEFT,RIGHT,FULL) - Adaptive Generierung von JOIN-Bedingungen für MySQL und PostgreSQL umgesetzt
- Klasse
CaseExpressionzum Aufbau von CASE-Ausdrücken hinzugefügt - Methoden
whenJsonLike()undwhenJsonArrayContains()für die JSON-Suche umgesetzt - Statische Methode
CaseExpression::sum()hinzugefügt - Factory-Methode
createCase()inQueryBuilderhinzugefügt - Klasse
StatementCreateIndexfürCREATE INDEXhinzugefügt - Klasse
StatementDropIndexfürDROP INDEXhinzugefügt - Unterstützung für
UNIQUE,CONCURRENTLY,IF NOT EXISTS/IF EXISTS, partielle Indizes mitWHEREumgesetzt - Methoden
setStatementCreateIndex()undsetStatementDropIndex()hinzugefügt - In
EntryCategoryCaching initialisierter Daten hinzugefügt
Behoben:
- Escaping von CASE-Ausdrücken in
addSelections()für PostgreSQL
SQL-Dialekte: Unterstützung für MySQL und PostgreSQL auf Kernel-Ebene
Umgesetzt:
- Abstrakte Klasse
Dialectund ImplementierungenPostgreSql,MySql - Factory
DialectFactory - Logische Typen (
id,bigint,integer,boolean,string,string:N,text,json,timestamp) - JSON-Methoden (
jsonExtractBoolean,jsonExtractInt,jsonBuildObject,jsonMergePatch,jsonMergePatches,jsonObjectMergeKey,jsonLike,jsonArrayContainsLike) - Datumsmethoden (
extractYearFromUnixTimestamp,extractMonthFromUnixTimestamp) - Methoden
LIKE,IN,LIMIT/OFFSET,getLastInsertedIDCondition - Fähigkeitsmethoden (
supportsInsertReturning,supportsConcurrently,supportsIfNotExistsForIndex,supportsPartialIndex,supportsDropIndexConcurrently,supportsDropIndexIfExists,supportsIndexType,requiresUsingClause,supportsDefault) - Alle Statements auf den Dialekt umgestellt (
CreateTable,CreateIndex,DropIndex,Insert,Select,Update,Delete) - Alle Clauses auf den Dialekt umgestellt (
Returning,From,Join,Where,OrderBy,Limit,Set) - Installer angepasst: 22 Tabellen, 64 Indizes,
createIndexSafe() - Geschäftslogik auf den Dialekt umgestellt (13 Dateien:
Entry,Entries,EntryCategory,EntriesCategories,EntryComment,EntryComments,User,Users,UserGroup,UsersGroups,PageStatic,PageStatic/Version,Pages)
152-FZ: vollständige technische Abdeckung auf Kernel-Ebene
Umgesetzt:
- Protokollierung aller Aktionen mit personenbezogenen Daten (Einträge, Seiten, Medien, Benutzer, Kategorien, Auswahlen, Formulare, Blöcke, Kommentare, Gruppen, Feeds, CMS-Einstellungen)
- Protokollierung des Zugriffs auf personenbezogene Daten (Benutzerkarte, Benutzerliste, fremdes Profil, Anmeldung/Abmeldung, Formularversand, Einsicht in Protokolle, Liste der Einwilligungen)
- Protokollierung der CMS-Einstellungen mit Erfassung nur tatsächlich geänderter Felder
- Versionierung juristischer Dokumente (Tabelle
pages_static_versions, KlassePageStatic\Version, UI der Administrationsoberfläche, Lesen von?version=X.Yim Frontend) - Erfassung von Einwilligungen in dynamischen Formularen (Klasse
User\Consent, Feldtypconsent, Bindung an Dokument und Version) - Erfassung von Einwilligungen bei der Registrierung (
UserConsent::giveBatch) - Widerruf der Einwilligung im Benutzerprofil (Handler
api/user/patch.handler.php, UI „Meine Einwilligungen“) - Anzeige und Verwaltung von Einwilligungen in der Administrationsoberfläche (
/admin/usersConsents, RechtPERMISSION_ADMIN_USERS_CONSENTS_MANAGEMENT) - CSV-Export von Einwilligungen (14 Spalten, BOM für Excel)
- Export von Betroffenen-Daten nach Art. 14 (ZIP:
profile.json,consents.csv,reports.csv,manifest.json) - Schutz vor IP-Adressfälschung (
Client::getRealIPAddress, vertrauenswürdige Proxys, CIDR-Prüfung IPv4/IPv6) - Anonymisierung personenbezogener Daten nach Art. 5 (Klasse
User\Anonymizer,User::isAnonymized, Handler/handler/user/anonymize) - Rotation von Protokollen nach Art. 5 (Tabelle
reports_archive, KlasseReports\Rotator,cron/rotateReports.php, UI unter/admin/settings/security) - Cookie-Banner für alle Besucher (einschließlich anonymer Nutzer) mit Erfassung der Einwilligung und Schutz vor Duplikaten
- Einstellung
security_legal_documentsin der Administrationsoberfläche (Auswahl juristischer Dokumente) - Mehrsprachigkeit der Berichte (
entryTitles,pageTitles,categoryTitlesu. a. nach Locales)
OAuth-Provider: Serverseite
Umgesetzt:
- Drei Tabellen:
oauth_clients,oauth_auth_codes,oauth_access_tokens - Klassen
Client,AuthCode,Tokenincore/PHPLibrary/OAuth/ - Endpunkte
/handler/oauth/authorize(GET/POST) und/handler/oauth/token(POST) - Unterstützung der Grants
authorization_codeundrefresh_token - Obligatorische
PKCE-Unterstützung (S256) - Strikte Validierung von
redirect_uri(exakte Übereinstimmung, Verbot von Nicht-HTTP-Schemata) - Einmalige Autorisierungscodes mit TTL von 60 Sekunden
- Rotation von Refresh-Tokens bei jeder Aktualisierung
- Hashing von
client_secretüberBCrypt(cost=12) - Verifizierung von Clients durch einen Administrator vor der Gewährung des Zugriffs
- Limits für die Anzahl der Tokens pro Anwendung
- Ausschluss der CSRF-Prüfung für
/handler/oauth/*(Protokollanforderung) - CLI-Test
oauth_test.php(11 Prüfungen) und HTTP-Testoauth_http_test.sh(vollständiger Zyklus)
Behoben:
RegenerateSecret()speicherte das neue Secret nicht- Leerer scope beim Refresh-Token
Mehrsprachigkeit der Website-Einstellungen
Umgesetzt:
- JSON-Speicherung der Einstellungen nach Locales (
base_site_title,seo_site_description,seo_site_keywords) - Helfer
getAdminLocaleNameundgetLocalizedSettingValue - Unterstützung von drei Lesformaten: neues JSON, alte flache Liste, alte flache Zeichenkette
- Automatische Migration alter Daten beim ersten Speichern
- Trennung von Admin- und öffentlicher Locale (
Configurator::getSiteTitle/Description/Keywords) - UI: Locale-Select im Kopfbereich der Einstellungsseite, verstecktes Feld
_settings_locale
Behoben:
- Fehler mit der Ausgabe von „Array“ in Titel/Beschreibung/Schlüsselwörtern nach dem ersten Speichern
- Fehler mit der seltenen Unmöglichkeit, Locale-Daten zu erhalten
Automatische Erstellung von Indizes bei der CMS-Installation
Umgesetzt:
- Block zur Indexerstellung in Installationsschritt 6 nach der Tabellengenerierung hinzugefügt
- Indizes für die Tabellen
entries,entries_categories,entries_comments,pages_static - Indizes für die Tabellen
users,users_sessions,forms_data,web_channels,metrics - Eindeutige Indizes auf
name,login,email - Für PostgreSQL wurden GIN-Indizes auf JSONB-Feldern und ein partieller Index für veröffentlichte Einträge hinzugefügt
- Alle Indizes werden mit
IF NOT EXISTSerstellt; Fehler werden protokolliert, ohne die Installation abzubrechen
Administrationsoberfläche: Suche und Sortierung
Umgesetzt:
- Suche und Sortierung in 10 Bereichen:
users,usersGroups,usersConsents,entries,pages,entriesCategories,entriesComments,entriesSamples,forms,contentBlocks - GET-Parameter
?value=...und?sort=...aus einer Whitelist - Beibehaltung der Parameter in der Paginierung (
buildQueryString+startPart) - UI:
Choices+Input+Buttonim Container#E8548530785 - Methoden
getAll($searchValue, $sortRule)undgetCountTotal($searchValue)in Repositories - 6 Sortierregeln (nach Erstellungs-/Aktualisierungsdatum ↑↓, alphabetisch ↑↓)
Behoben:
- Fehler in
Users::getCountByGroupID()— überflüssigesANDim MySQL-Zweig - Adaptives Quoting von Spalten für PostgreSQL
Yandex.Metrica
Umgesetzt:
- Einstellung
seo_code_yandex_metrika(nur numerische ID) - Feld unter
/admin/settings/seo - Einfügen des Metrica-Skripts und
<noscript>in<head>(Themedefault) - Doppelte Validierung:
preg_replace("/\D/", "")beim Speichern,ctype_digit()bei der Ausgabe - Einfügen über
createTextNode+appendChild(sonst brichtsaveHTML()das Inline-Skript)
Sonstiges
Behoben:
- Cookie-Banner wurde erneut angezeigt, wenn das Cookie
allowCookiesvorhanden war - Batch-Insert bei MySQL mit
innodb_autoinc_lock_mode = 2 - Leck sensibler Felder in der Debug-Ausgabe
Vorherige Version: 0.3.0 „Shuya“
Kommentare