Skip to content

Admin Settings & Configuration

Flow ID: AD-13 Module(s): settings Complexity: Medium Last Updated: 2026-04-10

Business Overview

All platform configuration is stored in a database-backed registry (registry table) with a group/key/value/language structure. The Registry library provides get/set/delete with PSCache caching, encryption for secrets via the CI Encryption library, method chaining, and pipe-delimited array storage. Five settings controllers manage 50+ integration providers across 20+ admin pages, organized into the ecommercen/settings/ HMVC module.

The settings system is the central nervous system of the platform -- almost every feature (payments, feeds, analytics, AI, notifications, SSO, loyalty, search, and third-party integrations) is configured through registry values that are read at runtime.

API Reference

Admin Panel Routes

All settings routes are session-based admin panel pages (no REST API endpoints).

RouteControllerMethodDescriptionRequired Roles
settingsAdv_settingsindex()General settings: site title, email, company, cart, payments, price trackingADVISABLE, ADMIN
settings/third_party_providersAdv_settingsthird_party_providers()15+ third-party integrationsADVISABLE, ADMIN
settings/googleAdv_settingsgoogle()GA4, reCAPTCHA, Tag Manager, Recommendations AIADVISABLE, ADMIN
settings/subsystem_settingsAdv_settingssubsystem_settings()Loyalty points configurationADVISABLE, ADMIN
settings/notification_settingsAdv_settingsnotification_settings()Email, SMS, OneSignal pushADVISABLE, ADMIN
settings/payment_settingsAdv_settingspayment_settings()12+ payment provider configsADVISABLE, ADMIN
settings/other_settingsAdv_settingsother_settings()Filters, stock, tags, bundles, displayADVISABLE, ADMIN
settings/xml_feeds_settingsAdv_settingsxml_feeds_settings()Feed tokens and price modifiersADVISABLE, ADMIN
settings/e-commercen-plusAdv_settingseCommercenPlus()Email campaigns: points, birthday, reviewsADVISABLE, ADMIN
settings/only_advisableAdv_settingsonly_advisable()Developer-only: Matomo, AI, Farmakon, feature flagsADVISABLE, ADMIN
settings/variation_settingsAdv_settingsvariation_settings()Product variation display configADVISABLE, ADMIN
settings/attribute_settingsAdv_settingsattribute_settings()Product attribute configADVISABLE, ADMIN
settings/ai_content_generation_settingsAdv_settingsai_content_generation_settings()OpenAI provider configurationADVISABLE, ADMIN
settings/ai_content_generation_promptsAdv_settingsai_content_generation_prompts()AI prompt templates per entityADVISABLE, ADMIN
settings/mailchimpAdv_settingsmailchimp()Mailchimp API integrationADVISABLE, ADMIN
settings/available_countriesAdv_settingsavailableCountries()Country enable/disableADVISABLE, ADMIN
settings/video_showcaseAdv_settingsvideoShowcase()Video showcase settingsADVISABLE, ADMIN
settings/social_authAdvSocialAuthSettingsindex()Google/Facebook OAuth credentialsADVISABLE only
settings/social_linksAdvSocialLinksSettingsindex()Social media profile URLsADVISABLE, ADMIN
settings/faviconsAdvFaviconsindex() / save()Favicon upload, generation, manifestADVISABLE, ADMIN
settings/email_viewsAdvEmailViewerindex()Email template preview (21 templates)ADVISABLE, ADMIN
settings/email_views/editEmailSubjectsAdvEmailViewereditEmailSubjects()Per-language email subject editorADVISABLE, ADMIN

Code Flow

Registry Read/Write Pattern

Every settings controller follows the same pattern:

