diff --git a/.mokogitea/workflows/auto-release.yml b/.mokogitea/workflows/auto-release.yml index 2325032..44a2d64 100644 --- a/.mokogitea/workflows/auto-release.yml +++ b/.mokogitea/workflows/auto-release.yml @@ -102,13 +102,14 @@ jobs: run: | php /tmp/moko-platform-api/cli/release_publish.php \ --path . --stability rc --bump minor --branch rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --skip-update-stream - name: Summary if: always() run: | echo "## Promoted to Release Candidate" >> $GITHUB_STEP_SUMMARY - echo "Branch renamed to rc, minor bump, RC + lesser stream releases built, updates.xml synced" >> $GITHUB_STEP_SUMMARY + echo "Branch renamed to rc, minor bump, RC release built (updates.xml managed by Gitea Pages)" >> $GITHUB_STEP_SUMMARY # ── Merged PR → Build & Release (or promote RC to stable) ──────────────────── release: @@ -167,7 +168,8 @@ jobs: run: | php /tmp/moko-platform-api/cli/release_publish.php \ --path . --stability stable --bump minor --branch main \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --skip-update-stream # -- STEP 9: Mirror to GitHub (stable only) -------------------------------- - name: "Step 9: Mirror release to GitHub" diff --git a/CLAUDE.md b/CLAUDE.md index 0aa7ae7..e38f998 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -41,7 +41,8 @@ This is a Joomla **package** extension (`pkg_mokojoomhero`) containing two sub-e - Works independently — no plugin dependency required ### plg_system_mokojoomhero (System Plugin) -- Placeholder for future system-level features +- License check — free tier (no key required), pro tier warns if download key missing +- Controlled by `LICENSE_TYPE` constant ('free' or 'pro') in the Extension class - Auto-enabled on package install via `pkg_script.php` - Namespace: `Joomla\Plugin\System\MokoJoomHero` diff --git a/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini b/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini index e8e1ade..ceeaa13 100644 --- a/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini +++ b/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini @@ -2,4 +2,4 @@ ; SPDX-License-Identifier: GPL-3.0-or-later PLG_SYSTEM_MOKOJOOMHERO="System - MokoJoomHero" -PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero" +PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero — license and update management" diff --git a/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini b/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini index e8e1ade..ceeaa13 100644 --- a/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini +++ b/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini @@ -2,4 +2,4 @@ ; SPDX-License-Identifier: GPL-3.0-or-later PLG_SYSTEM_MOKOJOOMHERO="System - MokoJoomHero" -PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero" +PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero — license and update management" diff --git a/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php b/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php index 76adee4..8990c1b 100644 --- a/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php +++ b/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php @@ -13,13 +13,88 @@ namespace Joomla\Plugin\System\MokoJoomHero\Extension; defined('_JEXEC') or die; +use Joomla\CMS\Factory; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Event\SubscriberInterface; class MokoJoomHero extends CMSPlugin implements SubscriberInterface { + /** + * License type: 'free' requires no key, 'pro' requires a valid download key. + */ + private const LICENSE_TYPE = 'free'; + public static function getSubscribedEvents(): array { - return []; + return [ + 'onAfterRoute' => 'onAfterRoute', + ]; + } + + public function onAfterRoute(): void + { + $app = $this->getApplication(); + + if ($app->isClient('administrator')) { + $this->checkLicense(); + } + } + + /** + * Check license status once per session. Free tier requires no key. + * Pro tier warns if no valid download key is configured. + */ + private function checkLicense(): void + { + if (self::LICENSE_TYPE === 'free') { + return; + } + + $session = Factory::getSession(); + + if ($session->get('mokojoomhero.license_checked', false)) { + return; + } + + $user = Factory::getUser(); + + if ($user->guest || !$user->authorise('core.manage')) { + return; + } + + $session->set('mokojoomhero.license_checked', true); + + try { + $db = Factory::getDbo(); + + $query = $db->getQuery(true) + ->select($db->quoteName('extra_query')) + ->from($db->quoteName('#__update_sites')) + ->where($db->quoteName('name') . ' = ' . $db->quote('MokoJoomHero Updates')) + ->setLimit(1); + $db->setQuery($query); + $extraQuery = (string) $db->loadResult(); + + if (!empty($extraQuery)) { + parse_str($extraQuery, $parsed); + + if (!empty($parsed['dlid']) && preg_match('/^MOKO-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$/', $parsed['dlid'])) { + return; + } + } + + $this->getApplication()->enqueueMessage( + 'MokoJoomHero — Download Key Required — ' + . 'No download key is configured. Updates may not be available until a valid key is entered. ' + . 'Go to System → Update Sites ' + . 'and enter your download key (MOKO-XXXX-XXXX-XXXX-XXXX) for the MokoJoomHero update site.', + 'warning' + ); + } catch (\RuntimeException $e) { + $this->getApplication()->getLogger()->warning( + 'MokoJoomHero license check failed: ' . $e->getMessage(), + ['exception' => $e] + ); + } } } diff --git a/updates.xml b/updates.xml index 8e97f05..17001d0 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ @@ -87,34 +87,34 @@ site 01.08.00-rc 2026-06-04 - https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/tag/release-candidate + https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/tag/release-candidate - https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/download/release-candidate/pkg_mokojoomhero-01.08.00-rc.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/download/release-candidate/pkg_mokojoomhero-01.08.00-rc.zip 2667e2c0c9b610288232dbb2d9d9ce7aba0c58174b32eb023a4349905cee635a rc https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/raw/branch/main/CHANGELOG.md Moko Consulting https://mokoconsulting.tech - + - Module - MokoJoomHero - Module - MokoJoomHero stable build. - mod_mokojoomhero - module + Package - MokoJoomHero + Package - MokoJoomHero stable build. + pkg_mokojoomhero + package site - 01.07.00 - 2026-05-30 - https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/tag/stable + 01.08.00 + 2026-06-04 + https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/tag/stable - https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/download/stable/mod_mokojoomhero-01.07.00.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/releases/download/stable/pkg_mokojoomhero-01.08.00.zip - 56ae99ad18e12ee52c60298adef5983aef788fe867d3e3a36957b314ad7eb386 + 111fef438f7c30a74019124134ed461e2b92f9db992c45eef7d5f63091a5e0d7 stable https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/raw/branch/main/CHANGELOG.md Moko Consulting https://mokoconsulting.tech - +