From 84e209f1e09cdbb39847e49f25807cf94623bd1a Mon Sep 17 00:00:00 2001 From: Thomas Schmidt Date: Thu, 29 Sep 2011 17:11:07 +0200 Subject: [PATCH] added app for admins to create a zipfile containing the owncloud data --- apps/admin_export/appinfo/app.php | 33 +++++++++ apps/admin_export/appinfo/info.xml | 10 +++ apps/admin_export/settings.php | 94 ++++++++++++++++++++++++ apps/admin_export/templates/settings.php | 13 ++++ 4 files changed, 150 insertions(+) create mode 100644 apps/admin_export/appinfo/app.php create mode 100644 apps/admin_export/appinfo/info.xml create mode 100644 apps/admin_export/settings.php create mode 100644 apps/admin_export/templates/settings.php diff --git a/apps/admin_export/appinfo/app.php b/apps/admin_export/appinfo/app.php new file mode 100644 index 00000000000..beebb4864e9 --- /dev/null +++ b/apps/admin_export/appinfo/app.php @@ -0,0 +1,33 @@ +. +* +*/ + + +OC_APP::registerAdmin('admin_export','settings'); + +// add settings page to navigation +$entry = array( + 'id' => "admin_export_settings", + 'order'=>1, + 'href' => OC_Helper::linkTo( "admin_export", "settings.php" ), + 'name' => 'Export' +); diff --git a/apps/admin_export/appinfo/info.xml b/apps/admin_export/appinfo/info.xml new file mode 100644 index 00000000000..c4a2a9b398c --- /dev/null +++ b/apps/admin_export/appinfo/info.xml @@ -0,0 +1,10 @@ + + + admin_export + Import/Export + Import/Export your owncloud data + 0.1 + AGPL + Thomas Schmidt + 2 + diff --git a/apps/admin_export/settings.php b/apps/admin_export/settings.php new file mode 100644 index 00000000000..2d1bc66a296 --- /dev/null +++ b/apps/admin_export/settings.php @@ -0,0 +1,94 @@ +. + * + */ +if (isset($_POST['admin_export'])) { + $root = OC::$SERVERROOT . "/"; + $zip = new ZipArchive(); + $filename = sys_get_temp_dir() . "/owncloud_export_" . date("y-m-d_H-i-s") . ".zip"; + error_log("Creating export file at: " . $filename); + if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) { + exit("Cannot open <$filename>\n"); + } + + if (isset($_POST['owncloud_system'])) { + // adding owncloud system files + error_log("Adding owncloud system files to export"); + zipAddDir($root, $zip, false); + foreach (array(".git", "3rdparty", "apps", "core", "files", "l10n", "lib", "ocs", "search", "settings", "tests") as $dirname) { + zipAddDir($root . $dirname, $zip, true, basename($root) . "/"); + } + } + + if (isset($_POST['owncloud_config'])) { + // adding owncloud config + // todo: add database export + error_log("Adding owncloud config to export"); + zipAddDir($root . "config/", $zip, true, basename($root) . "/"); + $zip->addFile($root . '/data/.htaccess', basename($root) . "/data/owncloud.db"); + } + + if (isset($_POST['user_files'])) { + // adding user files + $zip->addFile($root . '/data/.htaccess', basename($root) . "/data/.htaccess"); + $zip->addFile($root . '/data/index.html', basename($root) . "/data/index.html"); + foreach (OC_User::getUsers() as $i) { + error_log("Adding owncloud user files of $i to export"); + zipAddDir($root . "data/" . $i, $zip, true, basename($root) . "/data/"); + } + } + + $zip->close(); + + header("Content-Type: application/zip"); + header("Content-Disposition: attachment; filename=" . basename($filename)); + header("Content-Length: " . filesize($filename)); + ob_end_clean(); + readfile($filename); + unlink($filename); +} else { +// fill template + $tmpl = new OC_Template('admin_export', 'settings'); + return $tmpl->fetchPage(); +} + +function zipAddDir($dir, $zip, $recursive=true, $internalDir='') { + $dirname = basename($dir); + $zip->addEmptyDir($internalDir . $dirname); + $internalDir.=$dirname.='/'; + + if ($dirhandle = opendir($dir)) { + while (false !== ( $file = readdir($dirhandle))) { + + if (( $file != '.' ) && ( $file != '..' )) { + + if (is_dir($dir . '/' . $file) && $recursive) { + zipAddDir($dir . '/' . $file, $zip, $recursive, $internalDir); + } elseif (is_file($dir . '/' . $file)) { + $zip->addFile($dir . '/' . $file, $internalDir . $file); + } + } + } + closedir($dirhandle); + } else { + error_log("Was not able to open directory: " . $dir); + } +} \ No newline at end of file diff --git a/apps/admin_export/templates/settings.php b/apps/admin_export/templates/settings.php new file mode 100644 index 00000000000..a65b17ce26f --- /dev/null +++ b/apps/admin_export/templates/settings.php @@ -0,0 +1,13 @@ +
+
+ Export this ownCloud instance +

This will create a compressed file that contains the data of this owncloud instance. + Please choose which components should be included: +

+


+
+ +

+ +
+
-- 2.39.5