feat(devtools): configurable dev domain with offline bypass
Platform: moko-platform CI / Gate 2: Unit Tests (8.1) (push) Blocked by required conditions
Platform: moko-platform CI / Gate 2: Unit Tests (8.2) (push) Blocked by required conditions
Platform: moko-platform CI / Gate 2: Unit Tests (8.3) (push) Blocked by required conditions
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 3: Self-Health Check (push) Blocked by required conditions
Platform: moko-platform CI / Gate 4: Governance (push) Blocked by required conditions
Platform: moko-platform CI / Gate 5: Template Integrity (push) Blocked by required conditions
Platform: moko-platform CI / CI Summary (push) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 2: Unit Tests (8.1) (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 2: Unit Tests (8.2) (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 2: Unit Tests (8.3) (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 3: Self-Health Check (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 4: Governance (pull_request) Blocked by required conditions
Platform: moko-platform CI / Gate 5: Template Integrity (pull_request) Blocked by required conditions
Platform: moko-platform CI / CI Summary (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 6s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 9s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Generic: Repo Health / Access control (pull_request) Successful in 3s
Universal: Auto Version Bump / Version Bump (push) Successful in 17s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 13s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 17s
Generic: Project CI / Lint & Validate (pull_request) Successful in 36s
Platform: moko-platform CI / Gate 1: Code Quality (pull_request) Failing after 36s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 39s
Platform: moko-platform CI / Gate 1: Code Quality (push) Failing after 40s

- Dev Domain fieldset in DevTools plugin settings
- Custom dev domain or auto-detect as dev.{primary_domain}
- Offline bypass, robots directive per dev domain
- Core plugin reads dev domain from devtools params
- Sidebar CSS: margin child ul instead of individual icons
This commit is contained in:
Jonathan Miller
2026-06-21 11:50:18 -05:00
parent 8632068357
commit a198990982
4 changed files with 79 additions and 4 deletions
@@ -165,10 +165,7 @@ foreach ($rest as $comp)
<style>
.sidebar-wrapper .mokosuiteclient-ext-child > a { padding-inline-start: 0.5rem; }
.sidebar-wrapper .item > a [class^="icon-"],
.sidebar-wrapper .item > a [class*=" icon-"],
.sidebar-wrapper .item > a [class^="fa-"],
.sidebar-wrapper .item > a [class*=" fa-"] { margin-left: 0; }
.sidebar-wrapper ul.mm-collapse { margin-left: 0.5rem; }
</style>
<ul class="nav flex-column main-nav">
@@ -1835,6 +1835,36 @@ class MokoSuiteClient extends CMSPlugin implements BootableExtensionInterface
*/
protected function getDevAliasDomain(): string
{
// Check devtools plugin params for custom dev domain
try
{
$db = Factory::getDbo();
$db->setQuery(
$db->getQuery(true)
->select($db->quoteName('params'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuiteclient_devtools'))
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
);
$devParams = json_decode((string) $db->loadResult());
if ($devParams && ($devParams->dev_domain_enabled ?? '1') === '0')
{
return '';
}
if (!empty($devParams->dev_domain))
{
return trim($devParams->dev_domain);
}
}
catch (\Throwable $e)
{
// Fall through to default
}
// Default: dev.{primary_domain}
$primary = $this->getPrimaryHost();
return !empty($primary) ? 'dev.' . $primary : '';
@@ -15,3 +15,14 @@ PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DELETE_VERSIONS_LABEL="Delete All Versions"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DELETE_VERSIONS_DESC="One-shot: delete all content version history on save. Automatically turns off after execution."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_RESET_DLKEYS_LABEL="Reset Download Keys"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_RESET_DLKEYS_DESC="One-shot: clear all download keys (dlid) from update sites on save. Automatically turns off after execution."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_FIELDSET_DEVDOMAIN="Dev Domain"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_FIELDSET_DEVDOMAIN_DESC="Configure a development domain alias that bypasses offline mode and has its own robots settings."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ENABLED_LABEL="Enable Dev Domain"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ENABLED_DESC="Allow a development domain to bypass offline mode for testing."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_LABEL="Dev Domain"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_DESC="The development domain alias. Leave empty to auto-detect as dev.{primary_domain}. Must point to the same hosting folder."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_BYPASS_LABEL="Bypass Offline Mode"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_BYPASS_DESC="When the main site is offline, the dev domain stays accessible for development and testing."
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ROBOTS_LABEL="Robots Directive"
PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ROBOTS_DESC="Meta robots tag for the dev domain. Use noindex,nofollow to prevent search engines from indexing the dev site."
@@ -61,6 +61,43 @@
<option value="0">JNO</option>
</field>
</fieldset>
<fieldset name="dev_domain"
label="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_FIELDSET_DEVDOMAIN"
description="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_FIELDSET_DEVDOMAIN_DESC">
<field name="dev_domain_enabled" type="radio" default="1"
label="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ENABLED_LABEL"
description="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ENABLED_DESC"
class="btn-group btn-group-yesno">
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="dev_domain" type="text" default=""
label="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_LABEL"
description="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_DESC"
hint="dev.clientsite.com (auto-detected from primary domain if empty)"
showon="dev_domain_enabled:1" />
<field name="dev_domain_offline_bypass" type="radio" default="1"
label="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_BYPASS_LABEL"
description="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_BYPASS_DESC"
class="btn-group btn-group-yesno"
showon="dev_domain_enabled:1">
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="dev_domain_robots" type="list" default="noindex, nofollow"
label="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ROBOTS_LABEL"
description="PLG_SYSTEM_MOKOSUITECLIENT_DEVTOOLS_DEVDOMAIN_ROBOTS_DESC"
showon="dev_domain_enabled:1">
<option value="noindex, nofollow">noindex, nofollow</option>
<option value="noindex">noindex</option>
<option value="index, follow">index, follow</option>
</field>
</fieldset>
</fields>
</config>
</extension>