CMS “GIRVAS” का संस्करण 3 अक्टूबर 2026, “सेगेझा” विकास चरण में।
नवीनतम परिवर्तन
QueryBuilder: JOIN, CASE अभिव्यक्तियों और इंडेक्स का समर्थन
लागू किया गया:
- इंडेक्स प्रकारों के साथ Enum
IndexTypeजोड़ा गया (BTREE,HASH,GIST,GIN,SPGIST,BRIN,FULLTEXT) SELECTमें JOIN के लिएClauseJoinक्लास जोड़ी गई (INNER,LEFT,RIGHT,FULL)- MySQL और PostgreSQL के लिए JOIN-शर्तों की अनुकूली जनरेशन लागू की गई
- CASE अभिव्यक्तियाँ बनाने के लिए
CaseExpressionक्लास जोड़ी गई - JSON खोज के लिए
whenJsonLike()औरwhenJsonArrayContains()मेथड लागू किए गए - स्टैटिक मेथड
CaseExpression::sum()जोड़ा गया QueryBuilderमें फैक्ट्री मेथडcreateCase()जोड़ा गयाCREATE INDEXके लिएStatementCreateIndexक्लास जोड़ी गईDROP INDEXके लिएStatementDropIndexक्लास जोड़ी गईUNIQUE,CONCURRENTLY,IF NOT EXISTS/IF EXISTS,WHEREके साथ आंशिक इंडेक्स का समर्थन लागू किया गयाsetStatementCreateIndex()औरsetStatementDropIndex()मेथड जोड़े गएEntryCategoryमें प्रारंभिक डेटा की कैशिंग जोड़ी गई
ठीक किया गया:
- PostgreSQL के लिए
addSelections()में CASE अभिव्यक्तियों का एस्केपिंग
SQL डायलेक्ट: कोर स्तर पर MySQL और PostgreSQL का समर्थन
लागू किया गया:
- अमूर्त क्लास
Dialectऔर कार्यान्वयनPostgreSql,MySql - फैक्ट्री
DialectFactory - लॉजिकल प्रकार (
id,bigint,integer,boolean,string,string:N,text,json,timestamp) - JSON मेथड (
jsonExtractBoolean,jsonExtractInt,jsonBuildObject,jsonMergePatch,jsonMergePatches,jsonObjectMergeKey,jsonLike,jsonArrayContainsLike) - दिनांक मेथड (
extractYearFromUnixTimestamp,extractMonthFromUnixTimestamp) - मेथड
LIKE,IN,LIMIT/OFFSET,getLastInsertedIDCondition - क्षमता मेथड (
supportsInsertReturning,supportsConcurrently,supportsIfNotExistsForIndex,supportsPartialIndex,supportsDropIndexConcurrently,supportsDropIndexIfExists,supportsIndexType,requiresUsingClause,supportsDefault) - सभी Statement डायलेक्ट पर स्थानांतरित किए गए (
CreateTable,CreateIndex,DropIndex,Insert,Select,Update,Delete) - सभी Clause डायलेक्ट पर स्थानांतरित किए गए (
Returning,From,Join,Where,OrderBy,Limit,Set) - इंस्टॉलर अनुकूलित: 22 टेबल, 64 इंडेक्स,
createIndexSafe() - बिज़नेस लॉजिक डायलेक्ट पर स्थानांतरित (13 फ़ाइलें:
Entry,Entries,EntryCategory,EntriesCategories,EntryComment,EntryComments,User,Users,UserGroup,UsersGroups,PageStatic,PageStatic/Version,Pages)
152-FZ: कोर स्तर पर पूर्ण तकनीकी कवरेज
लागू किया गया:
- व्यक्तिगत डेटा से जुड़ी सभी क्रियाओं का लॉगिंग (एंट्री, पेज, मीडिया, उपयोगकर्ता, श्रेणियाँ, चयन, फ़ॉर्म, ब्लॉक, टिप्पणियाँ, समूह, फ़ीड, CMS सेटिंग्स)
- व्यक्तिगत डेटा तक पहुँच का लॉगिंग (उपयोगकर्ता कार्ड, उपयोगकर्ता सूची, किसी और की प्रोफ़ाइल, लॉगिन/लॉगआउट, फ़ॉर्म भेजना, लॉग देखना, सहमति सूची)
- CMS सेटिंग्स का लॉगिंग, केवल वास्तव में बदले गए फ़ील्ड दर्ज करना
- कानूनी दस्तावेज़ों का वर्शनिंग (टेबल
pages_static_versions, क्लासPageStatic\Version, एडमिन पैनल UI, फ्रंटएंड पर?version=X.Yपढ़ना) - डायनामिक फ़ॉर्म में सहमति दर्ज करना (क्लास
User\Consent, फ़ील्ड प्रकारconsent, दस्तावेज़ और संस्करण से बाइंडिंग) - पंजीकरण के समय सहमति दर्ज करना (
UserConsent::giveBatch) - उपयोगकर्ता प्रोफ़ाइल में सहमति वापस लेना (हैंडलर
api/user/patch.handler.php, UI “मेरी सहमतियाँ”) - एडमिन पैनल में सहमतियों को देखना और प्रबंधित करना (
/admin/usersConsents, अनुमतिPERMISSION_ADMIN_USERS_CONSENTS_MANAGEMENT) - सहमतियों का CSV निर्यात (14 कॉलम, Excel के लिए BOM)
- अनुच्छेद 14 के अनुसार डेटा सब्जेक्ट का निर्यात (ZIP:
profile.json,consents.csv,reports.csv,manifest.json) - IP पते की जालसाज़ी से सुरक्षा (
Client::getRealIPAddress, विश्वसनीय प्रॉक्सी, IPv4/IPv6 CIDR जाँच) - अनुच्छेद 5 के अनुसार व्यक्तिगत डेटा का अनामीकरण (क्लास
User\Anonymizer,User::isAnonymized, हैंडलर/handler/user/anonymize) - अनुच्छेद 5 के अनुसार लॉग रोटेशन (टेबल
reports_archive, क्लासReports\Rotator,cron/rotateReports.php, UI/admin/settings/securityपर) - सभी आगंतुकों (अनाम लोगों सहित) के लिए कुकी बैनर, सहमति दर्ज करने और डुप्लिकेट से सुरक्षा के साथ
- एडमिन पैनल में सेटिंग
security_legal_documents(कानूनी दस्तावेज़ों का चयन) - रिपोर्ट की बहुभाषिकता (
entryTitles,pageTitles,categoryTitlesआदि लोकेल के अनुसार)
OAuth प्रोवाइडर: सर्वर भाग
लागू किया गया:
- तीन टेबल:
oauth_clients,oauth_auth_codes,oauth_access_tokens core/PHPLibrary/OAuth/में क्लासClient,AuthCode,Token- एंडपॉइंट
/handler/oauth/authorize(GET/POST) और/handler/oauth/token(POST) authorization_codeऔरrefresh_tokenग्रांट का समर्थन- अनिवार्य
PKCEसमर्थन (S256) - सख्त
redirect_uriसत्यापन (सटीक मिलान, गैर-HTTP स्कीमों पर रोक) - 60 सेकंड TTL के साथ एकबारगी प्राधिकरण कोड
- हर रीफ़्रेश पर refresh टोकन का रोटेशन
client_secretकाBCrypt(cost=12) से हैशिंग- पहुँच देने से पहले एडमिन द्वारा क्लाइंट का सत्यापन
- प्रति एप्लिकेशन टोकन की संख्या की सीमाएँ
/handler/oauth/*के लिए CSRF जाँच का अपवाद (प्रोटोकॉल की आवश्यकता)- CLI टेस्ट
oauth_test.php(11 जाँच) और HTTP टेस्टoauth_http_test.sh(पूरा चक्र)
ठीक किया गया:
RegenerateSecret()नया सीक्रेट सहेजता नहीं था- refresh टोकन में खाली scope
साइट सेटिंग्स की बहुभाषिकता
लागू किया गया:
- लोकेल के अनुसार सेटिंग्स का JSON भंडारण (
base_site_title,seo_site_description,seo_site_keywords) - हेल्पर
getAdminLocaleNameऔरgetLocalizedSettingValue - तीन पढ़ने के प्रारूपों का समर्थन: नया JSON, पुरानी सपाट सूची, पुरानी सपाट स्ट्रिंग
- पहली बार सहेजने पर पुराने डेटा का स्वचालित माइग्रेशन
- एडमिन और सार्वजनिक लोकेल का अलगाव (
Configurator::getSiteTitle/Description/Keywords) - UI: सेटिंग्स पेज के हेडर में लोकेल सेलेक्ट, छिपा फ़ील्ड
_settings_locale
ठीक किया गया:
- पहली बार सहेजने के बाद शीर्षक/विवरण/कीवर्ड में “Array” दिखने की बग
- लोकेल डेटा कभी-कभी न मिल पाने की बग
CMS इंस्टॉलेशन के दौरान इंडेक्स का स्वचालित निर्माण
लागू किया गया:
- टेबल जनरेशन के बाद इंस्टॉलेशन चरण 6 में इंडेक्स बनाने का ब्लॉक जोड़ा गया
- टेबल
entries,entries_categories,entries_comments,pages_staticके लिए इंडेक्स - टेबल
users,users_sessions,forms_data,web_channels,metricsके लिए इंडेक्स name,login,emailपर यूनीक इंडेक्स- PostgreSQL के लिए JSONB फ़ील्ड पर GIN इंडेक्स और प्रकाशित एंट्री के लिए आंशिक इंडेक्स जोड़े गए
- सभी इंडेक्स
IF NOT EXISTSके साथ बनाए जाते हैं; त्रुटियाँ इंस्टॉलेशन रोके बिना लॉग की जाती हैं
एडमिन पैनल: खोज और छँटाई
लागू किया गया:
- 10 अनुभागों में खोज और छँटाई:
users,usersGroups,usersConsents,entries,pages,entriesCategories,entriesComments,entriesSamples,forms,contentBlocks - GET पैरामीटर
?value=...और?sort=...व्हाइटलिस्ट से - पेजिनेशन में पैरामीटर सहेजना (
buildQueryString+startPart) - UI: कंटेनर
#E8548530785मेंChoices+Input+Button - रिपॉज़िटरी में मेथड
getAll($searchValue, $sortRule)औरgetCountTotal($searchValue) - 6 छँटाई नियम (बनाने/अपडेट करने की तारीख ↑↓, वर्णानुक्रम ↑↓)
ठीक किया गया:
Users::getCountByGroupID()में बग — MySQL शाखा में अतिरिक्तAND- PostgreSQL के लिए कॉलम की अनुकूली कोटिंग
Yandex.Metrica
लागू किया गया:
- सेटिंग
seo_code_yandex_metrika(केवल संख्यात्मक ID) /admin/settings/seoपर फ़ील्ड<head>में Metrica स्क्रिप्ट और<noscript>डालना (थीमdefault)- दोहरा सत्यापन: सहेजते समय
preg_replace("/\D/", ""), आउटपुट परctype_digit() createTextNode+appendChildके ज़रिए डालना (अन्यथाsaveHTML()इनलाइन स्क्रिप्ट को तोड़ देता है)
अन्य
ठीक किया गया:
allowCookiesकुकी मौजूद होने पर कुकी बैनर फिर से दिखाई देता थाinnodb_autoinc_lock_mode = 2के साथ MySQL पर बैच इन्सर्ट- डीबग आउटपुट में संवेदनशील फ़ील्ड का लीक
पिछला संस्करण: 0.3.0 “शुया”
टिप्पणियाँ