3 if(! function_exists('uexport_init')) {
4 function uexport_init(&$a) {
8 require_once("mod/settings.php");
14 'label' => t('Account settings'),
15 'url' => $a->get_baseurl(true).'/settings',
19 'label' => t('Display settings'),
20 'url' => $a->get_baseurl(true).'/settings/display',
25 'label' => t('Connector settings'),
26 'url' => $a->get_baseurl(true).'/settings/connectors',
30 'label' => t('Plugin settings'),
31 'url' => $a->get_baseurl(true).'/settings/addon',
35 'label' => t('Connected apps'),
36 'url' => $a->get_baseurl(true) . '/settings/oauth',
40 'label' => t('Export personal data'),
41 'url' => $a->get_baseurl(true) . '/uexport',
42 'selected' => 'active'
45 'label' => t('Remove account'),
46 'url' => $a->get_baseurl(true) . '/removeme',
51 $tabtpl = get_markup_template("generic_links_widget.tpl");
52 $a->page['aside'] = replace_macros($tabtpl, array(
53 '$title' => t('Settings'),
54 '$class' => 'settings-widget',
61 if(! function_exists('uexport_content')) {
62 function uexport_content(&$a) {
65 header("Content-type: application/json");
66 header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
68 case "backup": uexport_all($a); killme(); break;
69 case "account": uexport_account($a); killme(); break;
76 * options shown on "Export personal data" page
77 * list of array( 'link url', 'link text', 'help text' )
80 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.')),
81 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)')),
83 call_hooks('uexport_options', $options);
85 $tpl = get_markup_template("uexport.tpl");
86 return replace_macros($tpl, array(
87 '$baseurl' => $a->get_baseurl(),
88 '$title' => t('Export personal data'),
89 '$options' => $options
95 if(! function_exists('_uexport_multirow')) {
96 function _uexport_multirow($query) {
103 foreach($rr as $k => $v)
112 if(! function_exists('_uexport_row')) {
113 function _uexport_row($query) {
118 foreach($rr as $k => $v)
126 if(! function_exists('uexport_account')) {
127 function uexport_account($a) {
129 $user = _uexport_row(
130 sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) )
133 $contact = _uexport_multirow(
134 sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) )
138 $profile =_uexport_multirow(
139 sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
142 $photo = _uexport_multirow(
143 sprintf( "SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()) )
145 foreach ($photo as &$p) $p['data'] = bin2hex($p['data']);
147 $pconfig = _uexport_multirow(
148 sprintf( "SELECT * FROM `pconfig` WHERE uid = %d",intval(local_user()) )
151 $group = _uexport_multirow(
152 sprintf( "SELECT * FROM `group` WHERE uid = %d",intval(local_user()) )
155 $group_member = _uexport_multirow(
156 sprintf( "SELECT * FROM `group_member` WHERE uid = %d",intval(local_user()) )
160 'version' => FRIENDICA_VERSION,
161 'schema' => DB_UPDATE_VERSION,
162 'baseurl' => $a->get_baseurl(),
164 'contact' => $contact,
165 'profile' => $profile,
167 'pconfig' => $pconfig,
169 'group_member' => $group_member,
172 //echo "<pre>"; var_dump(json_encode($output)); killme();
173 echo json_encode($output);
178 * echoes account data and items as separated json, one per line
180 if(! function_exists('uexport_all')) {
181 function uexport_all(&$a) {
186 $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
190 $total = $r[0]['total'];
192 // chunk the output to avoid exhausting memory
194 for($x = 0; $x < $total; $x += 500) {
196 $r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
197 intval(local_user()),
203 foreach($rr as $k => $v)
207 $output = array('item' => $r);
208 echo json_encode($output)."\n";