friendica/mod/uexport.php
Andrej Stieben db949bb802 Updated modules to allow for partial overrides without errors
Only define functions if they have not been defined before, e.g. in themes. This makes it possible to override parts of a module and still use the other functions.
2016-02-05 21:52:39 +01:00

212 lines
5.2 KiB
PHP

<?php
if(! function_exists('uexport_init')) {
function uexport_init(&$a) {
if(! local_user())
killme();
require_once("mod/settings.php");
settings_init($a);
/*
$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,
));
*/
}
}
if(! function_exists('uexport_content')) {
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
));
}
}
if(! function_exists('_uexport_multirow')) {
function _uexport_multirow($query) {
$result = array();
$r = q($query);
// if(count($r)) {
if ($r){
foreach($r as $rr){
$p = array();
foreach($rr as $k => $v)
$p[$k] = $v;
$result[] = $p;
}
}
return $result;
}
}
if(! function_exists('_uexport_row')) {
function _uexport_row($query) {
$result = array();
$r = q($query);
if ($r) {
foreach($r as $rr)
foreach($rr as $k => $v)
$result[$k] = $v;
}
return $result;
}
}
if(! function_exists('uexport_account')) {
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
*/
if(! function_exists('uexport_all')) {
function uexport_all(&$a) {
uexport_account($a);
echo "\n";
$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' => $r);
echo json_encode($output)."\n";
}
}
}