Merge pull request #7193 from nupplaphil/bug/uimport_datetime

Fix NULL datetime for uimport/uexport
This commit is contained in:
Hypolite Petovan 2019-05-27 09:13:01 -04:00 committed by GitHub
commit 3c7e4b474b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 2 deletions

View file

@ -2,20 +2,27 @@
/** /**
* @file mod/uexport.php * @file mod/uexport.php
*/ */
use Friendica\App; use Friendica\App;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
function uexport_init(App $a) { 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()) { if (!local_user()) {
exit(); exit();
} }
require_once("mod/settings.php"); require_once("mod/settings.php");
settings_init($a); settings_init($a);
$dbStructure = DBStructure::definition($a->getBasePath());
} }
function uexport_content(App $a) { function uexport_content(App $a) {
@ -55,13 +62,25 @@ function uexport_content(App $a) {
} }
function _uexport_multirow($query) { function _uexport_multirow($query) {
global $dbStructure;
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
$table = $match[1];
$result = []; $result = [];
$r = q($query); $r = q($query);
if (DBA::isResult($r)) { if (DBA::isResult($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
$p = []; $p = [];
foreach ($rr as $k => $v) { 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; $result[] = $p;
} }
@ -70,12 +89,25 @@ function _uexport_multirow($query) {
} }
function _uexport_row($query) { function _uexport_row($query) {
global $dbStructure;
preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
$table = $match[1];
$result = []; $result = [];
$r = q($query); $r = q($query);
if (DBA::isResult($r)) { if (DBA::isResult($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
foreach ($rr as $k => $v) { 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;
}
} }
} }
} }

View file

@ -39,14 +39,21 @@ class UserImport
$tableColumns = DBStructure::getColumns($table); $tableColumns = DBStructure::getColumns($table);
$tcols = []; $tcols = [];
$ttype = [];
// get a plain array of column names // get a plain array of column names
foreach ($tableColumns as $tcol) { foreach ($tableColumns as $tcol) {
$tcols[] = $tcol['Field']; $tcols[] = $tcol['Field'];
$ttype[$tcol['Field']] = $tcol['Type'];
} }
// remove inexistent columns // remove inexistent columns
foreach ($arr as $icol => $ival) { foreach ($arr as $icol => $ival) {
if (!in_array($icol, $tcols)) { if (!in_array($icol, $tcols)) {
unset($arr[$icol]); unset($arr[$icol]);
continue;
}
if ($ttype[$icol] === 'datetime') {
$arr[$icol] = $ival ?? DBA::NULL_DATETIME;
} }
} }
} }