Top.Mail.Ru
  • CMS «GIRVAS»

    एक लचीला और मुफ्त सामग्री प्रबंधन प्रणाली, जो किसी भी दिशा की साइट बनाने की अनुमति देता है।

    हमारे साथ आसान!

  • पूरी तरह से मुफ्त

    पुराने और भुगतान वाले प्रबंधन प्रणालियों का उपयोग बंद करें! नए समाधानों का युग आ गया है - «GIRVAS» चुनें!

  • करेलियन समाधान

    «GIRVAS» करेलिया गणराज्य में विकसित किया गया है और रूसी संघ के डिजिटल विकास मंत्रालय के रूसी सॉफ्टवेयर रजिस्टर में दर्ज है (रजिस्ट्री प्रविष्टि №25012 दिनांक 27.11.2024)।

0.4.0 “सेगेझा”

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 “शुया”

अनुवाद

टिप्पणियाँ

इस लेख पर कोई टिप्पणी नहीं है।