Adv_settings::{page}()
  |-- POST submission check
  |     |-- Run validation rules
  |     |-- If valid:
  |     |     |-- registry->setValue($group, $key, $value, $lang?, $encrypted?)
  |     |     |     |-- Updates in-memory data array
  |     |     |     |-- Calls registry_model->set_regval()
  |     |     |     |     |-- Checks if (reggroup, regkey, lang) exists
  |     |     |     |     |-- If exists: UPDATE regval
  |     |     |     |     |-- If not: INSERT new row
  |     |     |     |     \-- Encrypts value if $encrypted=true via Encryption library
  |     |     |     \-- Returns $this (method chaining)
  |     |     \-- redirect back to same page
  |-- GET display:
  |     |-- registry->value($group, $key, $lang?, $encrypted?)
  |     |     |-- Looks up in-memory array: data[$group][$key][$lang]
  |     |     \-- Decrypts if $encrypted=true
  |     |-- Merge into render array
  |     \-- Load view

Registry Initialization (On Every Request)

Registry::__construct()
  |-- Load registry_model + pscache + encryption
  |-- pscache->model('registry_model', 'all', [])
  |     |-- Check file cache for 'registry_model_all_[]'
  |     |-- On miss: registry_model->all() -> SELECT * FROM registry
  |     \-- Cache result
  |-- parseDb($data)
  |     |-- Build nested array: data[$reggroup][$regkey][$lang] = $regval
  |     \-- Empty lang mapped to 'BASE' constant

Registry Live Refresh

Registry::live()  [called in Adv_admin_controller constructor]
  |-- pscache->updateCache('registry_model', 'all', [])  [invalidates cache]
  |-- pscache->model('registry_model', 'all', [])  [re-fetches from DB]
  \-- parseDb($data)  [rebuild in-memory array]

Encrypted Values Flow

Registry::setValue('SOCIAL_AUTH', 'GOOGLE_CLIENT_SECRET', $value, '', true)
  |-- registry_model->set_regval(..., $encrypted=true)
  |     |-- encryption->encrypt($regval) [CI Encryption library]
  |     \-- Store encrypted ciphertext in DB

Registry::value('SOCIAL_AUTH', 'GOOGLE_CLIENT_SECRET', '', true)
  |-- Read raw (encrypted) value from in-memory array
  \-- encryption->decrypt($value) -> plaintext

Domain Layer

Settings HMVC Module (ecommercen/settings/)

FileLinesDescription
controllers/Adv_settings.php~2,450Main settings controller with 20+ page methods, each handling GET display + POST save. Extends Admin_c.
controllers/AdvSocialAuthSettings.php93Google + Facebook OAuth client credentials. ADVISABLE-only. Encrypted secrets.
controllers/AdvSocialLinksSettings.php52Social media profile URLs (Facebook, Twitter, Instagram, LinkedIn, Pinterest, TikTok).
controllers/AdvFavicons.php90Favicon upload with image generation (multiple sizes) and manifest creation. Uses FaviconImageGenerator + FaviconHtmlGenerator.
controllers/AdvEmailViewer.php188Email template preview (21 entries) with mock data, and per-language subject editor for EMAIL_SUBJECTS registry group. See AD-53 Email Template Viewer for the full code flow, known issues, and subject key catalog.

Registry Library (application/libraries/Registry.php)

MethodSignatureDescription
value()value($regGroup, $regKey, $langAbbr='', $encrypted=false)Get single value. Returns null if not found.
setValue()setValue($regGroup, $regKey, $regVal='', $langAbbr='', $encrypted=false)Set/upsert value. Returns $this for chaining.
getGroupAsArray()getGroupAsArray($regGroup, $langAbbr='', $encryptedKeys=[])Get all keys in a group as associative array.
setArray()setArray($regKey, $regGroup, $langAbbr, $regVal=[])Store array as pipe-delimited string.
getArray()getArray($regKey, $regGroup, $langAbbr)Read pipe-delimited string back as array.
delete()delete($regGroup, $regKey, $langAbbr='')Remove a specific value.
live()live()Force cache refresh and re-read from DB. Returns $this.

