Bridge: install from release, copy user files + params after. Bump 03.10.12
Some checks failed
Repo Health / Access control (push) Successful in 2s
Auto-Update SHA Hash / Update SHA-256 Hash in updates.xml (release) Failing after 6s
Repo Health / Release configuration (push) Failing after 4s
Repo Health / Scripts governance (push) Successful in 5s
Repo Health / Repository health (push) Failing after 5s

1. Download & install MokoOnyx from Gitea release
2. Copy user files (custom themes, user.css/js) to MokoOnyx
3. Migrate template styles with params
Fallback: if download fails, copy user files only (MokoOnyx must be
installed manually)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonathan Miller
2026-04-19 17:51:02 -05:00
parent da567cecd4
commit 4e6f14c3ba
5 changed files with 87 additions and 36 deletions

View File

@@ -9,13 +9,13 @@
INGROUP: MokoCassiopeia.Documentation
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
FILE: ./README.md
VERSION: 03.10.11
VERSION: 03.10.12
BRIEF: Documentation for MokoCassiopeia template
-->
# MokoCassiopeia → MokoOnyx
> **This template is being renamed to MokoOnyx.** Version 03.10.11 is the bridge release that automatically migrates your settings. After updating, MokoOnyx will be your active template and MokoCassiopeia can be safely uninstalled.
> **This template is being renamed to MokoOnyx.** Version 03.10.12 is the bridge release that automatically migrates your settings. After updating, MokoOnyx will be your active template and MokoCassiopeia can be safely uninstalled.
**A Modern, Lightweight Joomla Template Based on Cassiopeia**

View File

