2011-03-22 06:07:46 -04:00
< ? php
2012-10-17 11:13:01 -04:00
function uexport_init ( & $a ){
2011-03-22 06:07:46 -04:00
if ( ! local_user ())
killme ();
2012-10-17 11:13:01 -04:00
$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' => ''
)
2011-03-22 06:07:46 -04:00
);
2012-10-17 11:13:01 -04:00
$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 );
2011-03-22 06:07:46 -04:00
if ( count ( $r )) {
2012-10-17 11:13:01 -04:00
foreach ( $r as $rr ){
$p = array ();
2011-03-22 06:07:46 -04:00
foreach ( $rr as $k => $v )
2012-10-17 11:13:01 -04:00
$p [ $k ] = $v ;
$result [] = $p ;
}
2011-03-22 06:07:46 -04:00
}
2012-10-17 11:13:01 -04:00
return $result ;
}
function _uexport_row ( $query ) {
$result = array ();
$r = q ( $query );
2011-03-22 06:07:46 -04:00
if ( count ( $r )) {
foreach ( $r as $rr )
foreach ( $rr as $k => $v )
2012-10-17 11:13:01 -04:00
$result [ $k ] = $v ;
2011-03-22 06:07:46 -04:00
}
2012-10-17 11:13:01 -04:00
return $result ;
}
2011-03-22 06:07:46 -04:00
2012-10-17 11:13:01 -04:00
function uexport_account ( $a ){
$user = _uexport_row (
sprintf ( " SELECT * FROM `user` WHERE `uid` = %d LIMIT 1 " , intval ( local_user ()) )
2011-03-22 06:07:46 -04:00
);
2012-10-17 11:13:01 -04:00
$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' ]);
2011-03-22 06:07:46 -04:00
2012-10-17 11:13:01 -04:00
$pconfig = _uexport_multirow (
sprintf ( " SELECT * FROM pconfig WHERE uid = %d " , intval ( local_user ()) )
);
2011-03-22 06:07:46 -04:00
2012-10-17 11:13:01 -04:00
$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();
2011-06-02 23:42:09 -04:00
echo json_encode ( $output );
2011-03-22 06:07:46 -04:00
2012-10-17 11:13:01 -04:00
}
/**
* echoes account data and items as separated json , one per line
*/
function uexport_all ( & $a ) {
uexport_account ( $a );
2011-03-22 19:19:00 -04:00
$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 );
2011-06-02 23:42:09 -04:00
echo json_encode ( $output );
2011-03-22 19:19:00 -04:00
}
2011-03-22 06:07:46 -04:00
}