Appearance
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).
| Route | Controller | Method | Description | Required Roles |
|---|---|---|---|---|
settings | Adv_settings | index() | General settings: site title, email, company, cart, payments, price tracking | ADVISABLE, ADMIN |
settings/third_party_providers | Adv_settings | third_party_providers() | 15+ third-party integrations | ADVISABLE, ADMIN |
settings/google | Adv_settings | google() | GA4, reCAPTCHA, Tag Manager, Recommendations AI | ADVISABLE, ADMIN |
settings/subsystem_settings | Adv_settings | subsystem_settings() | Loyalty points configuration | ADVISABLE, ADMIN |
settings/notification_settings | Adv_settings | notification_settings() | Email, SMS, OneSignal push | ADVISABLE, ADMIN |
settings/payment_settings | Adv_settings | payment_settings() | 12+ payment provider configs | ADVISABLE, ADMIN |
settings/other_settings | Adv_settings | other_settings() | Filters, stock, tags, bundles, display | ADVISABLE, ADMIN |
settings/xml_feeds_settings | Adv_settings | xml_feeds_settings() | Feed tokens and price modifiers | ADVISABLE, ADMIN |
settings/e-commercen-plus | Adv_settings | eCommercenPlus() | Email campaigns: points, birthday, reviews | ADVISABLE, ADMIN |
settings/only_advisable | Adv_settings | only_advisable() | Developer-only: Matomo, AI, Farmakon, feature flags | ADVISABLE, ADMIN |
settings/variation_settings | Adv_settings | variation_settings() | Product variation display config | ADVISABLE, ADMIN |
settings/attribute_settings | Adv_settings | attribute_settings() | Product attribute config | ADVISABLE, ADMIN |
settings/ai_content_generation_settings | Adv_settings | ai_content_generation_settings() | OpenAI provider configuration | ADVISABLE, ADMIN |
settings/ai_content_generation_prompts | Adv_settings | ai_content_generation_prompts() | AI prompt templates per entity | ADVISABLE, ADMIN |
settings/mailchimp | Adv_settings | mailchimp() | Mailchimp API integration | ADVISABLE, ADMIN |
settings/available_countries | Adv_settings | availableCountries() | Country enable/disable | ADVISABLE, ADMIN |
settings/video_showcase | Adv_settings | videoShowcase() | Video showcase settings | ADVISABLE, ADMIN |
settings/social_auth | AdvSocialAuthSettings | index() | Google/Facebook OAuth credentials | ADVISABLE only |
settings/social_links | AdvSocialLinksSettings | index() | Social media profile URLs | ADVISABLE, ADMIN |
settings/favicons | AdvFavicons | index() / save() | Favicon upload, generation, manifest | ADVISABLE, ADMIN |
settings/email_views | AdvEmailViewer | index() | Email template preview (21 templates) | ADVISABLE, ADMIN |
settings/email_views/editEmailSubjects | AdvEmailViewer | editEmailSubjects() | Per-language email subject editor | ADVISABLE, 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 viewRegistry 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' constantRegistry 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) -> plaintextDomain Layer
Settings HMVC Module (ecommercen/settings/)
| File | Lines | Description |
|---|---|---|
controllers/Adv_settings.php | ~2,450 | Main settings controller with 20+ page methods, each handling GET display + POST save. Extends Admin_c. |
controllers/AdvSocialAuthSettings.php | 93 | Google + Facebook OAuth client credentials. ADVISABLE-only. Encrypted secrets. |
controllers/AdvSocialLinksSettings.php | 52 | Social media profile URLs (Facebook, Twitter, Instagram, LinkedIn, Pinterest, TikTok). |
controllers/AdvFavicons.php | 90 | Favicon upload with image generation (multiple sizes) and manifest creation. Uses FaviconImageGenerator + FaviconHtmlGenerator. |
controllers/AdvEmailViewer.php | 188 | Email 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)
| Method | Signature | Description |
|---|---|---|
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)
| Method | Description |
|---|---|
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:
| Group | Settings Page | Key Values |
|---|---|---|
SITE | index | TITLE (per-lang), EMAIL_FORM, COMPANY_ADDRESS (per-lang) |
ESHOP | index, subsystem, only_advisable | SANITIZE_INTERVAL, COMPANY_PHONE, PAYMENTS_ACTIVE, TRANS_COST_LIMIT, LIMIT_ON_PRODUCTS, DEFAULT_CURRENCY, SLUG_TO_GREEKLISH, plus 15+ more |
BLOG | index | RSSTITLE (per-lang), RSSDESCRIPTION (per-lang) |
GLOBAL | index, only_advisable | ADMIN_EMAIL, CDN_URL, LOGO, SITE_MODE |
SMS | index, notifications | SMS_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 |
EMAIL | notifications | SEND_EMAIL_TO_CLIENT_FOR_ADMIN_ORDER, NOTIFICATION_LOW_STOCK, NOTIFICATION_NEW_PRODUCT |
EMAIL_SUBJECTS | email subjects | Per-language email subject lines |
PRICE_TRACK | index | ENABLED, ENABLED_GRAPH, TRACK_DAYS, SHOW_DISCOUNT_ON_VALUE, DISCOUNT_LABEL (per-lang) |
SKROUTZ | third_party | ANALYTICS_KEY, ANALYTICS_IS_ENABLED |
BESTPRICE | third_party | ANALYTICS_KEY, ANALYTICS_IS_ENABLED |
FACEBOOK | third_party | IS_ENABLED, PIXEL_ID |
FACEBOOK_CONVERSION | third_party | ENABLED, PIXEL_ID, PIXEL_ACCESS_TOKEN, PIXEL_TESTING_CODE, TIMEOUT, CONNECT_TIMEOUT |
CRITEO | third_party | IS_ENABLED, ACCOUNT_ID |
AGORA | third_party | IS_ENABLED, API_URL, API_KEY, CATALOG_ID, TEAM_ID, BANNERS_, PIXEL_, DSPL_* (20+ keys) |
TABOOLA | third_party | IS_ENABLED, ID |
LINKWISE | third_party | IS_ENABLED, PROGRAM_ID |
SMARTCART | third_party | IS_ENABLED, API_URL, API_KEY, DISABLE_PRODUCT_STOCK_CHECK |
SHOPFLIX | third_party | IS_ENABLED, IS_PRODUCTION, API_EMAIL, API_KEY |
MANAGO | third_party | ENABLE_MONITOR_SCRIPT, ENABLE_API, API_BASE_URL, CLIENT_ID, plus 15+ keys |
GOOGLE | GA_TRACKING_ID, RECAPTCHA keys, TAG_MANAGER keys, RECOMMENDATIONS keys | |
POINT_SYSTEM | subsystem | IS_ENABLED, ORDER_EDIT_KEEP_PRODUCT_POINTS |
ONE_SIGNAL | notifications | IS_ENABLED, APP_ID, SAFARI_WEB_ID |
PAYPAL | payments | USERNAME, PASSWORD, SIGNATURE |
PAYPAL_ADVANCED | payments | CLIENT_ID, CLIENT_SECRET, SANDBOX |
ALPHABANK | payments | VERSION, ID, SSK, SUBMIT |
EUROBANK | payments | MERCHANT_ID, SECRET, URL, USE_INSTALLMENTS, INSTALLMENTS |
PIRAEUSBANK | payments | ACQUIRER_ID, MERCHANT_ID, POS_ID, USERNAME, PASSWORD, REQUEST_TYPE, INSTALLMENTS, BNPL, plus more |
ETHNIKIBANK | payments | PUBLIC_KEY, PRIVATE_KEY |
ETHNIKIBANK_NBGPAY | payments | APP_ID, APP_KEY, IS_SANDBOX |
ETHNIKIBANK_EE | payments | DIRECT_API_KEY |
VIVAWALLET | payments | PAYMENT_PARAMETERS, CLIENT_ID, CLIENT_SECRET, plus more |
STRIPE | payments | PUBLIC_KEY, SECRET_KEY, WEBHOOK_KEY |
KLARNA_PAYMENTS | payments | USERNAME, PASSWORD, API_REGION |
IRIS | payments | MERCHANT_ID, SECRET |
JCC | payments | MERCHANT_ID, ACQUIRER_ID, PASSWORD |
CARDLINK | payments | MERCHANT_ID, SHARED_SECRET |
PAY_BY_BANK | payments | MERCHANT_ID, API_KEY, PROVIDER |
SOCIAL_AUTH | social_auth | GOOGLE_LOGIN_ENABLED, GOOGLE_PROJECT_ID, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (encrypted), FACEBOOK_LOGIN_ENABLED, FACEBOOK_CLIENT_ID, FACEBOOK_CLIENT_SECRET (encrypted) |
SOCIAL_LINKS | social_links | FACEBOOK, TWITTER, INSTAGRAM, LINKEDIN, PINTEREST, TIKTOK |
MATOMO | only_advisable | ENABLED, SHOW_ADMIN_DASHBOARD, TOKEN (encrypted), SITE_ID (encrypted), SITE_URL, PRODUCT_ID_PREFIX, TIMEOUT, CONNECT_TIMEOUT |
ADVISABLE_AI | only_advisable | SHOW_ADMIN_DASHBOARD |
VIEW_METRICS | only_advisable | ENABLED, PERIOD, per-object-type ENABLED/PERIOD |
FARMAKON | only_advisable | IS_ENABLED, ADDRESS, EXCLUDED_PRODUCT_LIST |
BUILDER | only_advisable | ENABLED |
COOKIES | only_advisable | ENABLED |
SUPPLIER | only_advisable | ENABLED |
DATABOX | only_advisable | ENABLED, TOKEN (encrypted) |
MARKETDATA | only_advisable | ENABLED, MARKETDATA_KEY (encrypted), MARKETDATA_TYPE |
EUROPHARMACY | only_advisable | ENABLED, BASE_URL, USERNAME |
FLAGGED_CONTENT | only_advisable | EVENTS, MAPS, VIDEO |
ECOMMERCEN_PLUS | eCommercenPlus, only_advisable | CUSTOMER_REVIEW_REWARD_ENABLE, CUSTOMER_REVIEW_REWARD, PRODUCT_PAGE_COMBO_ENABLED, AFTER_ADD_TO_CART_RECOMMENDATIONS_ENABLED |
EMAIL_FOR_TOTAL_POINTS | eCommercenPlus | IS_ENABLED, TOTAL_POINTS, INTERVAL, INTERVAL_REPEAT |
EMAIL_FOR_BIRTHDAY | eCommercenPlus | IS_ENABLED, POINTS_TO_ADD, REPEAT |
GIFT_CARDS | payments | ENABLED |
GIFT_PACKAGING | other | ENABLE, COST |
OTHER | other, only_advisable | DEFAULT_FILTER_FRONT, LOW_STOCK_END_OF_LIST, ENABLE_LOGIN_AND_BUY, SHOW_PRODUCT_HITS, plus 20+ feature flags |
AFFILIATION_VARIATIONS_GROUPS | third_party | GROUPS_FOR_SIZE, GROUPS_FOR_COLOR |
AFFILIATION_ATTRS_GROUPS | third_party | GROUPS_FOR_SIZE, GROUPS_FOR_COLOR |
AI_CONTENT_GENERATION_PROVIDER_OPEN_AI | ai_settings | IS_ENABLED, API_KEY, MODEL, MAX_TOKENS, TEMPERATURE, plus 12+ params |
AI_CONTENT_GENERATION_PROMPTS | ai_prompts | Dynamic per-entity prompt templates |
ATTRIBUTES | attribute_settings | DISPLAY_FILTERS_IN_LISTINGS, MERGE_DUPLICATE_VALUES_BY_NAME -- controls attribute filter sidebar visibility and deduplication |
EMAIL_NEWSLETTER | notifications | SMTP config (HOST, PORT, USER, PASS encrypted, AUTO_SSL_TLS, SENDER_EMAIL, FROM_NAME, ADMIN_EMAIL) -- dedicated SMTP for newsletter sending |
GLAMI | third_party | IS_ENABLED -- Glami marketplace feed toggle |
KLARNA_OSM | payments | ENABLED, IS_PRODUCTION, CLIENT_ID -- Klarna On-Site Messaging (financing widgets on PDP + checkout) |
MAILCHIMP_LOGGING | mailchimp | SMTP config (HOST, PORT, USER, PASS encrypted, AUTO_SSL_TLS, SENDER_EMAIL, FROM_NAME, ADMIN_EMAIL) -- Mailchimp event logging emails |
NEWSLETTER | notifications | DEFAULT_GROUP -- default user group for new subscribers |
PAYWAY_ADMIN | payments | delivery, paid_at_store, bank_transfer -- admin-available payment methods |
PRODUCT_CART_CUSTOMISATIONS | other | ENABLED -- cart customization feature toggle |
RELATED_RECOMMENDATIONS | other | ENABLED -- related product recommendations toggle |
VIVA_ENABLED_PAYWAYS | payments | vivawallet_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
| Column | Type | Description |
|---|---|---|
id | INT(11) PK AI | Record ID |
reggroup | VARCHAR(150) | Configuration group (e.g., ESHOP, PAYPAL, SITE) |
regkey | VARCHAR(150) | Configuration key within group |
regval | TEXT | Value (plaintext or encrypted ciphertext) |
lang | VARCHAR(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
| Pattern | Example | Storage |
|---|---|---|
| Simple value | setValue('ESHOP', 'PAYMENTS_ACTIVE', '1') | regval = '1', lang = '' |
| Per-language | setValue('SITE', 'TITLE', 'My Shop', 'el') | regval = 'My Shop', lang = 'EL' |
| Encrypted | setValue('PAYPAL', 'PASSWORD', $pw, '', true) | regval = encrypted_ciphertext, lang = '' |
| Array | setArray('PAYWAY', 'METHODS', '', ['cod','card']) | `regval = 'cod |
Configuration
Related Config Files
| File | Description |
|---|---|
application/config/auth.php | Auth provider flags, hash type, static users |
application/config/email_groups.php | Defines available email group names for SMTP settings |
application/config/ai_content_generation_prompts.php | Defines entity/field structure for AI prompt settings |
application/config/emailViews.json | Email template configuration for the email viewer |
ecommercen/helpers/registry_helper.php | Helper 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 inapplication/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
settingsmodule (in client repos, inapplication/controllers/), using the sameRegistryread/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
trueonsetValue()/value()to encrypt/decrypt via the CI Encryption library. Encrypted values are stored as ciphertext in the DB. - Multi-language support: The
langcolumn separates per-language values. Empty string ('') is mapped to the constantBASEinternally. 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). UsesetArray()/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 viaupdateLogo()and stores the filename inGLOBAL.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 Group | value() Calls | Primary Consumers |
|---|---|---|---|
| 1 | XML_FEEDS | 136 | Feed generators (src/Feeds/), feed settings |
| 2 | OTHER | 118 | Feature flags throughout admin and storefront |
| 3 | ESHOP | 97 | Core e-commerce: products, orders, checkout, reporting |
| 4 | AGORA | 73 | ProjectAgora ad integration |
| 5 | MANAGO | 51 | ManaGo marketing automation |
| 6 | POINT_SYSTEM | 38 | Loyalty points system |
| 7 | MAILCHIMP | 38 | Mailchimp newsletter integration |
| 8 | ADVISABLE_AI | 35 | AI features (recommendations, content generation) |
| 9 | GOOGLE_RECOMMENDATIONS | 29 | Google Recommendations AI |
| 10 | PIRAEUSBANK | 27 | Piraeus Bank payment gateway |
| 11 | SMART_RECOMMENDATIONS | 23 | Smart recommendation engine |
| 12 | MATOMO | 23 | Matomo analytics |
| 13 | VIVAWALLET | 21 | Viva Wallet payments |
| 14 | APCOPAY | 21 | ApcoPay (Piraeus) payments |
| 15 | GOOGLE | 18 | GA4, reCAPTCHA, Tag Manager |
| 16 | EUROBANK | 18 | Eurobank payment gateway |
| 17 | AI_CONTENT_GENERATION_PROVIDER_OPEN_AI | 17 | OpenAI content generation |
| 18 | ETHNIKIBANK_EE | 16 | Ethniki Bank express checkout |
| 19 | PUBLIC_MARKETPLACE | 15 | Public/Mirakl marketplace |
| 20 | MOOSEND | 15 | Moosend email marketing |
| 21 | FACEBOOK_CONVERSION | 14 | Meta Conversions API |
| 22 | APIFON | 14 | Apifon SMS provider |
| 23 | SMARTCART | 13 | Skroutz SmartCart marketplace |
| 24 | PAY_BY_BANK | 13 | PayByBank payments |
| 25 | ALPHABANK | 13 | Alpha Bank payment gateway |
| 26 | SOCIAL_LINKS | 12 | Social media URLs |
| 27 | SOCIAL_AUTH | 11 | Google/Facebook OAuth |
| 28 | KLARNA_PAYMENTS | 11 | Klarna payment gateway |
| 29 | FARMAKON | 11 | Farmakon ERP integration |
| 30 | ECOMMERCEN_PLUS | 11 | Email 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):
| Key | Settings Page | Description |
|---|---|---|
SANITIZE_INTERVAL | index | Days before guest customer cleanup |
COMPANY_PHONE | index | Company phone number |
PAYMENTS_ACTIVE | index | Enable/disable payments |
TRANS_COST_LIMIT | index | Free shipping threshold |
LIMIT_ON_PRODUCTS | index | Products per page limit |
DEFAULT_CURRENCY | index | Default currency code |
SLUG_TO_GREEKLISH | index | Transliterate slugs to Greeklish |
MINIMUM_CART_TOTAL_FOR_PAID_AT_STORE | index | Minimum cart for store pickup |
DEFAULT_POINT_FACTOR | subsystem | Points per euro spent |
POINT_FACTOR_TYPE | subsystem | Points calculation method |
SPEND_POINTS | subsystem | Points needed per euro discount |
REWARD_CASH | subsystem | Cash value of point reward |
REWARD_NEW_CUSTOMER | subsystem | Points awarded to new customers |
POINTS_TO_NEW_CUSTOMER | subsystem | Points awarded on registration |
ESHOP_CUSTOMER_GRADE_1 / _2 / _3 | subsystem | Customer tier thresholds |
ESHOP_CUSTOMER_GRADE_1_VALUE / _2_VALUE / _3_VALUE | subsystem | Customer tier point multipliers |
BLOG_PRODUCT_ENABLED | only_advisable | Blog-product linking |
BLOG_PRODUCT_CATEGORY_ENABLED | only_advisable | Blog-category linking |
BLOG_PRODUCT_TWO_WAY_SYNC | only_advisable | Two-way blog-product sync |
EVENT_ARTICLE_PRODUCT_ENABLED | only_advisable | Event-product linking |
FILTER_CATEGORY_GROUP_TAGS_ENABLED | only_advisable | Category group tag filters |
IMPORT_PRODUCTS_FROM_EXCEL_ENABLED | only_advisable | Excel 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:
| Key | Description |
|---|---|
DEFAULT_FILTER_FRONT | Default product filter on storefront |
LOW_STOCK_END_OF_LIST | Push low-stock products to end of listings |
ENABLE_LOGIN_AND_BUY | Require login before purchase |
SHOW_PRODUCT_HITS | Display product view counts |
ORDER_TAGS_ENABLED | Enable order tagging system |
ORDER_EDIT_KEEP_PRODUCT_VALUES | Keep original prices when editing orders |
| Plus 20+ additional feature flags | Various feature toggles across the platform |
Related Flows
- AD-01 Admin Auth & SSO -- auth configuration (static users, SSO env vars)
- AD-22 Audience & Campaigns --
SMART_RECOMMENDATIONS.IS_ENABLED_CUSTOMER_TAGfeature flag - AD-23 Gift Cards --
GIFT_CARDS.ENABLEDand payment method config - AD-24 Bundles --
PRODUCT_BUNDLES.ENABLEDfeature flag - AD-44 Social Auth Settings --
SOCIAL_AUTHregistry group (Google/Facebook OAuth) - CF-07 Checkout -- payment methods read from
METHODS.PAYWAYregistry - IN-01 Feed Generation -- feed tokens and config from
xml_feeds_settings - CF-34 AI Recommendations -- OpenAI provider config from
AI_CONTENT_GENERATION_PROVIDER_OPEN_AI - AD-53 Email Template Viewer -- email template preview (email-related config lives in settings)
- AD-57 Advisable Newsfeed -- newsfeed toggle configuration in admin settings
- SY-24 Email Dispatch System -- SMTP credentials, sender names, and per-group email settings configured here are consumed by
Adv_mailer