Top.Mail.Ru
  • CMS «GIRVAS»

    Joustava ja ilmainen sisällönhallintajärjestelmä, jonka avulla voit luoda minkä tahansa alan verkkosivuston.

    Meidän kanssamme helpommin!

  • Täysin ilmainen

    Lopeta vanhojen ja maksullisten hallintajärjestelmien käyttö! Uusien ratkaisujen aikakausi on koittanut – valitse «GIRVAS»!

  • Karjalainen ratkaisu

    «GIRVAS» on kehitetty Karjalan tasavallassa, ja se on merkitty Venäjän federaation digitaalisen kehityksen ministeriön ylläpitämään venäläisten ohjelmistojen rekisteriin (rekisterinumero nro 25012, 27.11.2024).

0.4.0 ”Segezha”

Julkaisu CMS ”GIRVAS” 3. lokakuuta 2026 ”Segezha”-kehitysvaiheessa.

Viimeisimmät muutokset

QueryBuilder: JOIN-, CASE-lausekkeiden ja indeksien tuki

Toteutettu:

  • Lisätty Enum IndexType indeksityypeillä (BTREE, HASH, GIST, GIN, SPGIST, BRIN, FULLTEXT)
  • Lisätty luokka ClauseJoin JOINeille SELECT-kyselyssä (INNER, LEFT, RIGHT, FULL)
  • Toteutettu mukautuva JOIN-ehtojen generointi MySQL:lle ja PostgreSQL:lle
  • Lisätty luokka CaseExpression CASE-lausekkeiden rakentamiseen
  • Toteutettu metodit whenJsonLike() ja whenJsonArrayContains() JSON-hakua varten
  • Lisätty staattinen metodi CaseExpression::sum()
  • Lisätty tehdasmetodi createCase() QueryBuilder-luokkaan
  • Lisätty luokka StatementCreateIndex komennolle CREATE INDEX
  • Lisätty luokka StatementDropIndex komennolle DROP INDEX
  • Toteutettu tuki UNIQUE-, CONCURRENTLY-, IF NOT EXISTS/IF EXISTS -määreille sekä osittaisille indekseille WHERE-ehdolla
  • Lisätty metodit setStatementCreateIndex() ja setStatementDropIndex()
  • 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 Dialect sekä toteutukset PostgreSql, 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, luokka PageStatic\Version, hallintapaneelin UI, ?version=X.Y-lukeminen frontendissa)
  • Suostumusten kirjaaminen dynaamisissa lomakkeissa (luokka User\Consent, kenttätyyppi consent, 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, oikeus PERMISSION_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, luokka Reports\Rotator, cron/rotateReports.php, UI osoitteessa /admin/settings/security)
  • Evästebanneri kaikille vierailijoille (mukaan lukien anonyymit) suostumuksen kirjaamisella ja kaksoiskappaleiden estolla
  • Asetus security_legal_documents hallintapaneelissa (oikeudellisten asiakirjojen valinta)
  • Raporttien monikielisyys (entryTitles, pageTitles, categoryTitles ym. localeittain)

OAuth-palveluntarjoaja: palvelinpuoli

Toteutettu:

  • Kolme taulua: oauth_clients, oauth_auth_codes, oauth_access_tokens
  • Luokat Client, AuthCode, Token hakemistossa core/PHPLibrary/OAuth/
  • Päätepisteet /handler/oauth/authorize (GET/POST) ja /handler/oauth/token (POST)
  • Tuki authorization_code- ja refresh_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 hajautus BCrypt-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-testi oauth_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 getAdminLocaleName ja getLocalizedSettingValue
  • 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 + Button säiliössä #E8548530785
  • Metodit getAll($searchValue, $sortRule) ja getCountTotal($searchValue) repositorioissa
  • 6 lajittelusääntöä (luonti-/päivityspäivämäärän mukaan ↑↓, aakkosjärjestyksessä ↑↓)

Korjattu:

  • Virhe Users::getCountByGroupID()-metodissa — ylimääräinen AND MySQL-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 (teema default)
  • Kaksinkertainen validointi: preg_replace("/\D/", "") tallennettaessa, ctype_digit() tulostettaessa
  • Lisäys createTextNode + appendChild -menetelmällä (muuten saveHTML() 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”

Käännökset

Kommentit

Tähän kirjoitukseen ei ole kommentteja.