From 69362e0acad16cc7d1d394e658c40a15bc72f674 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Thu, 4 Jun 2026 15:38:16 +0000 Subject: [PATCH 1/4] chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] --- .mokogitea/workflows/pr-check.yml | 92 +++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogitea/workflows/pr-check.yml index 473eeb2..3dd7540 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogitea/workflows/pr-check.yml @@ -147,6 +147,98 @@ jobs: echo "PHP lint: ${ERRORS} error(s)" [ "$ERRORS" -eq 0 ] || { echo "::error::PHP syntax errors found"; exit 1; } + - name: Joomla JEXEC guard check + if: steps.platform.outputs.platform == 'joomla' + run: | + ERRORS=0 + while IFS= read -r -d '' file; do + # Skip vendor, node_modules, and index.html stub files + case "$file" in ./vendor/*|./node_modules/*) continue ;; esac + # Check first 10 lines for JEXEC or JPATH guard + if ! head -20 "$file" | grep -qE "defined\s*\(\s*['\"](_JEXEC|JPATH_BASE|\\\\JPATH_PLATFORM)['\"]"; then + echo "::error file=${file}::Missing JEXEC guard: ${file}" + ERRORS=$((ERRORS + 1)) + fi + done < <(find . -name "*.php" -path "*/src/*" -not -path "./.git/*" -not -path "./vendor/*" -print0) + if [ "$ERRORS" -gt 0 ]; then + echo "::error::${ERRORS} PHP file(s) missing defined('_JEXEC') or die guard" + echo "## JEXEC Guard Check: Failed" >> $GITHUB_STEP_SUMMARY + echo "${ERRORS} file(s) in src/ are missing the Joomla execution guard." >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "JEXEC guard: OK" + + - name: Joomla directory listing protection + if: steps.platform.outputs.platform == 'joomla' + run: | + MISSING=0 + SOURCE_DIR="src" + [ ! -d "$SOURCE_DIR" ] && exit 0 + while IFS= read -r dir; do + if [ ! -f "${dir}/index.html" ]; then + echo "::warning::Missing index.html in ${dir} (directory listing protection)" + MISSING=$((MISSING + 1)) + fi + done < <(find "$SOURCE_DIR" -type d -not -path "./.git/*" -not -path "*/vendor/*" -not -path "*/node_modules/*") + if [ "$MISSING" -gt 0 ]; then + echo "## Directory Protection" >> $GITHUB_STEP_SUMMARY + echo "${MISSING} director(ies) missing index.html" >> $GITHUB_STEP_SUMMARY + fi + echo "Directory protection: ${MISSING} missing (advisory)" + + - name: Joomla script file and asset checks + if: steps.platform.outputs.platform == 'joomla' + run: | + ERRORS=0 + MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) + [ -z "$MANIFEST" ] && exit 0 + MANIFEST_DIR=$(dirname "$MANIFEST") + + # Check scriptfile exists if declared + SCRIPTFILE=$(sed -n 's/.*\([^<]*\)<\/scriptfile>.*/\1/p' "$MANIFEST" 2>/dev/null) + if [ -n "$SCRIPTFILE" ]; then + if [ ! -f "${MANIFEST_DIR}/${SCRIPTFILE}" ]; then + echo "::error::Manifest declares ${SCRIPTFILE} but file not found at ${MANIFEST_DIR}/${SCRIPTFILE}" + ERRORS=$((ERRORS + 1)) + else + echo "Script file: ${MANIFEST_DIR}/${SCRIPTFILE} (OK)" + fi + fi + + # Require joomla.asset.json and validate it + ASSET_JSON=$(find "$MANIFEST_DIR" -name "joomla.asset.json" -not -path "./.git/*" 2>/dev/null | head -1) + if [ -z "$ASSET_JSON" ]; then + echo "::error::joomla.asset.json not found — Joomla asset system is required" + ERRORS=$((ERRORS + 1)) + else + if command -v php &> /dev/null; then + php -r "json_decode(file_get_contents('$ASSET_JSON')); if(json_last_error()!==JSON_ERROR_NONE){echo json_last_error_msg();exit(1);}" 2>&1 || { + echo "::error::joomla.asset.json is not valid JSON" + ERRORS=$((ERRORS + 1)) + } + fi + echo "joomla.asset.json: valid" + fi + + # Validate all XML files in src/ are well-formed + XML_ERRORS=0 + if command -v php &> /dev/null; then + while IFS= read -r -d '' xmlfile; do + if ! php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$xmlfile'); if(!\$x){foreach(libxml_get_errors() as \$e) echo trim(\$e->message) . ' in $xmlfile'; exit(1);}" 2>&1; then + XML_ERRORS=$((XML_ERRORS + 1)) + fi + done < <(find "$MANIFEST_DIR" -name "*.xml" -not -path "./.git/*" -print0) + fi + if [ "$XML_ERRORS" -gt 0 ]; then + echo "::error::${XML_ERRORS} XML file(s) are malformed" + ERRORS=$((ERRORS + 1)) + else + echo "XML well-formedness: OK" + fi + + [ "$ERRORS" -gt 0 ] && exit 1 + echo "Joomla asset checks: OK" + - name: Validate platform manifest run: | PLATFORM="${{ steps.platform.outputs.platform }}" -- 2.52.0 From ce498da605dcf1ea7e375bc20054989244c56e86 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 10:47:26 -0500 Subject: [PATCH 2/4] chore: update creationDate to 2026-06-04 in all manifests Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/mod_mokojoomhero/mod_mokojoomhero.xml | 2 +- src/packages/plg_system_mokojoomhero/mokojoomhero.xml | 2 +- src/pkg_mokojoomhero.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml b/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml index 6758c73..b8ce332 100644 --- a/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml +++ b/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml @@ -16,7 +16,7 @@ --> Module - MokoJoomHero - 2026-05 + 2026-06-04 Moko Consulting hello@mokoconsulting.tech https://mokoconsulting.tech diff --git a/src/packages/plg_system_mokojoomhero/mokojoomhero.xml b/src/packages/plg_system_mokojoomhero/mokojoomhero.xml index 374bbb1..e75f78a 100644 --- a/src/packages/plg_system_mokojoomhero/mokojoomhero.xml +++ b/src/packages/plg_system_mokojoomhero/mokojoomhero.xml @@ -9,7 +9,7 @@ PLG_SYSTEM_MOKOJOOMHERO 01.10.00 - 2026-06-02 + 2026-06-04 Moko Consulting hello@mokoconsulting.tech https://mokoconsulting.tech diff --git a/src/pkg_mokojoomhero.xml b/src/pkg_mokojoomhero.xml index 29896d9..cad5f4f 100644 --- a/src/pkg_mokojoomhero.xml +++ b/src/pkg_mokojoomhero.xml @@ -9,7 +9,7 @@ Package - MokoJoomHero mokojoomhero 01.10.00 - 2026-06-02 + 2026-06-04 Moko Consulting hello@mokoconsulting.tech https://mokoconsulting.tech -- 2.52.0 From a6e93027308115da49cd0c850e3d8904b42864d9 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Thu, 4 Jun 2026 15:56:08 +0000 Subject: [PATCH 3/4] chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] --- .mokogitea/workflows/pr-check.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogitea/workflows/pr-check.yml index 3dd7540..4d78d7a 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogitea/workflows/pr-check.yml @@ -256,6 +256,13 @@ jobs: for ELEMENT in name version description; do grep -q "<${ELEMENT}>" "$MANIFEST" || { echo "::error::Missing <${ELEMENT}> in manifest"; exit 1; } done + # Block legacy raw/branch update server URLs on MokoGitea + RAW_URLS=$(grep -n 'raw/branch' "$MANIFEST" | grep -i 'mokoconsulting\|mokogitea\|git\.mokoconsulting\.tech' || true) + if [ -n "$RAW_URLS" ]; then + echo "::error::Manifest contains legacy raw/branch update server URL on MokoGitea. Use the Gitea Pages URL instead (e.g. /{REPO}/updates.xml not /{REPO}/raw/branch/main/updates.xml)" + echo "$RAW_URLS" + exit 1 + fi echo "Joomla manifest valid" ;; dolibarr) -- 2.52.0 From ea9ea5c3a7be275bf393e0d833765905d92a4c45 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 11:07:35 -0500 Subject: [PATCH 4/4] refactor: restructure from package back to standalone module Remove plg_system_mokojoomhero and package wrapper. Move module files from src/packages/mod_mokojoomhero/ back to src/. Update Makefile build target for module ZIP. Update CLAUDE.md and file PATH headers. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 26 ++--- Makefile | 30 ++---- src/{packages => language/en-GB}/index.html | 0 .../language/en-GB/mod_mokojoomhero.ini | 0 .../language/en-GB/mod_mokojoomhero.sys.ini | 0 .../en-US}/index.html | 0 .../language/en-US/mod_mokojoomhero.ini | 0 .../language/en-US/mod_mokojoomhero.sys.ini | 0 .../language/en-GB => language}/index.html | 0 .../language/en-US => media/css}/index.html | 0 .../media/css/mod_mokojoomhero.css | 2 +- .../language => media}/index.html | 0 .../media/joomla.asset.json | 0 .../media/css => media/js}/index.html | 0 .../media/js/mod_mokojoomhero.js | 2 +- .../mod_mokojoomhero.php | 0 .../mod_mokojoomhero.xml | 2 +- .../mod_mokojoomhero/media/index.html | 1 - .../mod_mokojoomhero/media/js/index.html | 1 - .../plg_system_mokojoomhero/index.html | 1 - .../language/en-GB/index.html | 1 - .../en-GB/plg_system_mokojoomhero.ini | 2 - .../en-GB/plg_system_mokojoomhero.sys.ini | 5 - .../language/en-US/index.html | 1 - .../en-US/plg_system_mokojoomhero.ini | 2 - .../en-US/plg_system_mokojoomhero.sys.ini | 5 - .../language/index.html | 1 - .../plg_system_mokojoomhero/mokojoomhero.php | 12 --- .../plg_system_mokojoomhero/mokojoomhero.xml | 34 ------ .../services/index.html | 1 - .../services/provider.php | 39 ------- .../src/Extension/MokoJoomHero.php | 100 ------------------ .../src/Extension/index.html | 1 - .../plg_system_mokojoomhero/src/index.html | 1 - src/pkg_mokojoomhero.xml | 30 ------ src/pkg_script.php | 59 ----------- .../mod_mokojoomhero => }/script.php | 0 .../mod_mokojoomhero => }/tmpl/default.php | 0 .../mod_mokojoomhero => }/tmpl/index.html | 0 39 files changed, 18 insertions(+), 341 deletions(-) rename src/{packages => language/en-GB}/index.html (100%) rename src/{packages/mod_mokojoomhero => }/language/en-GB/mod_mokojoomhero.ini (100%) rename src/{packages/mod_mokojoomhero => }/language/en-GB/mod_mokojoomhero.sys.ini (100%) rename src/{packages/mod_mokojoomhero => language/en-US}/index.html (100%) rename src/{packages/mod_mokojoomhero => }/language/en-US/mod_mokojoomhero.ini (100%) rename src/{packages/mod_mokojoomhero => }/language/en-US/mod_mokojoomhero.sys.ini (100%) rename src/{packages/mod_mokojoomhero/language/en-GB => language}/index.html (100%) rename src/{packages/mod_mokojoomhero/language/en-US => media/css}/index.html (100%) rename src/{packages/mod_mokojoomhero => }/media/css/mod_mokojoomhero.css (99%) rename src/{packages/mod_mokojoomhero/language => media}/index.html (100%) rename src/{packages/mod_mokojoomhero => }/media/joomla.asset.json (100%) rename src/{packages/mod_mokojoomhero/media/css => media/js}/index.html (100%) rename src/{packages/mod_mokojoomhero => }/media/js/mod_mokojoomhero.js (99%) rename src/{packages/mod_mokojoomhero => }/mod_mokojoomhero.php (100%) rename src/{packages/mod_mokojoomhero => }/mod_mokojoomhero.xml (99%) delete mode 100644 src/packages/mod_mokojoomhero/media/index.html delete mode 100644 src/packages/mod_mokojoomhero/media/js/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-GB/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.ini delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-US/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.ini delete mode 100644 src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini delete mode 100644 src/packages/plg_system_mokojoomhero/language/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/mokojoomhero.php delete mode 100644 src/packages/plg_system_mokojoomhero/mokojoomhero.xml delete mode 100644 src/packages/plg_system_mokojoomhero/services/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/services/provider.php delete mode 100644 src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php delete mode 100644 src/packages/plg_system_mokojoomhero/src/Extension/index.html delete mode 100644 src/packages/plg_system_mokojoomhero/src/index.html delete mode 100644 src/pkg_mokojoomhero.xml delete mode 100644 src/pkg_script.php rename src/{packages/mod_mokojoomhero => }/script.php (100%) rename src/{packages/mod_mokojoomhero => }/tmpl/default.php (100%) rename src/{packages/mod_mokojoomhero => }/tmpl/index.html (100%) diff --git a/CLAUDE.md b/CLAUDE.md index e38f998..4a20818 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,26 +32,21 @@ composer install # Install PHP dependencies ## Architecture -This is a Joomla **package** extension (`pkg_mokojoomhero`) containing two sub-extensions: +This is a Joomla **site module** (`mod_mokojoomhero`). -### mod_mokojoomhero (Site Module) - Random hero image slideshow or background video with content overlay - Supports image folders, YouTube, Vimeo, local video, solid colour, gradient - Configurable overlay, text alignment, card animation, parallax, content animations -- Works independently — no plugin dependency required - -### plg_system_mokojoomhero (System Plugin) -- 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` +- A/B testing with weighted variations, scheduling with start/end datetime +- Article content source, per-slide unique content via subform ### Key files -- `src/pkg_mokojoomhero.xml` — package manifest -- `src/pkg_script.php` — auto-enables system plugin on install -- `src/packages/mod_mokojoomhero/` — hero module source -- `src/packages/plg_system_mokojoomhero/` — system plugin source -- `updates.xml` — Joomla update server (includes legacy module entries for migration) +- `src/mod_mokojoomhero.xml` — module manifest +- `src/mod_mokojoomhero.php` — module entry point +- `src/tmpl/default.php` — template +- `src/media/` — CSS, JS, and web asset registry +- `src/language/` — en-GB and en-US translations +- `src/script.php` — install script (creates default image folder) ## Rules @@ -66,7 +61,4 @@ This is a Joomla **package** extension (`pkg_mokojoomhero`) containing two sub-e ## Coding Standards - PHP 8.1+ minimum -- Joomla 5/6 DI container pattern: `services/provider.php` → Extension class -- Legacy stub `.php` file required for plugin loader but empty -- `SubscriberInterface` for event subscription (not `on*` method naming) - SPDX license headers on all PHP files diff --git a/Makefile b/Makefile index 5819862..3649143 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ # Extension Configuration EXTENSION_NAME := mokojoomhero -EXTENSION_TYPE := package +EXTENSION_TYPE := module # Options: module, plugin, component, package, template EXTENSION_VERSION := 1.0.0 @@ -156,29 +156,11 @@ clean: ## Clean build artifacts .PHONY: build build: clean ## Build extension package - @echo "$(COLOR_BLUE)Building Joomla package extension...$(COLOR_RESET)" - @mkdir -p $(DIST_DIR) $(BUILD_DIR)/packages - - @# --- Build each sub-extension as a separate ZIP --- - @for EXT_DIR in $(SRC_DIR)/packages/*/; do \ - EXT_NAME=$$(basename "$$EXT_DIR"); \ - [ "$$EXT_NAME" = "index.html" ] && continue; \ - echo " Packaging $$EXT_NAME..."; \ - cd "$$EXT_DIR" && $(ZIP) -r "$(CURDIR)/$(BUILD_DIR)/packages/$${EXT_NAME}.zip" . \ - -x "*.git*" -x "*/index.html" 2>/dev/null; \ - cd "$(CURDIR)"; \ - done - - @# --- Build the outer package ZIP --- - @echo " Assembling pkg_$(EXTENSION_NAME)..." - @cp $(SRC_DIR)/pkg_mokojoomhero.xml $(BUILD_DIR)/pkg_mokojoomhero.xml - @cp $(SRC_DIR)/pkg_script.php $(BUILD_DIR)/pkg_script.php - @cd $(BUILD_DIR) && $(ZIP) -r "$(CURDIR)/$(DIST_DIR)/pkg_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" \ - pkg_mokojoomhero.xml pkg_script.php packages/ - - @echo "$(COLOR_GREEN)✓ Package created: $(DIST_DIR)/pkg_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)" - @echo " Contents:" - @unzip -l "$(DIST_DIR)/pkg_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" | tail -n +4 | head -20 + @echo "$(COLOR_BLUE)Building Joomla module extension...$(COLOR_RESET)" + @mkdir -p $(DIST_DIR) + @cd $(SRC_DIR) && $(ZIP) -r "$(CURDIR)/$(DIST_DIR)/mod_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" . \ + -x "*.git*" -x "*/index.html" 2>/dev/null + @echo "$(COLOR_GREEN)✓ Module created: $(DIST_DIR)/mod_$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)" .PHONY: package package: build ## Alias for build diff --git a/src/packages/index.html b/src/language/en-GB/index.html similarity index 100% rename from src/packages/index.html rename to src/language/en-GB/index.html diff --git a/src/packages/mod_mokojoomhero/language/en-GB/mod_mokojoomhero.ini b/src/language/en-GB/mod_mokojoomhero.ini similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-GB/mod_mokojoomhero.ini rename to src/language/en-GB/mod_mokojoomhero.ini diff --git a/src/packages/mod_mokojoomhero/language/en-GB/mod_mokojoomhero.sys.ini b/src/language/en-GB/mod_mokojoomhero.sys.ini similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-GB/mod_mokojoomhero.sys.ini rename to src/language/en-GB/mod_mokojoomhero.sys.ini diff --git a/src/packages/mod_mokojoomhero/index.html b/src/language/en-US/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/index.html rename to src/language/en-US/index.html diff --git a/src/packages/mod_mokojoomhero/language/en-US/mod_mokojoomhero.ini b/src/language/en-US/mod_mokojoomhero.ini similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-US/mod_mokojoomhero.ini rename to src/language/en-US/mod_mokojoomhero.ini diff --git a/src/packages/mod_mokojoomhero/language/en-US/mod_mokojoomhero.sys.ini b/src/language/en-US/mod_mokojoomhero.sys.ini similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-US/mod_mokojoomhero.sys.ini rename to src/language/en-US/mod_mokojoomhero.sys.ini diff --git a/src/packages/mod_mokojoomhero/language/en-GB/index.html b/src/language/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-GB/index.html rename to src/language/index.html diff --git a/src/packages/mod_mokojoomhero/language/en-US/index.html b/src/media/css/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/language/en-US/index.html rename to src/media/css/index.html diff --git a/src/packages/mod_mokojoomhero/media/css/mod_mokojoomhero.css b/src/media/css/mod_mokojoomhero.css similarity index 99% rename from src/packages/mod_mokojoomhero/media/css/mod_mokojoomhero.css rename to src/media/css/mod_mokojoomhero.css index fd357f3..7ce860f 100644 --- a/src/packages/mod_mokojoomhero/media/css/mod_mokojoomhero.css +++ b/src/media/css/mod_mokojoomhero.css @@ -6,7 +6,7 @@ * DEFGROUP: MokoJoomHero.Module.Assets * INGROUP: MokoJoomHero.Module * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero - * PATH: /src/packages/mod_mokojoomhero/media/css/mod_mokojoomhero.css + * PATH: /src/media/css/mod_mokojoomhero.css * VERSION: 01.10.00 * BRIEF: Hero module stylesheet — slideshow, video, colour/gradient, overlay, card, mute toggle, responsive */ diff --git a/src/packages/mod_mokojoomhero/language/index.html b/src/media/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/language/index.html rename to src/media/index.html diff --git a/src/packages/mod_mokojoomhero/media/joomla.asset.json b/src/media/joomla.asset.json similarity index 100% rename from src/packages/mod_mokojoomhero/media/joomla.asset.json rename to src/media/joomla.asset.json diff --git a/src/packages/mod_mokojoomhero/media/css/index.html b/src/media/js/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/media/css/index.html rename to src/media/js/index.html diff --git a/src/packages/mod_mokojoomhero/media/js/mod_mokojoomhero.js b/src/media/js/mod_mokojoomhero.js similarity index 99% rename from src/packages/mod_mokojoomhero/media/js/mod_mokojoomhero.js rename to src/media/js/mod_mokojoomhero.js index 5f68e5e..528aee9 100644 --- a/src/packages/mod_mokojoomhero/media/js/mod_mokojoomhero.js +++ b/src/media/js/mod_mokojoomhero.js @@ -7,7 +7,7 @@ * DEFGROUP: MokoJoomHero.Module.Assets * INGROUP: MokoJoomHero.Module * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero - * PATH: /src/packages/mod_mokojoomhero/media/js/mod_mokojoomhero.js + * PATH: /src/media/js/mod_mokojoomhero.js * VERSION: 01.10.00 * BRIEF: Hero module JavaScript — slideshow crossfade, video viewport control, mute toggle */ diff --git a/src/packages/mod_mokojoomhero/mod_mokojoomhero.php b/src/mod_mokojoomhero.php similarity index 100% rename from src/packages/mod_mokojoomhero/mod_mokojoomhero.php rename to src/mod_mokojoomhero.php diff --git a/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml b/src/mod_mokojoomhero.xml similarity index 99% rename from src/packages/mod_mokojoomhero/mod_mokojoomhero.xml rename to src/mod_mokojoomhero.xml index b8ce332..f1de610 100644 --- a/src/packages/mod_mokojoomhero/mod_mokojoomhero.xml +++ b/src/mod_mokojoomhero.xml @@ -10,7 +10,7 @@ DEFGROUP: MokoJoomHero.Module INGROUP: MokoJoomHero REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero - PATH: /src/packages/mod_mokojoomhero/mod_mokojoomhero.xml + PATH: /src/mod_mokojoomhero.xml VERSION: 01.00.20 BRIEF: Joomla module manifest — random hero image with content overlay --> diff --git a/src/packages/mod_mokojoomhero/media/index.html b/src/packages/mod_mokojoomhero/media/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/mod_mokojoomhero/media/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/mod_mokojoomhero/media/js/index.html b/src/packages/mod_mokojoomhero/media/js/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/mod_mokojoomhero/media/js/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/index.html b/src/packages/plg_system_mokojoomhero/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/language/en-GB/index.html b/src/packages/plg_system_mokojoomhero/language/en-GB/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-GB/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.ini b/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.ini deleted file mode 100644 index d31b03f..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.ini +++ /dev/null @@ -1,2 +0,0 @@ -; Copyright (C) 2026 Moko Consulting -; SPDX-License-Identifier: GPL-3.0-or-later 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 deleted file mode 100644 index ceeaa13..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-GB/plg_system_mokojoomhero.sys.ini +++ /dev/null @@ -1,5 +0,0 @@ -; Copyright (C) 2026 Moko Consulting -; SPDX-License-Identifier: GPL-3.0-or-later - -PLG_SYSTEM_MOKOJOOMHERO="System - MokoJoomHero" -PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero — license and update management" diff --git a/src/packages/plg_system_mokojoomhero/language/en-US/index.html b/src/packages/plg_system_mokojoomhero/language/en-US/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-US/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.ini b/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.ini deleted file mode 100644 index d31b03f..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.ini +++ /dev/null @@ -1,2 +0,0 @@ -; Copyright (C) 2026 Moko Consulting -; SPDX-License-Identifier: GPL-3.0-or-later 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 deleted file mode 100644 index ceeaa13..0000000 --- a/src/packages/plg_system_mokojoomhero/language/en-US/plg_system_mokojoomhero.sys.ini +++ /dev/null @@ -1,5 +0,0 @@ -; Copyright (C) 2026 Moko Consulting -; SPDX-License-Identifier: GPL-3.0-or-later - -PLG_SYSTEM_MOKOJOOMHERO="System - MokoJoomHero" -PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION="System plugin for MokoJoomHero — license and update management" diff --git a/src/packages/plg_system_mokojoomhero/language/index.html b/src/packages/plg_system_mokojoomhero/language/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/language/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/mokojoomhero.php b/src/packages/plg_system_mokojoomhero/mokojoomhero.php deleted file mode 100644 index 70bada5..0000000 --- a/src/packages/plg_system_mokojoomhero/mokojoomhero.php +++ /dev/null @@ -1,12 +0,0 @@ - - * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. - * @license GNU General Public License version 3 or later; see LICENSE - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -defined('_JEXEC') or die; diff --git a/src/packages/plg_system_mokojoomhero/mokojoomhero.xml b/src/packages/plg_system_mokojoomhero/mokojoomhero.xml deleted file mode 100644 index e75f78a..0000000 --- a/src/packages/plg_system_mokojoomhero/mokojoomhero.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - PLG_SYSTEM_MOKOJOOMHERO - 01.10.00 - 2026-06-04 - Moko Consulting - hello@mokoconsulting.tech - https://mokoconsulting.tech - Copyright (C) 2026 Moko Consulting. All rights reserved. - GPL-3.0-or-later - PLG_SYSTEM_MOKOJOOMHERO_DESCRIPTION - - Joomla\Plugin\System\MokoJoomHero - - - mokojoomhero.php - services - src - - - - en-GB/plg_system_mokojoomhero.ini - en-GB/plg_system_mokojoomhero.sys.ini - en-US/plg_system_mokojoomhero.ini - en-US/plg_system_mokojoomhero.sys.ini - - diff --git a/src/packages/plg_system_mokojoomhero/services/index.html b/src/packages/plg_system_mokojoomhero/services/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/services/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/services/provider.php b/src/packages/plg_system_mokojoomhero/services/provider.php deleted file mode 100644 index 8c861e2..0000000 --- a/src/packages/plg_system_mokojoomhero/services/provider.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. - * @license GNU General Public License version 3 or later; see LICENSE - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Extension\PluginInterface; -use Joomla\CMS\Factory; -use Joomla\CMS\Plugin\PluginHelper; -use Joomla\DI\Container; -use Joomla\DI\ServiceProviderInterface; -use Joomla\Event\DispatcherInterface; -use Joomla\Plugin\System\MokoJoomHero\Extension\MokoJoomHero; - -return new class implements ServiceProviderInterface { - public function register(Container $container): void - { - $container->set( - PluginInterface::class, - function (Container $container) { - $plugin = new MokoJoomHero( - $container->get(DispatcherInterface::class), - (array) PluginHelper::getPlugin('system', 'mokojoomhero') - ); - - $plugin->setApplication(Factory::getApplication()); - - return $plugin; - } - ); - } -}; diff --git a/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php b/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php deleted file mode 100644 index 8990c1b..0000000 --- a/src/packages/plg_system_mokojoomhero/src/Extension/MokoJoomHero.php +++ /dev/null @@ -1,100 +0,0 @@ - - * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. - * @license GNU General Public License version 3 or later; see LICENSE - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -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 [ - '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/src/packages/plg_system_mokojoomhero/src/Extension/index.html b/src/packages/plg_system_mokojoomhero/src/Extension/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/src/Extension/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/packages/plg_system_mokojoomhero/src/index.html b/src/packages/plg_system_mokojoomhero/src/index.html deleted file mode 100644 index 94906bc..0000000 --- a/src/packages/plg_system_mokojoomhero/src/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/pkg_mokojoomhero.xml b/src/pkg_mokojoomhero.xml deleted file mode 100644 index cad5f4f..0000000 --- a/src/pkg_mokojoomhero.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - Package - MokoJoomHero - mokojoomhero - 01.10.00 - 2026-06-04 - Moko Consulting - hello@mokoconsulting.tech - https://mokoconsulting.tech - Copyright (C) 2026 Moko Consulting. All rights reserved. - GPL-3.0-or-later - Random hero image slideshow or background video with content overlay. Includes the hero module and system plugin. By Moko Consulting. - - pkg_script.php - - - mod_mokojoomhero.zip - plg_system_mokojoomhero.zip - - - - https://git.mokoconsulting.tech/MokoConsulting/MokoJoomHero/updates.xml - - diff --git a/src/pkg_script.php b/src/pkg_script.php deleted file mode 100644 index 5976c07..0000000 --- a/src/pkg_script.php +++ /dev/null @@ -1,59 +0,0 @@ - - * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. - * @license GNU General Public License version 3 or later; see LICENSE - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Factory; -use Joomla\CMS\Installer\InstallerAdapter; - -class Pkg_MokoJoomHeroInstallerScript -{ - /** - * Called after install/update — only enables the system plugin on fresh install. - * - * @param string $type Action type - * @param InstallerAdapter $parent Installer adapter - * - * @return void - */ - public function postflight(string $type, InstallerAdapter $parent): void - { - if ($type === 'install') { - try { - $db = Factory::getDbo(); - - // Enable the system plugin automatically on fresh install - $query = $db->getQuery(true) - ->update($db->quoteName('#__extensions')) - ->set($db->quoteName('enabled') . ' = 1') - ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) - ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) - ->where($db->quoteName('element') . ' = ' . $db->quote('mokojoomhero')); - - $db->setQuery($query); - $db->execute(); - - if ($db->getAffectedRows() === 0) { - Factory::getApplication()->enqueueMessage( - 'MokoJoomHero: The system plugin could not be auto-enabled. ' - . 'Please enable it manually in Extensions → Plugins.', - 'warning' - ); - } - } catch (\Exception $e) { - Factory::getApplication()->enqueueMessage( - 'MokoJoomHero: Failed to auto-enable system plugin: ' . $e->getMessage() - . ' — Please enable it manually in Extensions → Plugins.', - 'warning' - ); - } - } - } -} diff --git a/src/packages/mod_mokojoomhero/script.php b/src/script.php similarity index 100% rename from src/packages/mod_mokojoomhero/script.php rename to src/script.php diff --git a/src/packages/mod_mokojoomhero/tmpl/default.php b/src/tmpl/default.php similarity index 100% rename from src/packages/mod_mokojoomhero/tmpl/default.php rename to src/tmpl/default.php diff --git a/src/packages/mod_mokojoomhero/tmpl/index.html b/src/tmpl/index.html similarity index 100% rename from src/packages/mod_mokojoomhero/tmpl/index.html rename to src/tmpl/index.html -- 2.52.0