@@ -46,27 +46,23 @@ class MokoBridgeMigration
return true;
}
// 1. Download MokoOnyx ZIP
// 1. Try downloading and installing MokoOnyx from Gitea release
$installed = false;
$zipPath = self::downloadRelease();
if (!$zipPath) {
$app->enqueueMessage(
'MokoOnyx migration: could not download the MokoOnyx template package. '
. 'Please install MokoOnyx manually from '
. '<a href="https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases" target="_blank">Gitea Releases</a>.',
'warning'
);
return false;
if ($zipPath) {
$installed = self::installPackage($zipPath);
@unlink($zipPath);
}
// 2. Install MokoOnyx via Joomla's installer
$installed = self::installPackage($zipPath);
// Clean up downloaded ZIP
@unlink($zipPath);
// 2. Fallback: copy from MokoCassiopeia and rename
if (!$installed) {
self::log('Bridge: download/install failed, falling back to file copy');
$installed = self::copyAndRename();
}
if (!$installed) {
$app->enqueueMessage(
'MokoOnyx migration: installation failed. '
'MokoOnyx migration: automatic installation failed. '
. 'Please install MokoOnyx manually from '
. '<a href="https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases" target="_blank">Gitea Releases</a>.',
'warning'
@@ -74,10 +70,13 @@ class MokoBridgeMigration
return false;
}
// 3. Migrate template styles
// 3. Copy user files (custom themes, user.css, user.js)
self::copyAndRename();
// 4. Migrate template styles and params
self::migrateStyles();
// 4. Notify admin
// 5. Notify admin
self::notifyUser($app);
self::log('Bridge migration completed successfully.');
@@ -245,6 +244,58 @@ class MokoBridgeMigration
self::log('Migrated ' . count($oldStyles) . ' template style(s).');
}
/**
* Copy user-specific files from MokoCassiopeia to MokoOnyx.
* Only copies custom themes, user.css, and user.js — not the full template.
* MokoOnyx must already be installed (via download or manual).
*/
private static function copyAndRename(): bool
{
$oldMedia = JPATH_ROOT . '/media/templates/site/' . self::OLD_NAME;
$newMedia = JPATH_ROOT . '/media/templates/site/' . self::NEW_NAME;
if (!is_dir($newMedia)) {
self::log('Bridge: MokoOnyx media dir not found — cannot copy user files', 'warning');
return false;
}
$copied = 0;
// Copy custom theme palettes
$userFiles = [
'css/theme/light.custom.css',
'css/theme/dark.custom.css',
'css/theme/light.custom.min.css',
'css/theme/dark.custom.min.css',
'css/user.css',
'css/user.min.css',
'js/user.js',
'js/user.min.js',
];
foreach ($userFiles as $relPath) {
$srcFile = $oldMedia . '/' . $relPath;
$dstFile = $newMedia . '/' . $relPath;
if (is_file($srcFile) && !is_file($dstFile)) {
$dstDir = dirname($dstFile);
if (!is_dir($dstDir)) {
mkdir($dstDir, 0755, true);
}
copy($srcFile, $dstFile);
$copied++;
}
}
// Copy favicon directory
$faviconSrc = JPATH_ROOT . '/images/favicons';
if (is_dir($faviconSrc)) {
self::log('Bridge: favicons already at images/favicons — shared between templates');
}
self::log("Bridge: copied {$copied} user file(s) to MokoOnyx");
return true;
}
private static function notifyUser($app): void
{
$app->enqueueMessage(

View File

@@ -17,7 +17,7 @@
"defgroup": "Joomla.Template.Site",
"ingroup": "MokoCassiopeia.Template.Assets",
"path": "./media/templates/site/mokocassiopeia/joomla.asset.json",
"version": "03.10.11",
"version": "03.10.12",
"brief": "Joomla asset registry for MokoCassiopeia"
}
},

View File

@@ -39,13 +39,13 @@
</server>
</updateservers>
<name>MokoCassiopeia</name>
<version>03.10.11</version>
<version>03.10.12</version>
<scriptfile>script.php</scriptfile>
<creationDate>2026-04-15</creationDate>
<creationDate>2026-04-19</creationDate>
<author>Jonathan Miller || Moko Consulting</author>
<authorEmail>hello@mokoconsulting.tech</authorEmail>
<copyright>(C)GNU General Public License Version 3 - 2026 Moko Consulting</copyright>
<description><![CDATA[<p><img src="https://img.shields.io/badge/version-03.10.11-blue.svg?logo=v&amp;logoColor=white" alt="Version 03.10.11" /> <img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&amp;logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&amp;logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&amp;logoColor=white" alt="PHP" /></p> <h3>MokoCassiopeia Template Description</h3> <p> <strong>MokoCassiopeia</strong> continues Joomla's tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokocassiopeia/templates/light.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/light.custom.css</code>, or <code>templates/mokocassiopeia/templates/dark.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoCassiopeia → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS &amp; JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokocassiopeia/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokocassiopeia/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href="https://www.joomla.org" target="_blank" rel="noopener">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href="https://afeld.github.io/bootstrap-toc/" target="_blank" rel="noopener">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>]]></description>
<description><![CDATA[<p><img src="https://img.shields.io/badge/version-03.10.12-blue.svg?logo=v&amp;logoColor=white" alt="Version 03.10.12" /> <img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&amp;logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&amp;logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&amp;logoColor=white" alt="PHP" /></p> <h3>MokoCassiopeia Template Description</h3> <p> <strong>MokoCassiopeia</strong> continues Joomla's tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokocassiopeia/templates/light.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/light.custom.css</code>, or <code>templates/mokocassiopeia/templates/dark.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoCassiopeia → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS &amp; JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokocassiopeia/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokocassiopeia/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href="https://www.joomla.org" target="_blank" rel="noopener">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href="https://afeld.github.io/bootstrap-toc/" target="_blank" rel="noopener">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>]]></description>
<inheritable>1</inheritable>
<files>
<filename>component.php</filename>

View File

@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
SPDX-License-Identifier: GPL-3.0-or-later
VERSION: 03.10.11
VERSION: 03.10.12
-->
<updates>
@@ -13,11 +13,11 @@
<element>mokocassiopeia</element>
<type>template</type>
<client>site</client>
<version>03.10.11</version>
<version>03.10.12</version>
<creationDate>2026-04-19</creationDate>
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</infourl>
<downloads>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.10.11-dev.zip</downloadurl>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.10.12-dev.zip</downloadurl>
</downloads>
<sha256>1e34ddbe6a28114100fcb1bb995b9a7b4ccbec8468a7a1f73022440f4ac3ddfc</sha256>
<tags><tag>development</tag></tags>
@@ -34,11 +34,11 @@
<element>mokocassiopeia</element>
<type>template</type>
<client>site</client>
<version>03.10.11</version>
<version>03.10.12</version>
<creationDate>2026-04-19</creationDate>
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</infourl>
<downloads>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
</downloads>
<sha256>fac226ed62e79a01dd01b6184e832a4e8c927c7b7a5ac18cc645332cd87af33d</sha256>
<tags><tag>alpha</tag></tags>
@@ -55,11 +55,11 @@
<element>mokocassiopeia</element>
<type>template</type>
<client>site</client>
<version>03.10.11</version>
<version>03.10.12</version>
<creationDate>2026-04-19</creationDate>
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</infourl>
<downloads>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
</downloads>
<sha256>fac226ed62e79a01dd01b6184e832a4e8c927c7b7a5ac18cc645332cd87af33d</sha256>
<tags><tag>beta</tag></tags>
@@ -76,12 +76,12 @@
<element>mokocassiopeia</element>
<type>template</type>
<client>site</client>
<version>03.10.11</version>
<version>03.10.12</version>
<creationDate>2026-04-19</creationDate>
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</infourl>
<downloads>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
</downloads>
<sha256>fac226ed62e79a01dd01b6184e832a4e8c927c7b7a5ac18cc645332cd87af33d</sha256>
<tags><tag>rc</tag></tags>
@@ -98,12 +98,12 @@
<element>mokocassiopeia</element>
<type>template</type>
<client>site</client>
<version>03.10.11</version>
<version>03.10.12</version>
<creationDate>2026-04-19</creationDate>
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03</infourl>
<downloads>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.11.zip</downloadurl>
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.12.zip</downloadurl>
</downloads>
<sha256>fac226ed62e79a01dd01b6184e832a4e8c927c7b7a5ac18cc645332cd87af33d</sha256>
<tags><tag>stable</tag></tags>