Registry Model (application/models/Registry_model.php)

MethodDescription
all()SELECT * FROM registry (all rows, used for PSCache population)
set_regval($regkey, $reggroup, $lang, $regval, $encrypted)Upsert pattern: check existence, then UPDATE or INSERT. Encrypts if flagged.
delete($regGroup, $regKey, $langAbbr)DELETE matching row

Architecture

Registry Groups Inventory

The following registry groups are managed across all settings controllers:

GroupSettings PageKey Values
SITEindexTITLE (per-lang), EMAIL_FORM, COMPANY_ADDRESS (per-lang)
ESHOPindex, subsystem, only_advisableSANITIZE_INTERVAL, COMPANY_PHONE, PAYMENTS_ACTIVE, TRANS_COST_LIMIT, LIMIT_ON_PRODUCTS, DEFAULT_CURRENCY, SLUG_TO_GREEKLISH, plus 15+ more
BLOGindexRSSTITLE (per-lang), RSSDESCRIPTION (per-lang)
GLOBALindex, only_advisableADMIN_EMAIL, CDN_URL, LOGO, SITE_MODE
SMSindex, notificationsSMS_LIMIT, IS_ENABLED, SEND_IS_ENABLED, FOR_PAYWAY, PROVIDER
EMAIL_*index (dynamic groups)SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS (encrypted), SMTP_AUTO_SSL_TLS, SENDER_EMAIL, FROM_NAME, ADMIN_EMAIL
EMAILnotificationsSEND_EMAIL_TO_CLIENT_FOR_ADMIN_ORDER, NOTIFICATION_LOW_STOCK, NOTIFICATION_NEW_PRODUCT
EMAIL_SUBJECTSemail subjectsPer-language email subject lines
PRICE_TRACKindexENABLED, ENABLED_GRAPH, TRACK_DAYS, SHOW_DISCOUNT_ON_VALUE, DISCOUNT_LABEL (per-lang)
SKROUTZthird_partyANALYTICS_KEY, ANALYTICS_IS_ENABLED
BESTPRICEthird_partyANALYTICS_KEY, ANALYTICS_IS_ENABLED
FACEBOOKthird_partyIS_ENABLED, PIXEL_ID
FACEBOOK_CONVERSIONthird_partyENABLED, PIXEL_ID, PIXEL_ACCESS_TOKEN, PIXEL_TESTING_CODE, TIMEOUT, CONNECT_TIMEOUT
CRITEOthird_partyIS_ENABLED, ACCOUNT_ID
AGORAthird_partyIS_ENABLED, API_URL, API_KEY, CATALOG_ID, TEAM_ID, BANNERS_, PIXEL_, DSPL_* (20+ keys)
TABOOLAthird_partyIS_ENABLED, ID
LINKWISEthird_partyIS_ENABLED, PROGRAM_ID
SMARTCARTthird_partyIS_ENABLED, API_URL, API_KEY, DISABLE_PRODUCT_STOCK_CHECK
SHOPFLIXthird_partyIS_ENABLED, IS_PRODUCTION, API_EMAIL, API_KEY
MANAGOthird_partyENABLE_MONITOR_SCRIPT, ENABLE_API, API_BASE_URL, CLIENT_ID, plus 15+ keys
GOOGLEgoogleGA_TRACKING_ID, RECAPTCHA keys, TAG_MANAGER keys, RECOMMENDATIONS keys
POINT_SYSTEMsubsystemIS_ENABLED, ORDER_EDIT_KEEP_PRODUCT_POINTS
ONE_SIGNALnotificationsIS_ENABLED, APP_ID, SAFARI_WEB_ID
PAYPALpaymentsUSERNAME, PASSWORD, SIGNATURE
PAYPAL_ADVANCEDpaymentsCLIENT_ID, CLIENT_SECRET, SANDBOX
ALPHABANKpaymentsVERSION, ID, SSK, SUBMIT
EUROBANKpaymentsMERCHANT_ID, SECRET, URL, USE_INSTALLMENTS, INSTALLMENTS
PIRAEUSBANKpaymentsACQUIRER_ID, MERCHANT_ID, POS_ID, USERNAME, PASSWORD, REQUEST_TYPE, INSTALLMENTS, BNPL, plus more
ETHNIKIBANKpaymentsPUBLIC_KEY, PRIVATE_KEY
ETHNIKIBANK_NBGPAYpaymentsAPP_ID, APP_KEY, IS_SANDBOX
ETHNIKIBANK_EEpaymentsDIRECT_API_KEY
VIVAWALLETpaymentsPAYMENT_PARAMETERS, CLIENT_ID, CLIENT_SECRET, plus more
STRIPEpaymentsPUBLIC_KEY, SECRET_KEY, WEBHOOK_KEY
KLARNA_PAYMENTSpaymentsUSERNAME, PASSWORD, API_REGION
IRISpaymentsMERCHANT_ID, SECRET
JCCpaymentsMERCHANT_ID, ACQUIRER_ID, PASSWORD
CARDLINKpaymentsMERCHANT_ID, SHARED_SECRET
PAY_BY_BANKpaymentsMERCHANT_ID, API_KEY, PROVIDER
SOCIAL_AUTHsocial_authGOOGLE_LOGIN_ENABLED, GOOGLE_PROJECT_ID, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (encrypted), FACEBOOK_LOGIN_ENABLED, FACEBOOK_CLIENT_ID, FACEBOOK_CLIENT_SECRET (encrypted)
SOCIAL_LINKSsocial_linksFACEBOOK, TWITTER, INSTAGRAM, LINKEDIN, PINTEREST, TIKTOK
MATOMOonly_advisableENABLED, SHOW_ADMIN_DASHBOARD, TOKEN (encrypted), SITE_ID (encrypted), SITE_URL, PRODUCT_ID_PREFIX, TIMEOUT, CONNECT_TIMEOUT
ADVISABLE_AIonly_advisableSHOW_ADMIN_DASHBOARD
VIEW_METRICSonly_advisableENABLED, PERIOD, per-object-type ENABLED/PERIOD
FARMAKONonly_advisableIS_ENABLED, ADDRESS, EXCLUDED_PRODUCT_LIST
BUILDERonly_advisableENABLED
COOKIESonly_advisableENABLED
SUPPLIERonly_advisableENABLED
DATABOXonly_advisableENABLED, TOKEN (encrypted)
MARKETDATAonly_advisableENABLED, MARKETDATA_KEY (encrypted), MARKETDATA_TYPE
EUROPHARMACYonly_advisableENABLED, BASE_URL, USERNAME
FLAGGED_CONTENTonly_advisableEVENTS, MAPS, VIDEO
ECOMMERCEN_PLUSeCommercenPlus, only_advisableCUSTOMER_REVIEW_REWARD_ENABLE, CUSTOMER_REVIEW_REWARD, PRODUCT_PAGE_COMBO_ENABLED, AFTER_ADD_TO_CART_RECOMMENDATIONS_ENABLED
EMAIL_FOR_TOTAL_POINTSeCommercenPlusIS_ENABLED, TOTAL_POINTS, INTERVAL, INTERVAL_REPEAT
EMAIL_FOR_BIRTHDAYeCommercenPlusIS_ENABLED, POINTS_TO_ADD, REPEAT
GIFT_CARDSpaymentsENABLED
GIFT_PACKAGINGotherENABLE, COST
OTHERother, only_advisableDEFAULT_FILTER_FRONT, LOW_STOCK_END_OF_LIST, ENABLE_LOGIN_AND_BUY, SHOW_PRODUCT_HITS, plus 20+ feature flags
AFFILIATION_VARIATIONS_GROUPSthird_partyGROUPS_FOR_SIZE, GROUPS_FOR_COLOR
AFFILIATION_ATTRS_GROUPSthird_partyGROUPS_FOR_SIZE, GROUPS_FOR_COLOR
AI_CONTENT_GENERATION_PROVIDER_OPEN_AIai_settingsIS_ENABLED, API_KEY, MODEL, MAX_TOKENS, TEMPERATURE, plus 12+ params
AI_CONTENT_GENERATION_PROMPTSai_promptsDynamic per-entity prompt templates
ATTRIBUTESattribute_settingsDISPLAY_FILTERS_IN_LISTINGS, MERGE_DUPLICATE_VALUES_BY_NAME -- controls attribute filter sidebar visibility and deduplication
EMAIL_NEWSLETTERnotificationsSMTP config (HOST, PORT, USER, PASS encrypted, AUTO_SSL_TLS, SENDER_EMAIL, FROM_NAME, ADMIN_EMAIL) -- dedicated SMTP for newsletter sending
GLAMIthird_partyIS_ENABLED -- Glami marketplace feed toggle
KLARNA_OSMpaymentsENABLED, IS_PRODUCTION, CLIENT_ID -- Klarna On-Site Messaging (financing widgets on PDP + checkout)
MAILCHIMP_LOGGINGmailchimpSMTP config (HOST, PORT, USER, PASS encrypted, AUTO_SSL_TLS, SENDER_EMAIL, FROM_NAME, ADMIN_EMAIL) -- Mailchimp event logging emails
NEWSLETTERnotificationsDEFAULT_GROUP -- default user group for new subscribers
PAYWAY_ADMINpaymentsdelivery, paid_at_store, bank_transfer -- admin-available payment methods
PRODUCT_CART_CUSTOMISATIONSotherENABLED -- cart customization feature toggle
RELATED_RECOMMENDATIONSotherENABLED -- related product recommendations toggle
VIVA_ENABLED_PAYWAYSpaymentsvivawallet_iris, etc. -- active Viva Wallet sub-methods
WIZARD(internal)INITIALWIZARD_COMPLETED_AT -- setup wizard completion marker

