]> git.mxchange.org Git - friendica.git/blob - mod/uexport.php
Merge pull request #525 from fabrixxm/moveme
[friendica.git] / mod / uexport.php
1 <?php
2
3
4 function uexport_init(&$a){
5         if(! local_user())
6                 killme();
7         
8         $tabs = array(
9                 array(
10                         'label' => t('Account settings'),
11                         'url'   => $a->get_baseurl(true).'/settings',
12                         'selected'      => '',
13                 ),      
14                 array(
15                         'label' => t('Display settings'),
16                         'url'   => $a->get_baseurl(true).'/settings/display',
17                         'selected'      =>'',
18                 ),      
19                 
20                 array(
21                         'label' => t('Connector settings'),
22                         'url'   => $a->get_baseurl(true).'/settings/connectors',
23                         'selected'      => '',
24                 ),
25                 array(
26                         'label' => t('Plugin settings'),
27                         'url'   => $a->get_baseurl(true).'/settings/addon',
28                         'selected'      => '',
29                 ),
30                 array(
31                         'label' => t('Connected apps'),
32                         'url' => $a->get_baseurl(true) . '/settings/oauth',
33                         'selected' => '',
34                 ),
35                 array(
36                         'label' => t('Export personal data'),
37                         'url' => $a->get_baseurl(true) . '/uexport',
38                         'selected' => 'active'
39                 ),
40                 array(
41                         'label' => t('Remove account'),
42                         'url' => $a->get_baseurl(true) . '/removeme',
43                         'selected' => ''
44                 )
45         );
46         
47         $tabtpl = get_markup_template("generic_links_widget.tpl");
48         $a->page['aside'] = replace_macros($tabtpl, array(
49                 '$title' => t('Settings'),
50                 '$class' => 'settings-widget',
51                 '$items' => $tabs,
52         ));
53 }
54
55 function uexport_content(&$a){
56     
57     if ($a->argc > 1) {
58         header("Content-type: application/json");
59         header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
60         switch($a->argv[1]) {
61             case "backup": uexport_all($a); killme(); break;
62             case "account": uexport_account($a); killme(); break;
63             default:
64                 killme();
65         }
66     }
67
68     /**
69       * options shown on "Export personal data" page
70       * list of array( 'link url', 'link text', 'help text' )
71       */
72     $options = array(
73             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.')),
74             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     );
76     call_hooks('uexport_options', $options);
77         
78     $tpl = get_markup_template("uexport.tpl");
79     return replace_macros($tpl, array(
80         '$baseurl' => $a->get_baseurl(),
81         '$title' => t('Export personal data'),
82         '$options' => $options
83     ));
84     
85     
86 }
87
88 function _uexport_multirow($query) {
89         $result = array();
90         $r = q($query);
91         if(count($r)) {
92                 foreach($r as $rr){
93             $p = array();
94                         foreach($rr as $k => $v)
95                                 $p[$k] = $v;
96             $result[] = $p;
97         }
98         }
99     return $result;
100 }
101
102 function _uexport_row($query) {
103         $result = array();
104         $r = q($query);
105         if(count($r)) {
106                 foreach($r as $rr)
107                         foreach($rr as $k => $v)
108                                 $result[$k] = $v;
109
110         }
111     return $result;
112 }
113
114
115 function uexport_account($a){
116
117         $user = _uexport_row(
118         sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) )
119         );
120     
121         $contact = _uexport_multirow(
122         sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) )
123         );
124
125
126         $profile =_uexport_multirow(
127         sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
128         );
129
130     $photo = _uexport_multirow(
131         sprintf( "SELECT * FROM photo WHERE uid = %d AND profile = 1", intval(local_user()) )
132     );
133     foreach ($photo as &$p) $p['data'] = bin2hex($p['data']);
134
135     $pconfig = _uexport_multirow(
136         sprintf( "SELECT * FROM pconfig WHERE uid = %d",intval(local_user()) )
137     );
138
139     $group = _uexport_multirow(
140         sprintf( "SELECT * FROM group WHERE uid = %d",intval(local_user()) )
141     );
142     
143     $group_member = _uexport_multirow(
144         sprintf( "SELECT * FROM group_member WHERE uid = %d",intval(local_user()) )
145     );
146
147         $output = array(
148         'version' => FRIENDICA_VERSION,
149         'schema' => DB_UPDATE_VERSION,
150         'baseurl' => $a->get_baseurl(),
151         'user' => $user, 
152         'contact' => $contact, 
153         'profile' => $profile, 
154         'photo' => $photo,
155         'pconfig' => $pconfig,
156         'group' => $group,
157         'group_member' => $group_member,
158     );
159
160     //echo "<pre>"; var_dump(json_encode($output)); killme();
161         echo json_encode($output);
162
163 }
164
165 /**
166  * echoes account data and items as separated json, one per line
167  */
168 function uexport_all(&$a) {
169     
170     uexport_account($a);
171
172         $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
173                 intval(local_user())
174         );
175         if(count($r))
176                 $total = $r[0]['total'];
177
178         // chunk the output to avoid exhausting memory
179
180         for($x = 0; $x < $total; $x += 500) {
181                 $item = array();
182                 $r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
183                         intval(local_user()),
184                         intval($x),
185                         intval(500)
186                 );
187                 if(count($r)) {
188                         foreach($r as $rr)
189                                 foreach($rr as $k => $v)
190                                         $item[][$k] = $v;
191                 }
192
193                 $output = array('item' => $item);
194                 echo json_encode($output);
195         }
196
197 }