adopted some change requests
This commit is contained in:
parent
10a66f368c
commit
2ed61194d5
1 changed files with 45 additions and 40 deletions
|
@ -34,25 +34,8 @@ class Uexport extends BaseSettingsModule
|
||||||
public static function content()
|
public static function content()
|
||||||
{
|
{
|
||||||
parent::content();
|
parent::content();
|
||||||
$args = self::getClass(Arguments::class);
|
|
||||||
if ($args->getArgc() == 3) {
|
self::rawContent();
|
||||||
// @TODO Replace with router-provided arguments
|
|
||||||
$action = $args->get(2);
|
|
||||||
header("Content-type: application/json");
|
|
||||||
header('Content-Disposition: attachment; filename="' . $a->user['nickname'] . '.' . $action . '"');
|
|
||||||
switch ($action) {
|
|
||||||
case "backup":
|
|
||||||
self::uexport_all($a);
|
|
||||||
exit();
|
|
||||||
break;
|
|
||||||
case "account":
|
|
||||||
self::uexport_account($a);
|
|
||||||
exit();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* options shown on "Export personal data" page
|
* options shown on "Export personal data" page
|
||||||
|
@ -70,8 +53,36 @@ class Uexport extends BaseSettingsModule
|
||||||
'$options' => $options
|
'$options' => $options
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
private function uexport_multirow($query) {
|
/**
|
||||||
global $dbStructure;
|
* raw content generated for the different choices made
|
||||||
|
* by the user. At the moment this returns a JSON file
|
||||||
|
* to the browser which then offers a save / open dialog
|
||||||
|
* to the user.
|
||||||
|
**/
|
||||||
|
public static function rawContent() {
|
||||||
|
$args = self::getClass(Arguments::class);
|
||||||
|
if ($args->getArgc() == 3) {
|
||||||
|
// @TODO Replace with router-provided arguments
|
||||||
|
$action = $args->get(2);
|
||||||
|
$user = self::getApp()->user;
|
||||||
|
header("Content-type: application/json");
|
||||||
|
header('Content-Disposition: attachment; filename="' . $user['nickname'] . '.' . $action . '"');
|
||||||
|
switch ($action) {
|
||||||
|
case "backup":
|
||||||
|
self::exportAll(self::getApp());
|
||||||
|
exit();
|
||||||
|
break;
|
||||||
|
case "account":
|
||||||
|
self::exportAccount(self::getApp());
|
||||||
|
exit();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static function exportMultiRow(string $query) {
|
||||||
|
$dbStructure = DBStructure::definition(self::getApp()->getBasePath(), false);
|
||||||
|
|
||||||
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
|
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
|
||||||
$table = $match[1];
|
$table = $match[1];
|
||||||
|
@ -97,8 +108,8 @@ class Uexport extends BaseSettingsModule
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function uexport_row($query) {
|
private static function exportRow(string $query) {
|
||||||
global $dbStructure;
|
$dbStructure = DBStructure::definition(self::getApp()->getBasePath(), false);
|
||||||
|
|
||||||
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
|
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
|
||||||
$table = $match[1];
|
$table = $match[1];
|
||||||
|
@ -123,37 +134,37 @@ class Uexport extends BaseSettingsModule
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function uexport_account($a) {
|
private static function exportAccount(App $a) {
|
||||||
|
|
||||||
$user = self::uexport_row(
|
$user = self::exportRow(
|
||||||
sprintf("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()))
|
sprintf("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
$contact = self::uexport_multirow(
|
$contact = self::exportMultiRow(
|
||||||
sprintf("SELECT * FROM `contact` WHERE `uid` = %d ", intval(local_user()))
|
sprintf("SELECT * FROM `contact` WHERE `uid` = %d ", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
$profile = self::uexport_multirow(
|
$profile = self::exportMultiRow(
|
||||||
sprintf("SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()))
|
sprintf("SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
$photo = self::uexport_multirow(
|
$photo = self::exportMultiRow(
|
||||||
sprintf("SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()))
|
sprintf("SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()))
|
||||||
);
|
);
|
||||||
foreach ($photo as &$p) {
|
foreach ($photo as &$p) {
|
||||||
$p['data'] = bin2hex($p['data']);
|
$p['data'] = bin2hex($p['data']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$pconfig = self::uexport_multirow(
|
$pconfig = self::exportMultiRow(
|
||||||
sprintf("SELECT * FROM `pconfig` WHERE uid = %d", intval(local_user()))
|
sprintf("SELECT * FROM `pconfig` WHERE uid = %d", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
$group = self::uexport_multirow(
|
$group = self::exportMultiRow(
|
||||||
sprintf("SELECT * FROM `group` WHERE uid = %d", intval(local_user()))
|
sprintf("SELECT * FROM `group` WHERE uid = %d", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
$group_member = self::uexport_multirow(
|
$group_member = self::exportMultiRow(
|
||||||
sprintf("SELECT `group_member`.`gid`, `group_member`.`contact-id` FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` WHERE `group`.`uid` = %d", intval(local_user()))
|
sprintf("SELECT `group_member`.`gid`, `group_member`.`contact-id` FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` WHERE `group`.`uid` = %d", intval(local_user()))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -179,18 +190,12 @@ class Uexport extends BaseSettingsModule
|
||||||
* @param App $a
|
* @param App $a
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function uexport_all(App $a) {
|
private static function exportAll(App $a) {
|
||||||
|
|
||||||
self::uexport_account($a);
|
self::exportAccount($a);
|
||||||
echo "\n";
|
echo "\n";
|
||||||
|
|
||||||
$total = 0;
|
$total = DBA::count('item', ['uid' => local_user()]);
|
||||||
$r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
|
|
||||||
intval(local_user())
|
|
||||||
);
|
|
||||||
if (DBA::isResult($r)) {
|
|
||||||
$total = $r[0]['total'];
|
|
||||||
}
|
|
||||||
// chunk the output to avoid exhausting memory
|
// chunk the output to avoid exhausting memory
|
||||||
|
|
||||||
for ($x = 0; $x < $total; $x += 500) {
|
for ($x = 0; $x < $total; $x += 500) {
|
||||||
|
|
Loading…
Reference in a new issue