]> git.mxchange.org Git - friendica.git/blobdiff - mod/uexport.php
Issue 7285: Perform duplicate check for item URI also with AP
[friendica.git] / mod / uexport.php
index e0b9be91f393ea2b222bb877fe3bf81fb550bd77..dfeb25abd7bacf446d4d0e1e6bc68d91c018a780 100644 (file)
@@ -1,15 +1,28 @@
 <?php
+/**
+ * @file mod/uexport.php
+ */
 
 use Friendica\App;
+use Friendica\Core\Hook;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
 use Friendica\Core\System;
+use Friendica\Database\DBA;
+use Friendica\Database\DBStructure;
 
 function uexport_init(App $a) {
+       /// @todo Don't forget to move this global field as static field in src/Modules
+       global $dbStructure;
+
        if (!local_user()) {
-               killme();
+               exit();
        }
 
        require_once("mod/settings.php");
        settings_init($a);
+
+       $dbStructure = DBStructure::definition($a->getBasePath());
 }
 
 function uexport_content(App $a) {
@@ -20,14 +33,14 @@ function uexport_content(App $a) {
                switch ($a->argv[1]) {
                        case "backup":
                                uexport_all($a);
-                               killme();
+                               exit();
                                break;
                        case "account":
                                uexport_account($a);
-                               killme();
+                               exit();
                                break;
                        default:
-                               killme();
+                               exit();
                }
        }
 
@@ -35,28 +48,39 @@ function uexport_content(App $a) {
         * 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' => System::baseUrl(),
-               '$title' => t('Export personal data'),
+       $options = [
+               ['uexport/account', L10n::t('Export account'), L10n::t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')],
+               ['uexport/backup', L10n::t('Export all'), L10n::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 \x28photos are not exported\x29")],
+       ];
+       Hook::callAll('uexport_options', $options);
+
+       $tpl = Renderer::getMarkupTemplate("uexport.tpl");
+       return Renderer::replaceMacros($tpl, [
+               '$title' => L10n::t('Export personal data'),
                '$options' => $options
-       ));
+       ]);
 }
 
 function _uexport_multirow($query) {
-       $result = array();
+       global $dbStructure;
+
+       preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
+       $table = $match[1];
+
+       $result = [];
        $r = q($query);
-       if (dbm::is_result($r)) {
+       if (DBA::isResult($r)) {
                foreach ($r as $rr) {
-                       $p = array();
+                       $p = [];
                        foreach ($rr as $k => $v) {
-                               $p[$k] = $v;
+                               switch ($dbStructure[$table]['fields'][$k]['type']) {
+                                       case 'datetime':
+                                               $p[$k] = $v ?? DBA::NULL_DATETIME;
+                                               break;
+                                       default:
+                                               $p[$k] = $v;
+                                               break;
+                               }
                        }
                        $result[] = $p;
                }
@@ -65,12 +89,25 @@ function _uexport_multirow($query) {
 }
 
 function _uexport_row($query) {
-       $result = array();
+       global $dbStructure;
+
+       preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
+       $table = $match[1];
+
+       $result = [];
        $r = q($query);
-       if (dbm::is_result($r)) {
+       if (DBA::isResult($r)) {
+
                foreach ($r as $rr) {
                        foreach ($rr as $k => $v) {
-                               $result[$k] = $v;
+                               switch ($dbStructure[$table]['fields'][$k]['type']) {
+                                       case 'datetime':
+                                               $result[$k] = $v ?? DBA::NULL_DATETIME;
+                                               break;
+                                       default:
+                                               $result[$k] = $v;
+                                               break;
+                               }
                        }
                }
        }
@@ -108,10 +145,10 @@ function uexport_account($a) {
        );
 
        $group_member = _uexport_multirow(
-               sprintf("SELECT * FROM `group_member` WHERE uid = %d", intval(local_user()))
+               sprintf("SELECT `group_member`.`gid`, `group_member`.`contact-id` FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` WHERE `group`.`uid` = %d", intval(local_user()))
        );
 
-       $output = array(
+       $output = [
                'version' => FRIENDICA_VERSION,
                'schema' => DB_UPDATE_VERSION,
                'baseurl' => System::baseUrl(),
@@ -122,37 +159,39 @@ function uexport_account($a) {
                'pconfig' => $pconfig,
                'group' => $group,
                'group_member' => $group_member,
-       );
+       ];
 
-       //echo "<pre>"; var_dump(json_encode($output)); killme();
-       echo json_encode($output);
+       echo json_encode($output, JSON_PARTIAL_OUTPUT_ON_ERROR);
 }
 
 /**
  * echoes account data and items as separated json, one per line
+ *
+ * @param App $a
+ * @throws Exception
  */
 function uexport_all(App $a) {
 
        uexport_account($a);
        echo "\n";
 
+       $total = 0;
        $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
                intval(local_user())
        );
-       if (dbm::is_result($r)) {
+       if (DBA::isResult($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)
                );
 
-               $output = array('item' => $r);
-               echo json_encode($output. "\n";
+               $output = ['item' => $r];
+               echo json_encode($output, JSON_PARTIAL_OUTPUT_ON_ERROR). "\n";
        }
 }