3 function uexport_init(&$a){
9 'label' => t('Account settings'),
10 'url' => $a->get_baseurl(true).'/settings',
14 'label' => t('Display settings'),
15 'url' => $a->get_baseurl(true).'/settings/display',
20 'label' => t('Connector settings'),
21 'url' => $a->get_baseurl(true).'/settings/connectors',
25 'label' => t('Plugin settings'),
26 'url' => $a->get_baseurl(true).'/settings/addon',
30 'label' => t('Connected apps'),
31 'url' => $a->get_baseurl(true) . '/settings/oauth',
35 'label' => t('Export personal data'),
36 'url' => $a->get_baseurl(true) . '/uexport',
37 'selected' => 'active'
40 'label' => t('Remove account'),
41 'url' => $a->get_baseurl(true) . '/removeme',
46 $tabtpl = get_markup_template("generic_links_widget.tpl");
47 $a->page['aside'] = replace_macros($tabtpl, array(
48 '$title' => t('Settings'),
49 '$class' => 'settings-widget',
54 function uexport_content(&$a){
57 header("Content-type: application/json");
58 header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
60 case "backup": uexport_all($a); killme(); break;
61 case "account": uexport_account($a); killme(); break;
68 * options shown on "Export personal data" page
69 * list of array( 'link url', 'link text', 'help text' )
72 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.')),
73 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)')),
75 call_hooks('uexport_options', $options);
77 $tpl = get_markup_template("uexport.tpl");
78 return replace_macros($tpl, array(
79 '$baseurl' => $a->get_baseurl(),
80 '$title' => t('Export personal data'),
81 '$options' => $options
87 function _uexport_multirow($query) {
94 foreach($rr as $k => $v)
102 function _uexport_row($query) {
107 foreach($rr as $k => $v)
115 function uexport_account($a){
117 $user = _uexport_row(
118 sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) )
121 $contact = _uexport_multirow(
122 sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) )
126 $profile =_uexport_multirow(
127 sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
130 $photo = _uexport_multirow(
131 sprintf( "SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()) )
133 foreach ($photo as &$p) $p['data'] = bin2hex($p['data']);
135 $pconfig = _uexport_multirow(
136 sprintf( "SELECT * FROM `pconfig` WHERE uid = %d",intval(local_user()) )
139 $group = _uexport_multirow(
140 sprintf( "SELECT * FROM `group` WHERE uid = %d",intval(local_user()) )
143 $group_member = _uexport_multirow(
144 sprintf( "SELECT * FROM `group_member` WHERE uid = %d",intval(local_user()) )
148 'version' => FRIENDICA_VERSION,
149 'schema' => DB_UPDATE_VERSION,
150 'baseurl' => $a->get_baseurl(),
152 'contact' => $contact,
153 'profile' => $profile,
155 'pconfig' => $pconfig,
157 'group_member' => $group_member,
160 //echo "<pre>"; var_dump(json_encode($output)); killme();
161 echo json_encode($output);
166 * echoes account data and items as separated json, one per line
168 function uexport_all(&$a) {
172 $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
176 $total = $r[0]['total'];
178 // chunk the output to avoid exhausting memory
180 for($x = 0; $x < $total; $x += 500) {
182 $r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
183 intval(local_user()),
189 foreach($rr as $k => $v)
193 $output = array('item' => $item);
194 echo json_encode($output);