Julkaisu CMS ”GIRVAS” 3. lokakuuta 2026 ”Segezha”-kehitysvaiheessa.
Viimeisimmät muutokset
QueryBuilder: JOIN-, CASE-lausekkeiden ja indeksien tuki
Toteutettu:
- Lisätty Enum
IndexTypeindeksityypeillä (BTREE,HASH,GIST,GIN,SPGIST,BRIN,FULLTEXT) - Lisätty luokka
ClauseJoinJOINeilleSELECT-kyselyssä (INNER,LEFT,RIGHT,FULL) - Toteutettu mukautuva JOIN-ehtojen generointi MySQL:lle ja PostgreSQL:lle
- Lisätty luokka
CaseExpressionCASE-lausekkeiden rakentamiseen - Toteutettu metodit
whenJsonLike()jawhenJsonArrayContains()JSON-hakua varten - Lisätty staattinen metodi
CaseExpression::sum() - Lisätty tehdasmetodi
createCase()QueryBuilder-luokkaan - Lisätty luokka
StatementCreateIndexkomennolleCREATE INDEX - Lisätty luokka
StatementDropIndexkomennolleDROP INDEX - Toteutettu tuki
UNIQUE-,CONCURRENTLY-,IF NOT EXISTS/IF EXISTS-määreille sekä osittaisille indekseilleWHERE-ehdolla - Lisätty metodit
setStatementCreateIndex()jasetStatementDropIndex() - Lisätty välimuistitus alustetuille tiedoille
EntryCategory-luokassa
Korjattu:
- CASE-lausekkeiden escapetus
addSelections()-metodissa PostgreSQL:ää varten
SQL-dialektit: MySQL:n ja PostgreSQL:n tuki ytimen tasolla
Toteutettu:
- Abstrakti luokka
Dialectsekä toteutuksetPostgreSql,MySql - Tehdas
DialectFactory - Loogiset tyypit (
id,bigint,integer,boolean,string,string:N,text,json,timestamp) - JSON-metodit (
jsonExtractBoolean,jsonExtractInt,jsonBuildObject,jsonMergePatch,jsonMergePatches,jsonObjectMergeKey,jsonLike,jsonArrayContainsLike) - Päivämäärämetodit (
extractYearFromUnixTimestamp,extractMonthFromUnixTimestamp) - Metodit
LIKE,IN,LIMIT/OFFSET,getLastInsertedIDCondition - Ominaisuusmetodit (
supportsInsertReturning,supportsConcurrently,supportsIfNotExistsForIndex,supportsPartialIndex,supportsDropIndexConcurrently,supportsDropIndexIfExists,supportsIndexType,requiresUsingClause,supportsDefault) - Kaikki Statementit siirretty dialektille (
CreateTable,CreateIndex,DropIndex,Insert,Select,Update,Delete) - Kaikki Clauset siirretty dialektille (
Returning,From,Join,Where,OrderBy,Limit,Set) - Asennusohjelma mukautettu: 22 taulua, 64 indeksiä,
createIndexSafe() - Liiketoimintalogiikka siirretty dialektille (13 tiedostoa:
Entry,Entries,EntryCategory,EntriesCategories,EntryComment,EntryComments,User,Users,UserGroup,UsersGroups,PageStatic,PageStatic/Version,Pages)
152-FZ: täysi tekninen kattavuus ytimen tasolla
Toteutettu:
- Henkilötietoihin liittyvien toimien lokitus (merkinnät, sivut, media, käyttäjät, kategoriat, valinnat, lomakkeet, lohkot, kommentit, ryhmät, syötteet, CMS-asetukset)
- Henkilötietojen käytön lokitus (käyttäjäkortti, käyttäjälista, toisen profiili, sisäänkirjautuminen/uloskirjautuminen, lomakkeen lähetys, lokien katselu, suostumuslista)
- CMS-asetusten lokitus kirjaamalla vain todella muuttuneet kentät
- Oikeudellisten asiakirjojen versiointi (taulu
pages_static_versions, luokkaPageStatic\Version, hallintapaneelin UI,?version=X.Y-lukeminen frontendissa) - Suostumusten kirjaaminen dynaamisissa lomakkeissa (luokka
User\Consent, kenttätyyppiconsent, sidonta asiakirjaan ja versioon) - Suostumusten kirjaaminen rekisteröitymisen yhteydessä (
UserConsent::giveBatch) - Suostumuksen peruuttaminen käyttäjäprofiilissa (käsittelijä
api/user/patch.handler.php, UI ”Omat suostumukset”) - Suostumusten katselu ja hallinta hallintapaneelissa (
/admin/usersConsents, oikeusPERMISSION_ADMIN_USERS_CONSENTS_MANAGEMENT) - Suostumusten CSV-vienti (14 saraketta, BOM Exceliä varten)
- Rekisteröidyn tietojen vienti Art. 14 mukaisesti (ZIP:
profile.json,consents.csv,reports.csv,manifest.json) - Suojaus IP-osoitteen väärentämistä vastaan (
Client::getRealIPAddress, luotetut välityspalvelimet, IPv4/IPv6 CIDR -tarkistus) - Henkilötietojen anonymisointi Art. 5 mukaisesti (luokka
User\Anonymizer,User::isAnonymized, käsittelijä/handler/user/anonymize) - Lokien rotaatio Art. 5 mukaisesti (taulu
reports_archive, luokkaReports\Rotator,cron/rotateReports.php, UI osoitteessa/admin/settings/security) - Evästebanneri kaikille vierailijoille (mukaan lukien anonyymit) suostumuksen kirjaamisella ja kaksoiskappaleiden estolla
- Asetus
security_legal_documentshallintapaneelissa (oikeudellisten asiakirjojen valinta) - Raporttien monikielisyys (
entryTitles,pageTitles,categoryTitlesym. localeittain)
OAuth-palveluntarjoaja: palvelinpuoli
Toteutettu:
- Kolme taulua:
oauth_clients,oauth_auth_codes,oauth_access_tokens - Luokat
Client,AuthCode,Tokenhakemistossacore/PHPLibrary/OAuth/ - Päätepisteet
/handler/oauth/authorize(GET/POST) ja/handler/oauth/token(POST) - Tuki
authorization_code- jarefresh_token-granttyypeille - Pakollinen
PKCE-tuki (S256) - Tiukka
redirect_uri-validointi (tarkka vastaavuus, ei-HTTP-skeemojen kielto) - Kertakäyttöiset valtuutuskoodit 60 sekunnin TTL:llä
- Refresh-tokenien rotaatio jokaisella päivityksellä
client_secret-arvon hajautusBCrypt-menetelmällä (cost=12)- Ylläpitäjän suorittama clientien vahvistus ennen pääsyn myöntämistä
- Tokenien enimmäismäärät sovellusta kohden
- CSRF-tarkistuksen ohittaminen polulle
/handler/oauth/*(protokollavaatimus) - CLI-testi
oauth_test.php(11 tarkistusta) ja HTTP-testioauth_http_test.sh(koko sykli)
Korjattu:
RegenerateSecret()ei tallentanut uutta salaisuutta- Tyhjä scope refresh-tokenissa
Sivuston asetusten monikielisyys
Toteutettu:
- Asetusten JSON-tallennus localeittain (
base_site_title,seo_site_description,seo_site_keywords) - Apumetodit
getAdminLocaleNamejagetLocalizedSettingValue - Kolmen lukumuodon tuki: uusi JSON, vanha litteä lista, vanha litteä merkkijono
- Vanhojen tietojen automaattinen migraatio ensimmäisellä tallennuksella
- Ylläpidon ja julkisen localen erottelu (
Configurator::getSiteTitle/Description/Keywords) - UI: localen valinta asetussivun otsikossa, piilotettu kenttä
_settings_locale
Korjattu:
- Virhe, jossa ”Array” tulostui otsikkoon/kuvaukseen/avainsanoihin ensimmäisen tallennuksen jälkeen
- Virhe, jossa localen tietoja ei harvoin saatu haettua
Indeksien automaattinen luonti CMS-asennuksen yhteydessä
Toteutettu:
- Lisätty indeksien luontilohko asennuksen vaiheeseen 6 taulujen generoinnin jälkeen
- Indeksit tauluille
entries,entries_categories,entries_comments,pages_static - Indeksit tauluille
users,users_sessions,forms_data,web_channels,metrics - Yksilölliset indeksit kentille
name,login,email - PostgreSQL:lle lisätty GIN-indeksit JSONB-kentille ja osittainen indeksi julkaistuille merkinnöille
- Kaikki indeksit luodaan
IF NOT EXISTS-määreellä; virheet lokitetaan keskeyttämättä asennusta
Hallintapaneeli: haku ja lajittelu
Toteutettu:
- Haku ja lajittelu 10 osiossa:
users,usersGroups,usersConsents,entries,pages,entriesCategories,entriesComments,entriesSamples,forms,contentBlocks - GET-parametrit
?value=...ja?sort=...valkoiselta listalta - Parametrien säilytys sivutuslinkeissä (
buildQueryString+startPart) - UI:
Choices+Input+Buttonsäiliössä#E8548530785 - Metodit
getAll($searchValue, $sortRule)jagetCountTotal($searchValue)repositorioissa - 6 lajittelusääntöä (luonti-/päivityspäivämäärän mukaan ↑↓, aakkosjärjestyksessä ↑↓)
Korjattu:
- Virhe
Users::getCountByGroupID()-metodissa — ylimääräinenANDMySQL-haarassa - Mukautuva sarakkeiden lainaus PostgreSQL:ää varten
Yandex.Metrica
Toteutettu:
- Asetus
seo_code_yandex_metrika(vain numeerinen ID) - Kenttä osoitteessa
/admin/settings/seo - Metrica-skriptin ja
<noscript>-elementin lisäys<head>-osioon (teemadefault) - Kaksinkertainen validointi:
preg_replace("/\D/", "")tallennettaessa,ctype_digit()tulostettaessa - Lisäys
createTextNode+appendChild-menetelmällä (muutensaveHTML()rikkoo inline-skriptin)
Muuta
Korjattu:
- Evästebanneri näytettiin uudelleen, kun
allowCookies-eväste oli olemassa - Batch-lisäys MySQL:ssä, kun
innodb_autoinc_lock_mode = 2 - Arkaluontoisten kenttien vuoto debug-tulosteessa
Edellinen julkaisu: 0.3.0 ”Shuya”
Kommentit