diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml
index 11958bd..78cb625 100644
--- a/.mokogitea/workflows/issue-branch.yml
+++ b/.mokogitea/workflows/issue-branch.yml
@@ -5,7 +5,7 @@
# FILE INFORMATION
# DEFGROUP: Gitea.Workflow
# INGROUP: mokocli.Automation
-# VERSION: 01.00.00
+# VERSION: 02.52.24
# BRIEF: Auto-create feature branch when an issue is opened
name: "Universal: Issue Branch"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1c3df82..308c250 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,19 +4,22 @@
## [02.52.22] --- 2026-06-30
-## [02.52.22] --- 2026-06-30
-
### Added
- Cancel Stalled toolbar button on Backup Records view to cancel backups stuck in "running" status
- New ACL permission `mokosuitebackup.backup.cancel` for cancel stalled action
- AJAX endpoint `ajax.cancelBackup` for programmatic/API cancel
- Auto-timeout failsafe: preflight auto-cancels "running" backups older than 30 minutes
- Pre-extension-update backup progress modal (Bootstrap 5 modal with stepped AJAX progress bar)
+- New `warning` backup status for records where archive succeeded but remote upload failed
+- Warning-status records are downloadable, browsable, restorable, and purgeable
+- Warning status filter option in Backup Records dropdown
+- Yellow "Warning" badge in backup list, detail view, and cpanel module
### Fixed
- Pre-update backup ran synchronously with no browser feedback — page hung until complete
- Stalled backups permanently blocked future backups for the same profile
- Preflight error message now directs users to Cancel Stalled action
+- Backups with failed remote uploads were marked as "complete", hiding the upload failure
## [02.52.18] --- 2026-06-30
diff --git a/SECURITY.md b/SECURITY.md
index 46c440f..c72f18e 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.52.22
+VERSION: 02.52.24
BRIEF: Security vulnerability reporting and handling policy
-->
diff --git a/source/packages/com_mokosuitebackup/forms/filter_backups.xml b/source/packages/com_mokosuitebackup/forms/filter_backups.xml
index a44abd5..fa78e99 100644
--- a/source/packages/com_mokosuitebackup/forms/filter_backups.xml
+++ b/source/packages/com_mokosuitebackup/forms/filter_backups.xml
@@ -15,6 +15,7 @@
>
+
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 738fb5a..c21b6d1 100644
--- a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini
+++ b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini
@@ -207,6 +207,7 @@ COM_MOKOJOOMBACKUP_TYPE_DIFFERENTIAL="Differential (changed files + full DB)"
; Status labels
COM_MOKOJOOMBACKUP_STATUS_COMPLETE="Complete"
+COM_MOKOJOOMBACKUP_STATUS_WARNING="Warning"
COM_MOKOJOOMBACKUP_STATUS_RUNNING="Running"
COM_MOKOJOOMBACKUP_STATUS_FAIL="Failed"
COM_MOKOJOOMBACKUP_STATUS_PENDING="Pending"
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 1d7328d..db5e85b 100644
--- a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini
+++ b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini
@@ -123,6 +123,9 @@ COM_MOKOJOOMBACKUP_CANCEL_NONE_SELECTED="No backup records selected."
COM_MOKOJOOMBACKUP_CANCEL_NONE_RUNNING="None of the selected backups are in running status."
COM_MOKOJOOMBACKUP_CANCEL_SUCCESS="%d stalled backup(s) cancelled."
+; Backup status
+COM_MOKOJOOMBACKUP_STATUS_WARNING="Warning"
+
; ACL - Cancel
COM_MOKOSUITEBACKUP_ACTION_BACKUP_CANCEL="Cancel Stalled Backup"
COM_MOKOSUITEBACKUP_ACTION_BACKUP_CANCEL_DESC="Allows users to cancel backup records stuck in running status and clean up partial archive files."
diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml
index 6aeb44e..f099e1a 100644
--- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml
+++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml
@@ -7,7 +7,7 @@
-->
MokoSuiteBackup
- 02.52.22
+ 02.52.24
2026-06-02
Moko Consulting
hello@mokoconsulting.tech
diff --git a/source/packages/com_mokosuitebackup/sql/install.mysql.sql b/source/packages/com_mokosuitebackup/sql/install.mysql.sql
index 984ff45..705ebfd 100644
--- a/source/packages/com_mokosuitebackup/sql/install.mysql.sql
+++ b/source/packages/com_mokosuitebackup/sql/install.mysql.sql
@@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS `#__mokosuitebackup_records` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`profile_id` INT(11) UNSIGNED NOT NULL DEFAULT 1,
`description` VARCHAR(255) NOT NULL DEFAULT '',
- `status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending, running, complete, fail',
+ `status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending, running, complete, warning, fail',
`origin` VARCHAR(20) NOT NULL DEFAULT 'backend' COMMENT 'backend, cli, api, scheduled',
`backup_type` VARCHAR(20) NOT NULL DEFAULT 'full' COMMENT 'full, database, files',
`archivename` VARCHAR(512) NOT NULL DEFAULT '',
diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.23.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.23.sql
new file mode 100644
index 0000000..0af7fa5
--- /dev/null
+++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.23.sql
@@ -0,0 +1 @@
+/* 02.52.23 — no schema changes */
diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.24.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.24.sql
new file mode 100644
index 0000000..5fbc0be
--- /dev/null
+++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.52.24.sql
@@ -0,0 +1 @@
+/* 02.52.24 — no schema changes */
diff --git a/source/packages/com_mokosuitebackup/src/Controller/AjaxController.php b/source/packages/com_mokosuitebackup/src/Controller/AjaxController.php
index f064e0b..264464f 100644
--- a/source/packages/com_mokosuitebackup/src/Controller/AjaxController.php
+++ b/source/packages/com_mokosuitebackup/src/Controller/AjaxController.php
@@ -512,7 +512,7 @@ class AjaxController extends BaseController
return;
}
- if ($record->status !== 'complete' || !$record->filesexist) {
+ if (!\in_array($record->status, ['complete', 'warning'], true) || !$record->filesexist) {
$this->sendJson(['error' => true, 'message' => 'Archive not available']);
return;
@@ -808,7 +808,7 @@ class AjaxController extends BaseController
->select('COUNT(*)')
->from($db->quoteName('#__mokosuitebackup_records'))
->where($db->quoteName('backupstart') . ' < ' . $db->quote($cutoff))
- ->where($db->quoteName('status') . ' = ' . $db->quote('complete'));
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')');
$db->setQuery($query);
$count = (int) $db->loadResult();
} catch (\Exception $e) {
diff --git a/source/packages/com_mokosuitebackup/src/Controller/BackupsController.php b/source/packages/com_mokosuitebackup/src/Controller/BackupsController.php
index b2bad20..59a725b 100644
--- a/source/packages/com_mokosuitebackup/src/Controller/BackupsController.php
+++ b/source/packages/com_mokosuitebackup/src/Controller/BackupsController.php
@@ -199,7 +199,7 @@ class BackupsController extends AdminController
->select($db->quoteName('id'))
->from($db->quoteName('#__mokosuitebackup_records'))
->where($db->quoteName('backupstart') . ' < ' . $db->quote($cutoff))
- ->where($db->quoteName('status') . ' = ' . $db->quote('complete'));
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')');
$db->setQuery($query);
$ids = $db->loadColumn();
diff --git a/source/packages/com_mokosuitebackup/src/Engine/BackupEngine.php b/source/packages/com_mokosuitebackup/src/Engine/BackupEngine.php
index aaf8a56..04b8f33 100644
--- a/source/packages/com_mokosuitebackup/src/Engine/BackupEngine.php
+++ b/source/packages/com_mokosuitebackup/src/Engine/BackupEngine.php
@@ -375,7 +375,7 @@ class BackupEngine
// Final record update (includes fields needed by NotificationSender)
$update = (object) [
'id' => $recordId,
- 'status' => 'complete',
+ 'status' => $uploadFailed ? 'warning' : 'complete',
'description' => $description,
'backup_type' => $profile->backup_type,
'archivename' => $archiveName,
@@ -606,7 +606,7 @@ class BackupEngine
->select($db->quoteName('manifest'))
->from($db->quoteName('#__mokosuitebackup_records'))
->where($db->quoteName('profile_id') . ' = ' . $profileId)
- ->where($db->quoteName('status') . ' = ' . $db->quote('complete'))
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')')
->where($db->quoteName('manifest') . ' != ' . $db->quote(''))
->where($db->quoteName('backup_type') . ' = ' . $db->quote('full'))
->order($db->quoteName('backupstart') . ' DESC');
diff --git a/source/packages/com_mokosuitebackup/src/Engine/PreflightCheck.php b/source/packages/com_mokosuitebackup/src/Engine/PreflightCheck.php
index 64b42b5..664a3e8 100644
--- a/source/packages/com_mokosuitebackup/src/Engine/PreflightCheck.php
+++ b/source/packages/com_mokosuitebackup/src/Engine/PreflightCheck.php
@@ -165,7 +165,7 @@ class PreflightCheck
->select($db->quoteName('total_size'))
->from($db->quoteName('#__mokosuitebackup_records'))
->where($db->quoteName('profile_id') . ' = ' . (int) $profile->id)
- ->where($db->quoteName('status') . ' = ' . $db->quote('complete'))
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')')
->where($db->quoteName('total_size') . ' > 0')
->order($db->quoteName('backupstart') . ' DESC');
$db->setQuery($query, 0, 1);
diff --git a/source/packages/com_mokosuitebackup/src/Engine/RestoreEngine.php b/source/packages/com_mokosuitebackup/src/Engine/RestoreEngine.php
index 55202d0..88ad222 100644
--- a/source/packages/com_mokosuitebackup/src/Engine/RestoreEngine.php
+++ b/source/packages/com_mokosuitebackup/src/Engine/RestoreEngine.php
@@ -67,7 +67,7 @@ class RestoreEngine
return ['success' => false, 'message' => 'Backup record not found: ' . $recordId];
}
- if ($record->status !== 'complete') {
+ if ($record->status !== 'complete' && $record->status !== 'warning') {
return ['success' => false, 'message' => 'Cannot restore from incomplete backup (status: ' . $record->status . ')'];
}
diff --git a/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php b/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php
index a9dbb08..ee640e7 100644
--- a/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php
+++ b/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php
@@ -647,7 +647,7 @@ class SteppedBackupEngine
$update = (object) [
'id' => $session->recordId,
- 'status' => 'complete',
+ 'status' => $uploadFailed ? 'warning' : 'complete',
'backupend' => date('Y-m-d H:i:s'),
'total_size' => $totalSize,
'checksum' => $checksum,
diff --git a/source/packages/com_mokosuitebackup/src/Engine/SteppedRestoreEngine.php b/source/packages/com_mokosuitebackup/src/Engine/SteppedRestoreEngine.php
index cf1b9ef..25668b1 100644
--- a/source/packages/com_mokosuitebackup/src/Engine/SteppedRestoreEngine.php
+++ b/source/packages/com_mokosuitebackup/src/Engine/SteppedRestoreEngine.php
@@ -64,7 +64,7 @@ class SteppedRestoreEngine
return ['error' => true, 'message' => 'Backup record not found: ' . $recordId];
}
- if ($record->status !== 'complete') {
+ if ($record->status !== 'complete' && $record->status !== 'warning') {
return ['error' => true, 'message' => 'Cannot restore from incomplete backup (status: ' . $record->status . ')'];
}
diff --git a/source/packages/com_mokosuitebackup/src/Helper/BackupStatusHelper.php b/source/packages/com_mokosuitebackup/src/Helper/BackupStatusHelper.php
index 7de26bc..a711f97 100644
--- a/source/packages/com_mokosuitebackup/src/Helper/BackupStatusHelper.php
+++ b/source/packages/com_mokosuitebackup/src/Helper/BackupStatusHelper.php
@@ -70,7 +70,7 @@ class BackupStatusHelper
])
->from($db->quoteName('#__mokosuitebackup_records', 'r'))
->join('LEFT', $db->quoteName('#__mokosuitebackup_profiles', 'p') . ' ON p.id = r.profile_id')
- ->where($db->quoteName('r.status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'fail'])) . ')')
+ ->where($db->quoteName('r.status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning', 'fail'])) . ')')
->order($db->quoteName('r.backupstart') . ' DESC');
if ($profileId !== null) {
@@ -148,7 +148,7 @@ class BackupStatusHelper
$query = $db->getQuery(true)
->select($db->quoteName('status'))
->from($db->quoteName('#__mokosuitebackup_records'))
- ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'fail'])) . ')')
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning', 'fail'])) . ')')
->order($db->quoteName('backupstart') . ' DESC')
->setLimit(50);
@@ -156,7 +156,7 @@ class BackupStatusHelper
$streak = 0;
foreach ($statuses as $s) {
- if ($s === 'complete') {
+ if ($s === 'complete' || $s === 'warning') {
$streak++;
} else {
break;
diff --git a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php
index ae85d6e..8ad63df 100644
--- a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php
+++ b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php
@@ -30,7 +30,7 @@ class DashboardModel extends BaseDatabaseModel
->select('r.*, p.title AS profile_title')
->from($db->quoteName('#__mokosuitebackup_records', 'r'))
->join('LEFT', $db->quoteName('#__mokosuitebackup_profiles', 'p') . ' ON p.id = r.profile_id')
- ->where($db->quoteName('r.status') . ' = ' . $db->quote('complete'))
+ ->where($db->quoteName('r.status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')')
->order($db->quoteName('r.backupend') . ' DESC');
$db->setQuery($query, 0, 1);
@@ -75,7 +75,7 @@ class DashboardModel extends BaseDatabaseModel
->select('COUNT(*) AS total_count')
->select('COALESCE(SUM(' . $db->quoteName('total_size') . '), 0) AS total_size')
->from($db->quoteName('#__mokosuitebackup_records'))
- ->where($db->quoteName('status') . ' = ' . $db->quote('complete'));
+ ->where($db->quoteName('status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')');
$db->setQuery($query);
$stats = $db->loadObject();
@@ -274,7 +274,7 @@ class DashboardModel extends BaseDatabaseModel
->select('COALESCE(SUM(r.total_size), 0) AS total_size')
->from($db->quoteName('#__mokosuitebackup_records', 'r'))
->join('LEFT', $db->quoteName('#__mokosuitebackup_profiles', 'p') . ' ON p.id = r.profile_id')
- ->where($db->quoteName('r.status') . ' = ' . $db->quote('complete'))
+ ->where($db->quoteName('r.status') . ' IN (' . implode(',', array_map([$db, 'quote'], ['complete', 'warning'])) . ')')
->group($db->quoteName('r.profile_id'))
->order('total_size DESC');
$db->setQuery($query);
diff --git a/source/packages/com_mokosuitebackup/src/View/Backup/HtmlView.php b/source/packages/com_mokosuitebackup/src/View/Backup/HtmlView.php
index cdc2c7f..d1fe0c9 100644
--- a/source/packages/com_mokosuitebackup/src/View/Backup/HtmlView.php
+++ b/source/packages/com_mokosuitebackup/src/View/Backup/HtmlView.php
@@ -41,7 +41,7 @@ class HtmlView extends BaseHtmlView
$user = Factory::getApplication()->getIdentity();
- if ($this->item->status === 'complete'
+ if (\in_array($this->item->status, ['complete', 'warning'], true)
&& !empty($this->item->filesexist)
&& $user->authorise('mokosuitebackup.backup.download', 'com_mokosuitebackup')
) {
diff --git a/source/packages/com_mokosuitebackup/tmpl/backup/default.php b/source/packages/com_mokosuitebackup/tmpl/backup/default.php
index bcaf51f..49dfd58 100644
--- a/source/packages/com_mokosuitebackup/tmpl/backup/default.php
+++ b/source/packages/com_mokosuitebackup/tmpl/backup/default.php
@@ -30,6 +30,7 @@ $ajaxUrl = Route::_('index.php?option=com_mokosuitebackup&format=json', false)
item->status) {
'complete' => 'badge bg-success',
+ 'warning' => 'badge bg-warning text-dark',
'running' => 'badge bg-info',
'fail' => 'badge bg-danger',
default => 'badge bg-secondary',
diff --git a/source/packages/com_mokosuitebackup/tmpl/backups/default.php b/source/packages/com_mokosuitebackup/tmpl/backups/default.php
index f5e664a..5417461 100644
--- a/source/packages/com_mokosuitebackup/tmpl/backups/default.php
+++ b/source/packages/com_mokosuitebackup/tmpl/backups/default.php
@@ -92,6 +92,7 @@ $listDirn = $this->escape($this->state->get('list.direction'));
status) {
'complete' => 'badge bg-success',
+ 'warning' => 'badge bg-warning text-dark',
'running' => 'badge bg-info',
'fail' => 'badge bg-danger',
default => 'badge bg-secondary',
diff --git a/source/packages/mod_mokosuitebackup_cpanel/language/en-GB/mod_mokosuitebackup_cpanel.ini b/source/packages/mod_mokosuitebackup_cpanel/language/en-GB/mod_mokosuitebackup_cpanel.ini
index 50cb35a..6ca28a1 100644
--- a/source/packages/mod_mokosuitebackup_cpanel/language/en-GB/mod_mokosuitebackup_cpanel.ini
+++ b/source/packages/mod_mokosuitebackup_cpanel/language/en-GB/mod_mokosuitebackup_cpanel.ini
@@ -11,6 +11,7 @@ MOD_MOKOSUITEBACKUP_CPANEL_NOT_INSTALLED="MokoSuiteBackup is not installed or is
MOD_MOKOSUITEBACKUP_CPANEL_LAST_BACKUP="Last Backup"
MOD_MOKOSUITEBACKUP_CPANEL_STATUS_OK="Success"
+MOD_MOKOSUITEBACKUP_CPANEL_STATUS_WARNING="Warning"
MOD_MOKOSUITEBACKUP_CPANEL_STATUS_FAIL="Failed"
MOD_MOKOSUITEBACKUP_CPANEL_NO_BACKUPS="No backups yet."
MOD_MOKOSUITEBACKUP_CPANEL_FILES_TABLES="%d files, %d tables"
diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml
index f9cd809..099fe46 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 @@
-->
mod_mokosuitebackup_cpanel
- 02.52.22
+ 02.52.24
2026-06-23
Moko Consulting
hello@mokoconsulting.tech
diff --git a/source/packages/mod_mokosuitebackup_cpanel/tmpl/default.php b/source/packages/mod_mokosuitebackup_cpanel/tmpl/default.php
index bad6adf..456d8fa 100644
--- a/source/packages/mod_mokosuitebackup_cpanel/tmpl/default.php
+++ b/source/packages/mod_mokosuitebackup_cpanel/tmpl/default.php
@@ -51,10 +51,20 @@ $moduleId = 'mod-msb-cpanel-' . $displayData['module']->id;
-
-
+ 'bg-success',
+ 'warning' => 'bg-warning text-dark',
+ default => 'bg-danger',
+ };
+ $cpanelLabel = match ($latest['status']) {
+ 'complete' => Text::_('MOD_MOKOSUITEBACKUP_CPANEL_STATUS_OK'),
+ 'warning' => Text::_('MOD_MOKOSUITEBACKUP_CPANEL_STATUS_WARNING'),
+ default => Text::_('MOD_MOKOSUITEBACKUP_CPANEL_STATUS_FAIL'),
+ };
+ ?>
+
+
diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml
index e7759ab..ced288a 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.52.22
+ 02.52.24
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 94003d1..1e8f1a8 100644
--- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml
+++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml
@@ -7,7 +7,7 @@
-->
Console - MokoSuiteBackup
- 02.52.22
+ 02.52.24
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 38e1384..7d17290 100644
--- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml
+++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml
@@ -7,7 +7,7 @@
-->
Content - MokoSuiteBackup
- 02.52.22
+ 02.52.24
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 a757f43..e9fa579 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.52.22
+ 02.52.24
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 0f6282c..4cefd2c 100644
--- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml
+++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml
@@ -7,7 +7,7 @@
-->
System - MokoSuiteBackup
- 02.52.22
+ 02.52.24
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 4643360..4381063 100644
--- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml
+++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml
@@ -7,7 +7,7 @@
-->
Task - MokoSuiteBackup
- 02.52.22
+ 02.52.24
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 868f770..bc268fc 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.52.22
+ 02.52.24
2026-06-02
Moko Consulting
hello@mokoconsulting.tech
diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml
index fa57eb2..15b18fd 100644
--- a/source/pkg_mokosuitebackup.xml
+++ b/source/pkg_mokosuitebackup.xml
@@ -8,7 +8,7 @@
Package - MokoSuiteBackup
mokosuitebackup
- 02.52.22
+ 02.52.24
2026-06-02
Moko Consulting
hello@mokoconsulting.tech