]> git.mxchange.org Git - friendica.git/blobdiff - mod/uexport.php
add simple option for HTTPS in .htaccess
[friendica.git] / mod / uexport.php
index fdd7fcec64d4aaf0d1d757c8ddda1c1e0411f6f5..a44620a97657371691b8512573d066f4ea754632 100644 (file)
 <?php
 
-function uexport_init(&$a) {
-
+function uexport_init(&$a){
        if(! local_user())
                killme();
 
-       $user = array();
-       $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
-               local_user()
+       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' => ''
+               )
        );
-       if(count($r)) {
-               foreach($r as $rr)
-                       foreach($rr as $k => $v)
-                               $user[$k] = $v;
 
+       $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);
+//     if(count($r)) {
+       if ($r){
+               foreach($r as $rr){
+            $p = array();
+                       foreach($rr as $k => $v)
+                               $p[$k] = $v;
+            $result[] = $p;
+        }
        }
-       $contact = array();
-       $r = q("SELECT * FROM `contact` WHERE `uid` = %d ",
-               intval(local_user())
-       );
-       if(count($r)) {
+    return $result;
+}
+
+function _uexport_row($query) {
+       $result = array();
+       $r = q($query);
+       if ($r) {
                foreach($r as $rr)
                        foreach($rr as $k => $v)
-                               $contact[][$k] = $v;
+                               $result[$k] = $v;
 
        }
+    return $result;
+}
 
-       $profile = array();
-       $r = q("SELECT * FROM `profile` WHERE `uid` = %d ",
-               intval(local_user())
+
+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()) )
        );
-       if(count($r)) {
-               foreach($r as $rr)
-                       foreach($rr as $k => $v)
-                               $profile[][$k] = $v;
-       }
 
-       $output = array('user' => $user, 'contact' => $contact, 'profile' => $profile );
+    $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']);
 
-       header("Content-type: text/json");
-       echo str_replace('\\/','/',json_encode($output));
+    $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
+ */
+function uexport_all(&$a) {
+    
+    uexport_account($a);
+       echo "\n";
 
        $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
                intval(local_user())
@@ -56,17 +190,14 @@ function uexport_init(&$a) {
                        intval($x),
                        intval(500)
                );
-               if(count($r)) {
+               /*if(count($r)) {
                        foreach($r as $rr)
                                foreach($rr as $k => $v)
                                        $item[][$k] = $v;
-               }
+               }*/
 
-               $output = array('item' => $item);
-               echo str_replace('\\/','/',json_encode($output));
+               $output = array('item' => $r);
+               echo json_encode($output)."\n";
        }
 
-
-       killme();
-
-}
\ No newline at end of file
+}