From c1017499e4fcdc55a9f17ce3841d399abe9870c6 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Tue, 28 Nov 2023 10:25:36 +0100 Subject: [PATCH] Improved example plugin to test for admin section --- plugins/backup/index.php | 38 ++++++++++++++++++++++-- plugins/backup/js/BackupAdminSettings.js | 9 +++++- plugins/example/index.php | 6 ++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/plugins/backup/index.php b/plugins/backup/index.php index 82759cc71..e9fa9c644 100644 --- a/plugins/backup/index.php +++ b/plugins/backup/index.php @@ -17,12 +17,17 @@ class BackupPlugin extends \RainLoop\Plugins\AbstractPlugin { // Admin Settings tab $this->addJs('js/BackupAdminSettings.js', true); // add js file - $this->addJsonHook('JsonAdminGetData', 'JsonAdminGetData'); + $this->addJsonHook('JsonAdminGetData'); + $this->addJsonHook('JsonAdminRestoreData'); $this->addTemplate('templates/BackupAdminSettingsTab.html', true); } public function JsonAdminGetData() { + if (!($this->Manager()->Actions() instanceof \RainLoop\ActionsAdmin)) { + return $this->jsonResponse(__FUNCTION__, false); + } + $sZipHash = \MailSo\Base\Utils::Sha1Rand(); $sZipFileName = APP_PRIVATE_DATA . $sZipHash . '.zip'; @@ -39,10 +44,39 @@ class BackupPlugin extends \RainLoop\Plugins\AbstractPlugin $oZip->addRecursive(APP_PRIVATE_DATA.'configs', 'configs'); $oZip->addRecursive(APP_PRIVATE_DATA.'domains', 'domains'); $oZip->addRecursive(APP_PRIVATE_DATA.'plugins', 'plugins'); + $oZip->addRecursive(APP_PRIVATE_DATA.'storage', 'storage'); $oZip->close(); + $data = \base64_encode(\file_get_contents($sZipFileName)); + \unlink($sZipFileName); + return $this->jsonResponse(__FUNCTION__, array( - 'zip' => \base64_encode(\file_get_contents($sZipFileName)) + 'zip' => $data )); } + + public function JsonAdminRestoreData() + { + if (!($this->Manager()->Actions() instanceof \RainLoop\ActionsAdmin) + || empty($_FILES['backup']) + || 'application/zip' !== $_FILES['backup']['type'] + || !\is_uploaded_file($_FILES['backup']['tmp_name']) + ) { + return $this->jsonResponse(__FUNCTION__, false); + } + + if (\class_exists('ZipArchive')) { + $oArchive = new \ZipArchive(); + $oArchive->open($_FILES['backup']['tmp_name'], \ZIPARCHIVE::CREATE); + $oArchive->extractTo(APP_PRIVATE_DATA); + } else if (\class_exists('PharData')) { + $oArchive = new \PharData($sTmp, 0, null, \Phar::GZ); + $oArchive->extractTo(APP_PRIVATE_DATA); + } + + return $this->jsonResponse(__FUNCTION__, array( + '$_FILES' => $_FILES + )); + } + } diff --git a/plugins/backup/js/BackupAdminSettings.js b/plugins/backup/js/BackupAdminSettings.js index bc7724980..870434cef 100644 --- a/plugins/backup/js/BackupAdminSettings.js +++ b/plugins/backup/js/BackupAdminSettings.js @@ -22,7 +22,7 @@ }); } else { var link = document.createElement("a"); - link.download = 'backup.zip'; + link.download = 'backup-' + Date.now() + '.zip'; link.href = 'data:application/zip;base64,' + oData.Result.zip; link.textContent = 'backup.zip'; this.viewModelDom.append(link); @@ -32,6 +32,13 @@ }, 'JsonAdminGetData'); } + + submitForm(form) { + form.reportValidity() + && rl.pluginRemoteRequest((iError, oData) => { + console.dir(oData); + }, 'JsonAdminRestoreData', new FormData(form)); + } } rl.addSettingsViewModelForAdmin(BackupAdminSettings, 'BackupAdminSettingsTab', diff --git a/plugins/example/index.php b/plugins/example/index.php index 55ccb0dcc..e9fe1deb0 100644 --- a/plugins/example/index.php +++ b/plugins/example/index.php @@ -48,7 +48,7 @@ class ExamplePlugin extends \RainLoop\Plugins\AbstractPlugin // Admin Settings tab $this->addJs('js/ExampleAdminSettings.js', true); // add js file - $this->addJsonHook('JsonAdminGetData', 'JsonAdminGetData'); + $this->addJsonHook('JsonAdminGetData', 'JsonAdminGetData', true); $this->addTemplate('templates/ExampleAdminSettingsTab.html', true); } @@ -82,6 +82,9 @@ class ExamplePlugin extends \RainLoop\Plugins\AbstractPlugin public function JsonAdminGetData() { + if ($this->Manager()->Actions() instanceof \RainLoop\ActionsAdmin) { + return $this->jsonResponse(__FUNCTION__, false); + } return $this->jsonResponse(__FUNCTION__, array( 'PHP' => \phpversion() )); @@ -172,7 +175,6 @@ class ExamplePlugin extends \RainLoop\Plugins\AbstractPlugin protected function configMapping() : array protected function jsonResponse(string $sFunctionName, $mData) - protected function replaceTemplate(string $sFile, bool $bAdminScope = false) : self $this->Manager() $this->Manager()->Actions()