diff --git a/source/packages/plg_task_mokosuitebackup/forms/run_snapshot.xml b/source/packages/plg_task_mokosuitebackup/forms/run_snapshot.xml new file mode 100644 index 00000000..e3e0dc73 --- /dev/null +++ b/source/packages/plg_task_mokosuitebackup/forms/run_snapshot.xml @@ -0,0 +1,16 @@ + + +
+
+ + + + + + +
+
diff --git a/source/packages/plg_task_mokosuitebackup/src/Extension/MokoSuiteBackupTask.php b/source/packages/plg_task_mokosuitebackup/src/Extension/MokoSuiteBackupTask.php index 4a0e020c..25421484 100644 --- a/source/packages/plg_task_mokosuitebackup/src/Extension/MokoSuiteBackupTask.php +++ b/source/packages/plg_task_mokosuitebackup/src/Extension/MokoSuiteBackupTask.php @@ -43,6 +43,11 @@ final class MokoSuiteBackupTask extends CMSPlugin implements SubscriberInterface 'method' => 'runBackupProfile', 'form' => 'run_profile', ], + 'mokosuitebackup.snapshot' => [ + 'langConstPrefix' => 'PLG_TASK_MOKOJOOMBACKUP_TASK_RUN_SNAPSHOT', + 'method' => 'runContentSnapshot', + 'form' => 'run_snapshot', + ], ]; public static function getSubscribedEvents(): array @@ -93,4 +98,51 @@ final class MokoSuiteBackupTask extends CMSPlugin implements SubscriberInterface return Status::KNOCKOUT; } + + /** + * Create a content snapshot using the configured content types. + * + * @param ExecuteTaskEvent $event The task execution event + * + * @return int Status::OK on success, Status::KNOCKOUT on failure + */ + private function runContentSnapshot(ExecuteTaskEvent $event): int + { + $params = $event->getArgument('params'); + $contentTypes = (array) ($params->content_types ?? ['articles', 'categories', 'modules']); + $descFormat = (string) ($params->description_format ?? '[date] Scheduled snapshot'); + + // Resolve placeholders in the description + $description = str_replace( + ['[date]', '[datetime]'], + [date('Y-m-d'), date('Y-m-d H:i:s')], + $descFormat + ); + + // Load the snapshot engine from the component + $engineFile = JPATH_ADMINISTRATOR . '/components/com_mokosuitebackup/src/Engine/SnapshotEngine.php'; + + if (!file_exists($engineFile)) { + $this->logTask('MokoSuiteBackup component not installed — cannot create snapshot.'); + + return Status::KNOCKOUT; + } + + if (!class_exists('\\Joomla\\Component\\MokoSuiteBackup\\Administrator\\Engine\\SnapshotEngine')) { + require_once $engineFile; + } + + $engine = new \Joomla\Component\MokoSuiteBackup\Administrator\Engine\SnapshotEngine(); + $result = $engine->create($contentTypes, $description); + + if ($result['success']) { + $this->logTask('Snapshot complete: ' . $result['message']); + + return Status::OK; + } + + $this->logTask('Snapshot failed: ' . $result['message']); + + return Status::KNOCKOUT; + } }