diff --git a/.mokogitea/CLAUDE.md b/.mokogitea/CLAUDE.md index f85079e9..6c2ab8b8 100644 --- a/.mokogitea/CLAUDE.md +++ b/.mokogitea/CLAUDE.md @@ -7,7 +7,7 @@ Full-site backup and restore for Joomla — database, files, and configuration. | Field | Value | |---|---| | **Package** | `pkg_mokosuitebackup` | -| **Language** | PHP 8.1+ | +| **Language** | PHP 8.3+ | | **Branch** | develop on `dev`, merge to `main` (protected) | | **Wiki** | [MokoSuiteBackup Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteBackup/wiki) | @@ -29,7 +29,7 @@ Joomla **package** with four sub-extensions: ### com_mokosuitebackup (Component) - Admin backend for managing backup profiles and records - Backup engine: `Engine/BackupEngine`, `Engine/DatabaseDumper`, `Engine/FileScanner`, `Engine/Archiver` -- Joomla 4/5 MVC: Controllers, Models, Views, Tables +- Joomla 6 MVC: Controllers, Models, Views, Tables - Namespace: `Joomla\Component\MokoSuiteBackup\Administrator` - DB tables: `#__mokosuitebackup_profiles`, `#__mokosuitebackup_records` - CLI: `cli/mokosuitebackup.php` for cron-based backups @@ -64,8 +64,8 @@ Joomla **package** with four sub-extensions: ## Coding Standards -- PHP 8.1+ minimum -- Joomla 4/5 DI container pattern: `services/provider.php` → Extension class +- PHP 8.3+ minimum (Joomla 6) +- Joomla 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) - `bind() → check() → store()` for Table operations (not `save()`) diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8e425f6c..328f0a3e 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.61.00 +# VERSION: 02.61.06 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index a8030300..39210640 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.61.00 +VERSION: 02.61.06 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/composer.json b/composer.json index bd363ab3..08b68d15 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ } ], "require": { - "php": ">=8.1", + "php": ">=8.3", "ext-zip": "*", "ext-pdo": "*", "ext-pdo_mysql": "*", diff --git a/source/packages/MokoSuiteClient b/source/packages/MokoSuiteClient index 246f7bb1..4097016c 160000 --- a/source/packages/MokoSuiteClient +++ b/source/packages/MokoSuiteClient @@ -1 +1 @@ -Subproject commit 246f7bb10c2011ec667468302cff67d5882c4456 +Subproject commit 4097016cac39f3e699b3e5dcd3f0dc68fe9ab2dd diff --git a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini index 191889e2..4d4bb101 100644 --- a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini @@ -349,6 +349,8 @@ COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_ANYWAY="Continue without backup" COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard" COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD="View backup record" COM_MOKOJOOMBACKUP_RUNBACKUP_LEAVE_WARNING="A backup is in progress. Leaving now will cancel it." +COM_MOKOJOOMBACKUP_RUNBACKUP_AUTOCONTINUE="Automatically continue the update when the backup finishes" +COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_UPDATE="Continue the update" COM_MOKOJOOMBACKUP_CONFIG_CLEANUP="Cleanup Defaults" COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)" diff --git a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini index d344d799..7f32636b 100644 --- a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini @@ -71,6 +71,8 @@ COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_ANYWAY="Continue without backup" COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard" COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD="View backup record" COM_MOKOJOOMBACKUP_RUNBACKUP_LEAVE_WARNING="A backup is in progress. Leaving now will cancel it." +COM_MOKOJOOMBACKUP_RUNBACKUP_AUTOCONTINUE="Automatically continue the update when the backup finishes" +COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_UPDATE="Continue the update" COM_MOKOJOOMBACKUP_CONFIG_CLEANUP="Cleanup Defaults" COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)" diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index e42aac89..48da2f0a 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.01.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.01.sql new file mode 100644 index 00000000..11f15c12 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.01.sql @@ -0,0 +1 @@ +/* 02.61.01 — no schema changes */ diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.04.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.04.sql new file mode 100644 index 00000000..b5f9fb78 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.04.sql @@ -0,0 +1 @@ +/* 02.61.04 — no schema changes */ diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.05.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.05.sql new file mode 100644 index 00000000..57faeebd --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.05.sql @@ -0,0 +1 @@ +/* 02.61.05 — no schema changes */ diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.06.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.06.sql new file mode 100644 index 00000000..88cad791 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.61.06.sql @@ -0,0 +1 @@ +/* 02.61.06 — no schema changes */ diff --git a/source/packages/com_mokosuitebackup/src/Engine/MokoRestore.php b/source/packages/com_mokosuitebackup/src/Engine/MokoRestore.php index 1d06801b..a90c037f 100644 --- a/source/packages/com_mokosuitebackup/src/Engine/MokoRestore.php +++ b/source/packages/com_mokosuitebackup/src/Engine/MokoRestore.php @@ -480,8 +480,8 @@ function actionPreflight(): array $checks[] = [ 'label' => 'PHP Version', 'value' => PHP_VERSION, - 'ok' => version_compare(PHP_VERSION, '8.1', '>='), - 'hint' => 'Joomla 4/5 requires PHP 8.1+', + 'ok' => version_compare(PHP_VERSION, '8.3', '>='), + 'hint' => 'Joomla 6 requires PHP 8.3+', ]; $checks[] = [ diff --git a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php index 8ad63dfc..7a965cad 100644 --- a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php +++ b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php @@ -104,7 +104,7 @@ class DashboardModel extends BaseDatabaseModel // PHP version $checks[] = (object) [ 'label' => 'PHP Version', - 'status' => version_compare(PHP_VERSION, '8.1.0', '>='), + 'status' => version_compare(PHP_VERSION, '8.3.0', '>='), 'detail' => PHP_VERSION, ]; diff --git a/source/packages/com_mokosuitebackup/tmpl/runbackup/default.php b/source/packages/com_mokosuitebackup/tmpl/runbackup/default.php index b3c7c9ae..6b2f0a3d 100644 --- a/source/packages/com_mokosuitebackup/tmpl/runbackup/default.php +++ b/source/packages/com_mokosuitebackup/tmpl/runbackup/default.php @@ -86,6 +86,7 @@ $config = [ 'dashboard' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD'), 'viewRecord' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD'), 'leaveWarn' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_LEAVE_WARNING'), + 'continueUpdate' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_UPDATE'), ], ]; @@ -117,7 +118,17 @@ $this->getDocument()->addStyleSheet(Uri::root(true) . '/media/com_mokosuitebacku

