Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dc23f4dd5e | |||
| 9a5f4dbbb2 | |||
| 45066237b0 | |||
| 2296c2f754 | |||
| 7416c30925 | |||
| 186a75681a | |||
| 0a60436f3d | |||
| a2362d5400 | |||
| 6f1d270818 | |||
| 7aa1f2eb43 |
@@ -7,7 +7,7 @@ Full-site backup and restore for Joomla — database, files, and configuration.
|
|||||||
| Field | Value |
|
| Field | Value |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **Package** | `pkg_mokosuitebackup` |
|
| **Package** | `pkg_mokosuitebackup` |
|
||||||
| **Language** | PHP 8.1+ |
|
| **Language** | PHP 8.3+ |
|
||||||
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
||||||
| **Wiki** | [MokoSuiteBackup Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteBackup/wiki) |
|
| **Wiki** | [MokoSuiteBackup Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteBackup/wiki) |
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ Joomla **package** with four sub-extensions:
|
|||||||
### com_mokosuitebackup (Component)
|
### com_mokosuitebackup (Component)
|
||||||
- Admin backend for managing backup profiles and records
|
- Admin backend for managing backup profiles and records
|
||||||
- Backup engine: `Engine/BackupEngine`, `Engine/DatabaseDumper`, `Engine/FileScanner`, `Engine/Archiver`
|
- 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`
|
- Namespace: `Joomla\Component\MokoSuiteBackup\Administrator`
|
||||||
- DB tables: `#__mokosuitebackup_profiles`, `#__mokosuitebackup_records`
|
- DB tables: `#__mokosuitebackup_profiles`, `#__mokosuitebackup_records`
|
||||||
- CLI: `cli/mokosuitebackup.php` for cron-based backups
|
- CLI: `cli/mokosuitebackup.php` for cron-based backups
|
||||||
@@ -64,8 +64,8 @@ Joomla **package** with four sub-extensions:
|
|||||||
|
|
||||||
## Coding Standards
|
## Coding Standards
|
||||||
|
|
||||||
- PHP 8.1+ minimum
|
- PHP 8.3+ minimum (Joomla 6)
|
||||||
- Joomla 4/5 DI container pattern: `services/provider.php` → Extension class
|
- Joomla 6 DI container pattern: `services/provider.php` → Extension class
|
||||||
- Legacy stub `.php` file required for plugin loader but empty
|
- Legacy stub `.php` file required for plugin loader but empty
|
||||||
- `SubscriberInterface` for event subscription (not `on*` method naming)
|
- `SubscriberInterface` for event subscription (not `on*` method naming)
|
||||||
- `bind() → check() → store()` for Table operations (not `save()`)
|
- `bind() → check() → store()` for Table operations (not `save()`)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: MokoGitea.Workflow
|
# DEFGROUP: MokoGitea.Workflow
|
||||||
# INGROUP: mokocli.Automation
|
# INGROUP: mokocli.Automation
|
||||||
# VERSION: 02.61.00
|
# VERSION: 02.61.06
|
||||||
# BRIEF: Auto-create feature branch when an issue is opened
|
# BRIEF: Auto-create feature branch when an issue is opened
|
||||||
|
|
||||||
name: "Universal: Issue Branch"
|
name: "Universal: Issue Branch"
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla
|
|||||||
INGROUP: Template-Joomla.Documentation
|
INGROUP: Template-Joomla.Documentation
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla
|
||||||
PATH: /SECURITY.md
|
PATH: /SECURITY.md
|
||||||
VERSION: 02.61.00
|
VERSION: 02.61.06
|
||||||
BRIEF: Security vulnerability reporting and handling policy
|
BRIEF: Security vulnerability reporting and handling policy
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.1",
|
"php": ">=8.3",
|
||||||
"ext-zip": "*",
|
"ext-zip": "*",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-pdo_mysql": "*",
|
"ext-pdo_mysql": "*",
|
||||||
|
|||||||
Submodule source/packages/MokoSuiteClient updated: 246f7bb10c...4097016cac
@@ -349,6 +349,8 @@ COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_ANYWAY="Continue without backup"
|
|||||||
COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard"
|
COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard"
|
||||||
COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD="View backup record"
|
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_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_CLEANUP="Cleanup Defaults"
|
||||||
COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)"
|
COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)"
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ COM_MOKOJOOMBACKUP_RUNBACKUP_CONTINUE_ANYWAY="Continue without backup"
|
|||||||
COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard"
|
COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD="Back to dashboard"
|
||||||
COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD="View backup record"
|
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_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_CLEANUP="Cleanup Defaults"
|
||||||
COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)"
|
COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE="Max Backup Age (days)"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
display label there.
|
display label there.
|
||||||
-->
|
-->
|
||||||
<name>MokoSuiteBackup</name>
|
<name>MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/* 02.61.01 — no schema changes */
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* 02.61.04 — no schema changes */
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* 02.61.05 — no schema changes */
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* 02.61.06 — no schema changes */
|
||||||
@@ -480,8 +480,8 @@ function actionPreflight(): array
|
|||||||
$checks[] = [
|
$checks[] = [
|
||||||
'label' => 'PHP Version',
|
'label' => 'PHP Version',
|
||||||
'value' => PHP_VERSION,
|
'value' => PHP_VERSION,
|
||||||
'ok' => version_compare(PHP_VERSION, '8.1', '>='),
|
'ok' => version_compare(PHP_VERSION, '8.3', '>='),
|
||||||
'hint' => 'Joomla 4/5 requires PHP 8.1+',
|
'hint' => 'Joomla 6 requires PHP 8.3+',
|
||||||
];
|
];
|
||||||
|
|
||||||
$checks[] = [
|
$checks[] = [
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ class DashboardModel extends BaseDatabaseModel
|
|||||||
// PHP version
|
// PHP version
|
||||||
$checks[] = (object) [
|
$checks[] = (object) [
|
||||||
'label' => 'PHP Version',
|
'label' => 'PHP Version',
|
||||||
'status' => version_compare(PHP_VERSION, '8.1.0', '>='),
|
'status' => version_compare(PHP_VERSION, '8.3.0', '>='),
|
||||||
'detail' => PHP_VERSION,
|
'detail' => PHP_VERSION,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ $config = [
|
|||||||
'dashboard' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD'),
|
'dashboard' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_BACK_TO_DASHBOARD'),
|
||||||
'viewRecord' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD'),
|
'viewRecord' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_VIEW_RECORD'),
|
||||||
'leaveWarn' => Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_LEAVE_WARNING'),
|
'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
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id="msb-rb-phase" class="fw-bold mb-1"></div>
|
<div id="msb-rb-phase" class="fw-bold mb-1"></div>
|
||||||
<div id="msb-rb-status" class="text-muted small mb-0"><?php echo htmlspecialchars(Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_STARTING'), ENT_QUOTES, 'UTF-8'); ?></div>
|
<div id="msb-rb-status" class="mb-0"><?php echo htmlspecialchars(Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_STARTING'), ENT_QUOTES, 'UTF-8'); ?></div>
|
||||||
|
|
||||||
|
<?php if ($safeReturnUrl !== '') : ?>
|
||||||
|
<!-- Pre-update/uninstall flow: opt in to auto-continue, or get a manual "Continue" button on completion. -->
|
||||||
|
<div class="form-check mt-3" id="msb-rb-autocontinue-wrap">
|
||||||
|
<input class="form-check-input" type="checkbox" id="msb-rb-autocontinue" checked>
|
||||||
|
<label class="form-check-label" for="msb-rb-autocontinue">
|
||||||
|
<?php echo htmlspecialchars(Text::_('COM_MOKOJOOMBACKUP_RUNBACKUP_AUTOCONTINUE'), ENT_QUOTES, 'UTF-8'); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<div id="msb-rb-actions" class="d-none mt-3">
|
<div id="msb-rb-actions" class="d-none mt-3">
|
||||||
<button type="button" id="msb-rb-retry" class="btn btn-primary d-none"></button>
|
<button type="button" id="msb-rb-retry" class="btn btn-primary d-none"></button>
|
||||||
@@ -153,7 +164,9 @@ $this->getDocument()->addStyleSheet(Uri::root(true) . '/media/com_mokosuitebacku
|
|||||||
retry: document.getElementById('msb-rb-retry'),
|
retry: document.getElementById('msb-rb-retry'),
|
||||||
record: document.getElementById('msb-rb-record'),
|
record: document.getElementById('msb-rb-record'),
|
||||||
continue: document.getElementById('msb-rb-continue'),
|
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) {
|
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) {}
|
try { await post({ task: 'ajax.preupdateAck', action: CFG.action || '' }); } catch (e) {}
|
||||||
|
|
||||||
if (CFG.returnUrl) {
|
if (CFG.returnUrl) {
|
||||||
/* Pre-update / pre-uninstall flow: continue the original action.
|
/* Pre-update / pre-uninstall flow. If "auto-continue" is ticked
|
||||||
No "view record" button here — we're handing back to Joomla. */
|
(default) hand back to Joomla automatically; otherwise stop here
|
||||||
setStatus(L.continuing || 'Continuing…');
|
and offer a link to the new backup record plus a manual
|
||||||
window.setTimeout(function () { window.location.href = CFG.returnUrl; }, 1200);
|
"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 {
|
} else {
|
||||||
/* Manual "Backup Now": offer to view the record that was just made. */
|
/* Manual "Backup Now": offer to view the record that was just made. */
|
||||||
setStatus(L.complete || 'Backup complete');
|
setStatus(L.complete || 'Backup complete');
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="module" client="administrator" method="upgrade">
|
<extension type="module" client="administrator" method="upgrade">
|
||||||
<name>Module - MokoSuiteBackup - cPanel</name>
|
<name>Module - MokoSuiteBackup - cPanel</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-23</creationDate>
|
<creationDate>2026-06-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="actionlog" method="upgrade">
|
<extension type="plugin" group="actionlog" method="upgrade">
|
||||||
<name>Action Log - MokoSuiteBackup</name>
|
<name>Action Log - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-04</creationDate>
|
<creationDate>2026-06-04</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="console" method="upgrade">
|
<extension type="plugin" group="console" method="upgrade">
|
||||||
<name>Console - MokoSuiteBackup</name>
|
<name>Console - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-04</creationDate>
|
<creationDate>2026-06-04</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="content" method="upgrade">
|
<extension type="plugin" group="content" method="upgrade">
|
||||||
<name>Content - MokoSuiteBackup</name>
|
<name>Content - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-04</creationDate>
|
<creationDate>2026-06-04</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<extension type="plugin" group="quickicon" method="upgrade">
|
<extension type="plugin" group="quickicon" method="upgrade">
|
||||||
<name>Quick Icon - MokoSuiteBackup</name>
|
<name>Quick Icon - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="system" method="upgrade">
|
<extension type="plugin" group="system" method="upgrade">
|
||||||
<name>System - MokoSuiteBackup</name>
|
<name>System - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="task" method="upgrade">
|
<extension type="plugin" group="task" method="upgrade">
|
||||||
<name>Task - MokoSuiteBackup</name>
|
<name>Task - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="plugin" group="webservices" method="upgrade">
|
<extension type="plugin" group="webservices" method="upgrade">
|
||||||
<name>Web Services - MokoSuiteBackup</name>
|
<name>Web Services - MokoSuiteBackup</name>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<extension type="package" method="upgrade">
|
<extension type="package" method="upgrade">
|
||||||
<name>Package - MokoSuiteBackup</name>
|
<name>Package - MokoSuiteBackup</name>
|
||||||
<packagename>mokosuitebackup</packagename>
|
<packagename>mokosuitebackup</packagename>
|
||||||
<version>02.61.00</version>
|
<version>02.61.06</version>
|
||||||
<creationDate>2026-06-02</creationDate>
|
<creationDate>2026-06-02</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
Reference in New Issue
Block a user