No reset scheduled — save the plugin config to calculate.
';
+ $db = Factory::getDbo();
+ $query = $db->getQuery(true)
+ ->select([
+ $db->quoteName('next_execution'),
+ $db->quoteName('last_execution'),
+ $db->quoteName('state'),
+ ])
+ ->from($db->quoteName('#__scheduler_tasks'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('mokowaas.demo.reset'));
+
+ $db->setQuery($query);
+ $task = $db->loadAssoc();
+ }
+ catch (\Throwable $e)
+ {
+ $task = null;
}
- $utcTimestamp = strtotime($this->value);
-
- if ($utcTimestamp === false || $utcTimestamp <= 0)
+ if (!$task)
{
- return 'Invalid timestamp stored.
';
+ return 'No scheduled task found — save to create one automatically.
'
+ . 'Scheduled task is disabled.
'
+ . 'Waiting for first run...
'
+ . ''
+ // Last run info
+ $lastInfo = '';
+
+ if (!empty($lastExec) && $lastExec !== '0000-00-00 00:00:00')
+ {
+ try
+ {
+ $lastDt = new \DateTime($lastExec);
+ $lastDt->setTimezone(new \DateTimeZone($siteTimezone));
+ $lastInfo = '
Last run: ' . $lastDt->format('M j, g:i A') . '';
+ }
+ catch (\Throwable $e)
+ {
+ // skip
+ }
+ }
+
+ return '
'
. ''
. ' '
. htmlspecialchars($formatted) . ' '
. $relative
- . ''
+ . $lastInfo
+ . ''
. '
';
}
}
diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php
index 29b1a59..b97cee4 100644
--- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php
+++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php
@@ -8,7 +8,7 @@
* FILE INFORMATION
* DEFGROUP: Joomla.Plugin
* INGROUP: MokoWaaS
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* PATH: /src/Field/SnapshotTablesField.php
* BRIEF: Multi-select list field that loads DB tables with sensible defaults
*/
diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php
index 45f6547..1de08b1 100644
--- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php
+++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php
@@ -10,7 +10,7 @@
* INGROUP: MokoWaaS
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS
* PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* BRIEF: Receiver-side content sync — applies incoming payload to local DB
*/
diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php
index 6e7e93c..56a9948 100644
--- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php
+++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php
@@ -10,7 +10,7 @@
* INGROUP: MokoWaaS
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS
* PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* BRIEF: Sender-side content sync — builds payload and pushes to remote sites
*/
diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php
index 3fde0b4..60bf40d 100644
--- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php
+++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php
@@ -10,7 +10,7 @@
* INGROUP: MokoWaaS
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS
* PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* BRIEF: Full database snapshot/restore service for demo site reset
*/
@@ -299,6 +299,10 @@ class DemoResetService
}
}
+ // After full DB restore, re-ensure the task plugin and scheduled task
+ // exist — the restore overwrote #__extensions and #__scheduler_tasks
+ $this->reRegisterAfterRestore();
+
Log::add(
sprintf('Demo site reset to baseline "%s" (full DB, media=%s)', $name, $mediaRestored ? 'yes' : 'no'),
Log::WARNING,
@@ -537,6 +541,95 @@ class DemoResetService
*
* @since 02.21.00
*/
+ private function reRegisterAfterRestore(): void
+ {
+ try
+ {
+ $db = Factory::getDbo();
+ $prefix = $db->getPrefix();
+
+ // Re-enable all MokoWaaS extensions (may have been overwritten by old snapshot)
+ $elements = [
+ $db->quote('pkg_mokowaas'),
+ $db->quote('mokowaas'),
+ $db->quote('com_mokowaas'),
+ $db->quote('mokowaasdemo'),
+ $db->quote('perfectpublisher'),
+ ];
+
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__extensions'))
+ ->set($db->quoteName('enabled') . ' = 1')
+ ->set($db->quoteName('protected') . ' = 1')
+ ->set($db->quoteName('locked') . ' = 0')
+ ->where($db->quoteName('element') . ' IN (' . implode(',', $elements) . ')')
+ );
+ $db->execute();
+
+ // If the task plugin isn't registered, add it
+ $db->setQuery(
+ $db->getQuery(true)
+ ->select('COUNT(*)')
+ ->from($db->quoteName('#__extensions'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaasdemo'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ );
+
+ if ((int) $db->loadResult() === 0)
+ {
+ $obj = (object) [
+ 'name' => 'Task - MokoWaaS Demo Reset',
+ 'type' => 'plugin',
+ 'element' => 'mokowaasdemo',
+ 'folder' => 'task',
+ 'client_id' => 0,
+ 'enabled' => 1,
+ 'protected' => 1,
+ 'locked' => 0,
+ 'access' => 1,
+ 'params' => '{}',
+ ];
+ $db->insertObject('#__extensions', $obj);
+ }
+
+ // Ensure the scheduled task exists and is enabled
+ $db->setQuery(
+ $db->getQuery(true)
+ ->select($db->quoteName('id'))
+ ->from($db->quoteName('#__scheduler_tasks'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('mokowaas.demo.reset'))
+ );
+ $taskId = (int) $db->loadResult();
+
+ if ($taskId > 0)
+ {
+ // Re-enable and update next_execution to now so it stays active
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__scheduler_tasks'))
+ ->set($db->quoteName('state') . ' = 1')
+ ->where($db->quoteName('id') . ' = ' . $taskId)
+ );
+ $db->execute();
+ }
+
+ // Re-enable the update server
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__update_sites'))
+ ->set($db->quoteName('enabled') . ' = 1')
+ ->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%')
+ . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')')
+ );
+ $db->execute();
+ }
+ catch (\Throwable $e)
+ {
+ // Best effort — don't let registration failure break the restore
+ }
+ }
+
private function ensureSnapshotDir(): void
{
if (!is_dir($this->snapshotDir))
diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml
index 900de19..2af10e1 100644
--- a/src/packages/plg_system_mokowaas/mokowaas.xml
+++ b/src/packages/plg_system_mokowaas/mokowaas.xml
@@ -30,7 +30,7 @@
GNU General Public License version 3 or later; see LICENSE.md
hello@mokoconsulting.tech
https://mokoconsulting.tech
-
02.27.00
+
02.26.09-dev
This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform.
Moko\Plugin\System\MokoWaaS
script.php
diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php
index 484d734..0d8306f 100644
--- a/src/packages/plg_system_mokowaas/script.php
+++ b/src/packages/plg_system_mokowaas/script.php
@@ -22,7 +22,7 @@
* DEFGROUP: Joomla.Plugin
* INGROUP: MokoWaaS
* REPO: https://github.com/mokoconsulting-tech/mokowaas
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* PATH: /src/script.php
* BRIEF: Installation script for MokoWaaS plugin
* NOTE: Handles installation, update, and uninstallation tasks including language override deployment
diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php
index fc4e9fc..d76177a 100644
--- a/src/packages/plg_system_mokowaas/services/provider.php
+++ b/src/packages/plg_system_mokowaas/services/provider.php
@@ -22,7 +22,7 @@
* DEFGROUP: Joomla.Plugin
* INGROUP: MokoWaaS
* REPO: https://github.com/mokoconsulting-tech/mokowaas
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* PATH: /src/services/provider.php
* BRIEF: Service provider for dependency injection in Joomla 5.x
* NOTE: Registers the plugin with Joomla's DI container
diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml
index a82b764..073d3f1 100644
--- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml
+++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml
@@ -12,7 +12,7 @@
GNU General Public License version 3 or later; see LICENSE
hello@mokoconsulting.tech
https://mokoconsulting.tech
-
02.27.00
+
02.26.09-dev
PLG_TASK_MOKOWAASDEMO_DESC
Moko\Plugin\Task\MokoWaaSDemo
diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml
index 6bfa5db..6191c99 100644
--- a/src/packages/plg_webservices_mokowaas/mokowaas.xml
+++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml
@@ -7,7 +7,7 @@
GPL-3.0-or-later
hello@mokoconsulting.tech
https://mokoconsulting.tech
-
02.27.00
+
02.26.09-dev
Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info.
Moko\Plugin\WebServices\MokoWaaS
diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml
index 8039a97..d8cd47d 100644
--- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml
+++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml
@@ -7,7 +7,7 @@
GPL-3.0-or-later
hello@mokoconsulting.tech
https://mokoconsulting.tech
- 02.27.00
+ 02.26.09-dev
Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds.
Moko\Plugin\WebServices\PerfectPublisher
diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php
index 16d5291..2edd34d 100644
--- a/src/packages/plg_webservices_perfectpublisher/services/provider.php
+++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php
@@ -8,7 +8,7 @@
* INGROUP: MokoWaaS
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS
* PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* BRIEF: DI service provider for Perfect Publisher Web Services plugin
*/
diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php
index 8b8e2d1..776169b 100644
--- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php
+++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php
@@ -8,7 +8,7 @@
* INGROUP: MokoWaaS
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS
* PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php
- * VERSION: 02.27.00
+ * VERSION: 02.26.09
* BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet)
*/
diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml
index 96a5574..09d8c37 100644
--- a/src/pkg_mokowaas.xml
+++ b/src/pkg_mokowaas.xml
@@ -2,7 +2,7 @@
Package - MokoWaaS
mokowaas
- 02.27.00
+ 02.26.09-dev
2026-05-23
Moko Consulting
hello@mokoconsulting.tech