diff --git a/plugins/backup/LICENSE b/plugins/backup/LICENSE new file mode 100644 index 000000000..f709b02e2 --- /dev/null +++ b/plugins/backup/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2016 RainLoop Team + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/backup/index.php b/plugins/backup/index.php new file mode 100644 index 000000000..82759cc71 --- /dev/null +++ b/plugins/backup/index.php @@ -0,0 +1,48 @@ +addJs('js/BackupAdminSettings.js', true); // add js file + $this->addJsonHook('JsonAdminGetData', 'JsonAdminGetData'); + $this->addTemplate('templates/BackupAdminSettingsTab.html', true); + } + + public function JsonAdminGetData() + { + $sZipHash = \MailSo\Base\Utils::Sha1Rand(); + $sZipFileName = APP_PRIVATE_DATA . $sZipHash . '.zip'; + + \touch(APP_PRIVATE_DATA.'cache/CACHEDIR.TAG'); + + if (\class_exists('ZipArchive')) { +// $oZip = new \ZipArchive(); +// $oZip->open($sZipFileName, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE); +// $oZip->setArchiveComment('SnappyMail/'.APP_VERSION); + } + + $oZip = new \SnappyMail\Stream\ZIP($sZipFileName); +// $oZip->addRecursive(APP_PRIVATE_DATA, '#/(cache.*)#'); + $oZip->addRecursive(APP_PRIVATE_DATA.'configs', 'configs'); + $oZip->addRecursive(APP_PRIVATE_DATA.'domains', 'domains'); + $oZip->addRecursive(APP_PRIVATE_DATA.'plugins', 'plugins'); + $oZip->close(); + + return $this->jsonResponse(__FUNCTION__, array( + 'zip' => \base64_encode(\file_get_contents($sZipFileName)) + )); + } +} diff --git a/plugins/backup/js/BackupAdminSettings.js b/plugins/backup/js/BackupAdminSettings.js new file mode 100644 index 000000000..bc7724980 --- /dev/null +++ b/plugins/backup/js/BackupAdminSettings.js @@ -0,0 +1,40 @@ + +(rl => { if (rl) { + + class BackupAdminSettings + { + constructor() + { + this.loading = ko.observable(false); + } + + backup() + { + this.loading(true); + rl.pluginRemoteRequest((iError, oData) => { + + this.loading(false); + + if (iError) { + console.error({ + iError: iError, + oData: oData + }); + } else { + var link = document.createElement("a"); + link.download = 'backup.zip'; + link.href = 'data:application/zip;base64,' + oData.Result.zip; + link.textContent = 'backup.zip'; + this.viewModelDom.append(link); + link.click(); + link.remove(); + } + + }, 'JsonAdminGetData'); + } + } + + rl.addSettingsViewModelForAdmin(BackupAdminSettings, 'BackupAdminSettingsTab', + 'Backup and Restore', 'Backup'); + +}})(window.rl);