Caching Architecture

                    +-----------+
                    | PSCache   |  (file-based, L2 cache)
                    +-----------+
                         |
  Admin requests:        |           Frontend requests:
  Registry::live()       |           Registry reads from
  forces refresh --------+---------- pre-loaded in-memory array
                         |
                    +-----------+
                    | registry  |  (MySQL table)
                    +-----------+

The entire registry table is loaded once into PSCache, then parsed into an in-memory nested array. Admin controllers call Registry::live() to force a refresh on each admin page load. Frontend controllers rely on the cached version.

Data Model

registry Table

ColumnTypeDescription
idINT(11) PK AIRecord ID
reggroupVARCHAR(150)Configuration group (e.g., ESHOP, PAYPAL, SITE)
regkeyVARCHAR(150)Configuration key within group
regvalTEXTValue (plaintext or encrypted ciphertext)
langVARCHAR(2)Language abbreviation (empty string for non-localized values)

Indexes: reggroup, regkey, (regkey, lang), (reggroup, regkey, lang) -- the last is a covering index for the upsert pattern.

Storage Patterns

PatternExampleStorage
Simple valuesetValue('ESHOP', 'PAYMENTS_ACTIVE', '1')regval = '1', lang = ''
Per-languagesetValue('SITE', 'TITLE', 'My Shop', 'el')regval = 'My Shop', lang = 'EL'
EncryptedsetValue('PAYPAL', 'PASSWORD', $pw, '', true)regval = encrypted_ciphertext, lang = ''
ArraysetArray('PAYWAY', 'METHODS', '', ['cod','card'])`regval = 'cod

Configuration

FileDescription
application/config/auth.phpAuth provider flags, hash type, static users
application/config/email_groups.phpDefines available email group names for SMTP settings
application/config/ai_content_generation_prompts.phpDefines entity/field structure for AI prompt settings
application/config/emailViews.jsonEmail template configuration for the email viewer
ecommercen/helpers/registry_helper.phpHelper functions for registry access outside controllers

Environment Variables

The registry itself has no direct environment variable dependencies, but many settings pages reference .env values via env() calls for initial/fallback values. The encryption key used for encrypted registry values is configured via the CI Encryption library config.

Client Extension Points

  • Settings controllers extend Admin_c -- client repos can override any settings controller by placing a same-named file in application/controllers/.
  • New registry groups can be created at any time by simply calling setValue() with a new group name -- no schema changes needed.
  • Encryption keys are per-installation (from CI config), so encrypted values are not portable between environments.
  • Custom settings pages can be added by creating new controllers in the settings module (in client repos, in application/controllers/), using the same Registry read/write pattern.
  • Registry helper (ecommercen/helpers/registry_helper.php) provides functions for registry access in contexts without controller access.

Business Rules

  • Encryption for sensitive fields: API keys, secrets, and passwords use the 5th parameter true on setValue()/value() to encrypt/decrypt via the CI Encryption library. Encrypted values are stored as ciphertext in the DB.
  • Multi-language support: The lang column separates per-language values. Empty string ('') is mapped to the constant BASE internally. Language abbreviations are auto-uppercased.
  • Role-based access: General settings require ADVISABLE + ADMIN roles. Social auth settings are restricted to ADVISABLE only. The only_advisable() page has an inner guard: SMS limits are only writable by ADVISABLE users.
  • Array values: Stored as pipe-delimited strings (e.g., val1|val2|val3). Use setArray()/getArray() for transparent serialization.
  • Cache invalidation: Registry::live() invalidates PSCache and re-reads from DB. Called on every admin page load. Frontend reads use the cached version without refresh.
  • Upsert pattern: Registry_model::set_regval() checks if a row exists for (reggroup, regkey, lang) and either UPDATEs or INSERTs. This prevents duplicate entries.
  • No validation on values: Registry stores raw string values. Type casting and validation happen in the controller layer before calling setValue().
  • Logo upload: The index() method handles logo file upload separately via updateLogo() and stores the filename in GLOBAL.LOGO.

Registry Usage Statistics

The settings system manages 77 unique registry groups across all settings controllers (Adv_settings.php, AdvSocialAuthSettings.php, AdvSocialLinksSettings.php, AdvFavicons.php, AdvEmailViewer.php).

Production scale: Live databases contain 94 unique registry groups with 890+ registry entries in total. The 17 additional groups beyond what is visible in settings controllers are created by runtime code (jobs, libraries, integrations) via setValue() calls, or by client-specific customizations. The inventory table above covers the 77 controller-managed groups plus 11 additional groups discovered from production data and 4 from code analysis.

Top 30 Registry Groups by Usage Frequency (Codebase-Wide)

This table shows how frequently each registry group is read via value() across all ecommercen/ PHP files. Higher counts indicate groups that are critical runtime dependencies -- modifying these groups has broader impact.

#Registry Groupvalue() CallsPrimary Consumers
1XML_FEEDS136Feed generators (src/Feeds/), feed settings
2OTHER118Feature flags throughout admin and storefront
3ESHOP97Core e-commerce: products, orders, checkout, reporting
4AGORA73ProjectAgora ad integration
5MANAGO51ManaGo marketing automation
6POINT_SYSTEM38Loyalty points system
7MAILCHIMP38Mailchimp newsletter integration
8ADVISABLE_AI35AI features (recommendations, content generation)
9GOOGLE_RECOMMENDATIONS29Google Recommendations AI
10PIRAEUSBANK27Piraeus Bank payment gateway
11SMART_RECOMMENDATIONS23Smart recommendation engine
12MATOMO23Matomo analytics
13VIVAWALLET21Viva Wallet payments
14APCOPAY21ApcoPay (Piraeus) payments
15GOOGLE18GA4, reCAPTCHA, Tag Manager
16EUROBANK18Eurobank payment gateway
17AI_CONTENT_GENERATION_PROVIDER_OPEN_AI17OpenAI content generation
18ETHNIKIBANK_EE16Ethniki Bank express checkout
19PUBLIC_MARKETPLACE15Public/Mirakl marketplace
20MOOSEND15Moosend email marketing
21FACEBOOK_CONVERSION14Meta Conversions API
22APIFON14Apifon SMS provider
23SMARTCART13Skroutz SmartCart marketplace
24PAY_BY_BANK13PayByBank payments
25ALPHABANK13Alpha Bank payment gateway
26SOCIAL_LINKS12Social media URLs
27SOCIAL_AUTH11Google/Facebook OAuth
28KLARNA_PAYMENTS11Klarna payment gateway
29FARMAKON11Farmakon ERP integration
30ECOMMERCEN_PLUS11Email campaigns (points, birthday, reviews)

ESHOP Group Deep Dive

The ESHOP group is the third most-referenced registry group (97 value() calls across 44 files). It contains core platform configuration keys spanning multiple settings pages.

Known ESHOP keys (from settings controller analysis):

KeySettings PageDescription
SANITIZE_INTERVALindexDays before guest customer cleanup
COMPANY_PHONEindexCompany phone number
PAYMENTS_ACTIVEindexEnable/disable payments
TRANS_COST_LIMITindexFree shipping threshold
LIMIT_ON_PRODUCTSindexProducts per page limit
DEFAULT_CURRENCYindexDefault currency code
SLUG_TO_GREEKLISHindexTransliterate slugs to Greeklish
MINIMUM_CART_TOTAL_FOR_PAID_AT_STOREindexMinimum cart for store pickup
DEFAULT_POINT_FACTORsubsystemPoints per euro spent
POINT_FACTOR_TYPEsubsystemPoints calculation method
SPEND_POINTSsubsystemPoints needed per euro discount
REWARD_CASHsubsystemCash value of point reward
REWARD_NEW_CUSTOMERsubsystemPoints awarded to new customers
POINTS_TO_NEW_CUSTOMERsubsystemPoints awarded on registration
ESHOP_CUSTOMER_GRADE_1 / _2 / _3subsystemCustomer tier thresholds
ESHOP_CUSTOMER_GRADE_1_VALUE / _2_VALUE / _3_VALUEsubsystemCustomer tier point multipliers
BLOG_PRODUCT_ENABLEDonly_advisableBlog-product linking
BLOG_PRODUCT_CATEGORY_ENABLEDonly_advisableBlog-category linking
BLOG_PRODUCT_TWO_WAY_SYNConly_advisableTwo-way blog-product sync
EVENT_ARTICLE_PRODUCT_ENABLEDonly_advisableEvent-product linking
FILTER_CATEGORY_GROUP_TAGS_ENABLEDonly_advisableCategory group tag filters
IMPORT_PRODUCTS_FROM_EXCEL_ENABLEDonly_advisableExcel product import

Note: The full ESHOP group in production databases may contain significantly more keys (estimated 50+ keys across all settings pages and feature flags) than what is declared in the settings controller alone, since other controllers and libraries also write to this group.

OTHER Group Deep Dive

The OTHER group is the second most-referenced (118 value() calls) and functions as a catch-all for feature flags:

KeyDescription
DEFAULT_FILTER_FRONTDefault product filter on storefront
LOW_STOCK_END_OF_LISTPush low-stock products to end of listings
ENABLE_LOGIN_AND_BUYRequire login before purchase
SHOW_PRODUCT_HITSDisplay product view counts
ORDER_TAGS_ENABLEDEnable order tagging system
ORDER_EDIT_KEEP_PRODUCT_VALUESKeep original prices when editing orders
Plus 20+ additional feature flagsVarious feature toggles across the platform