65d235017c
export basic account data as json import basic account data in db (dbs must be at same schema version)
197 lines
No EOL
4.9 KiB
PHP
197 lines
No EOL
4.9 KiB
PHP
<?php
|
|
|
|
|
|
function uexport_init(&$a){
|
|
if(! local_user())
|
|
killme();
|
|
|
|
$tabs = array(
|
|
array(
|
|
'label' => t('Account settings'),
|
|
'url' => $a->get_baseurl(true).'/settings',
|
|
'selected' => '',
|
|
),
|
|
array(
|
|
'label' => t('Display settings'),
|
|
'url' => $a->get_baseurl(true).'/settings/display',
|
|
'selected' =>'',
|
|
),
|
|
|
|
array(
|
|
'label' => t('Connector settings'),
|
|
'url' => $a->get_baseurl(true).'/settings/connectors',
|
|
'selected' => '',
|
|
),
|
|
array(
|
|
'label' => t('Plugin settings'),
|
|
'url' => $a->get_baseurl(true).'/settings/addon',
|
|
'selected' => '',
|
|
),
|
|
array(
|
|
'label' => t('Connected apps'),
|
|
'url' => $a->get_baseurl(true) . '/settings/oauth',
|
|
'selected' => '',
|
|
),
|
|
array(
|
|
'label' => t('Export personal data'),
|
|
'url' => $a->get_baseurl(true) . '/uexport',
|
|
'selected' => 'active'
|
|
),
|
|
array(
|
|
'label' => t('Remove account'),
|
|
'url' => $a->get_baseurl(true) . '/removeme',
|
|
'selected' => ''
|
|
)
|
|
);
|
|
|
|
$tabtpl = get_markup_template("generic_links_widget.tpl");
|
|
$a->page['aside'] = replace_macros($tabtpl, array(
|
|
'$title' => t('Settings'),
|
|
'$class' => 'settings-widget',
|
|
'$items' => $tabs,
|
|
));
|
|
}
|
|
|
|
function uexport_content(&$a){
|
|
|
|
if ($a->argc > 1) {
|
|
header("Content-type: application/json");
|
|
header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
|
|
switch($a->argv[1]) {
|
|
case "backup": uexport_all($a); killme(); break;
|
|
case "account": uexport_account($a); killme(); break;
|
|
default:
|
|
killme();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* options shown on "Export personal data" page
|
|
* list of array( 'link url', 'link text', 'help text' )
|
|
*/
|
|
$options = array(
|
|
array('/uexport/account',t('Export account'),t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')),
|
|
array('/uexport/backup',t('Export all'),t('Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)')),
|
|
);
|
|
call_hooks('uexport_options', $options);
|
|
|
|
$tpl = get_markup_template("uexport.tpl");
|
|
return replace_macros($tpl, array(
|
|
'$baseurl' => $a->get_baseurl(),
|
|
'$title' => t('Export personal data'),
|
|
'$options' => $options
|
|
));
|
|
|
|
|
|
}
|
|
|
|
function _uexport_multirow($query) {
|
|
$result = array();
|
|
$r = q($query);
|
|
if(count($r)) {
|
|
foreach($r as $rr){
|
|
$p = array();
|
|
foreach($rr as $k => $v)
|
|
$p[$k] = $v;
|
|
$result[] = $p;
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function _uexport_row($query) {
|
|
$result = array();
|
|
$r = q($query);
|
|
if(count($r)) {
|
|
foreach($r as $rr)
|
|
foreach($rr as $k => $v)
|
|
$result[$k] = $v;
|
|
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
function uexport_account($a){
|
|
|
|
$user = _uexport_row(
|
|
sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) )
|
|
);
|
|
|
|
$contact = _uexport_multirow(
|
|
sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) )
|
|
);
|
|
|
|
|
|
$profile =_uexport_multirow(
|
|
sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
|
|
);
|
|
|
|
$photo = _uexport_multirow(
|
|
sprintf( "SELECT * FROM photo WHERE uid = %d AND profile = 1", intval(local_user()) )
|
|
);
|
|
foreach ($photo as &$p) $p['data'] = bin2hex($p['data']);
|
|
|
|
$pconfig = _uexport_multirow(
|
|
sprintf( "SELECT * FROM pconfig WHERE uid = %d",intval(local_user()) )
|
|
);
|
|
|
|
$group = _uexport_multirow(
|
|
sprintf( "SELECT * FROM group WHERE uid = %d",intval(local_user()) )
|
|
);
|
|
|
|
$group_member = _uexport_multirow(
|
|
sprintf( "SELECT * FROM group_member WHERE uid = %d",intval(local_user()) )
|
|
);
|
|
|
|
$output = array(
|
|
'version' => FRIENDICA_VERSION,
|
|
'schema' => DB_UPDATE_VERSION,
|
|
'baseurl' => $a->get_baseurl(),
|
|
'user' => $user,
|
|
'contact' => $contact,
|
|
'profile' => $profile,
|
|
'photo' => $photo,
|
|
'pconfig' => $pconfig,
|
|
'group' => $group,
|
|
'group_member' => $group_member,
|
|
);
|
|
|
|
//echo "<pre>"; var_dump(json_encode($output)); killme();
|
|
echo json_encode($output);
|
|
|
|
}
|
|
|
|
/**
|
|
* echoes account data and items as separated json, one per line
|
|
*/
|
|
function uexport_all(&$a) {
|
|
|
|
uexport_account($a);
|
|
|
|
$r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
|
|
intval(local_user())
|
|
);
|
|
if(count($r))
|
|
$total = $r[0]['total'];
|
|
|
|
// chunk the output to avoid exhausting memory
|
|
|
|
for($x = 0; $x < $total; $x += 500) {
|
|
$item = array();
|
|
$r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
|
|
intval(local_user()),
|
|
intval($x),
|
|
intval(500)
|
|
);
|
|
if(count($r)) {
|
|
foreach($r as $rr)
|
|
foreach($rr as $k => $v)
|
|
$item[][$k] = $v;
|
|
}
|
|
|
|
$output = array('item' => $item);
|
|
echo json_encode($output);
|
|
}
|
|
|
|
} |