-
+
+ + + +
+ + +
+
@@ -153,7 +164,9 @@ $this->getDocument()->addStyleSheet(Uri::root(true) . '/media/com_mokosuitebacku retry: document.getElementById('msb-rb-retry'), record: document.getElementById('msb-rb-record'), continue: document.getElementById('msb-rb-continue'), - dashboard: document.getElementById('msb-rb-dashboard') + dashboard: document.getElementById('msb-rb-dashboard'), + autocontinue: document.getElementById('msb-rb-autocontinue'), + autocontinueWrap: document.getElementById('msb-rb-autocontinue-wrap') }; function setBar(pct, striped) { @@ -199,10 +212,30 @@ $this->getDocument()->addStyleSheet(Uri::root(true) . '/media/com_mokosuitebacku try { await post({ task: 'ajax.preupdateAck', action: CFG.action || '' }); } catch (e) {} if (CFG.returnUrl) { - /* Pre-update / pre-uninstall flow: continue the original action. - No "view record" button here — we're handing back to Joomla. */ - setStatus(L.continuing || 'Continuing…'); - window.setTimeout(function () { window.location.href = CFG.returnUrl; }, 1200); + /* Pre-update / pre-uninstall flow. If "auto-continue" is ticked + (default) hand back to Joomla automatically; otherwise stop here + and offer a link to the new backup record plus a manual + "Continue the update" button. */ + if (el.autocontinueWrap) { el.autocontinueWrap.classList.add('d-none'); } + + var autoContinue = !el.autocontinue || el.autocontinue.checked; + + if (autoContinue) { + setStatus(L.continuing || 'Continuing…'); + window.setTimeout(function () { window.location.href = CFG.returnUrl; }, 1200); + } else { + setStatus(L.complete || 'Backup complete'); + showActions(); + + if (lastRecordId > 0 && CFG.recordUrl) { + showBtn(el.record, L.viewRecord || 'View backup record', + CFG.recordUrl.replace('__MSBID__', String(lastRecordId))); + } + + el.continue.classList.remove('btn-warning'); + el.continue.classList.add('btn-success'); + showBtn(el.continue, L.continueUpdate || 'Continue the update', CFG.returnUrl); + } } else { /* Manual "Backup Now": offer to view the record that was just made. */ setStatus(L.complete || 'Backup complete'); diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index 589dd842..4c43e5ac 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.61.00 + 02.61.06 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index 4f2d007e..b11e7870 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index 77dc3ce4..9bd0fc23 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index d098134a..a0513ce7 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index 73181a3f..3aab7784 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index 62e44df0..05e1e547 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 1c923a7a..d9686164 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index 5156c1ac..68ad71ba 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index f1d1faf9..e90c667c 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.61.00 + 02.61.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech