X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FDatabase%2FDBStructure.php;h=d1975f504235148479b018cd6c53ed87b7f683a8;hb=bb5e6d248b384192ab070108afbfb58acbee3fc3;hp=b9e53be045cacf6031303005259f206bd8528b8f;hpb=e561cad844951d7711e92c96019698da70a47e02;p=friendica.git diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index b9e53be045..d1975f5042 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -1,6 +1,6 @@ 'TABLES'], ['TABLE_NAME'], ['TABLE_SCHEMA' => DBA::databaseName(), 'TABLE_TYPE' => 'BASE TABLE']); @@ -159,6 +160,42 @@ class DBStructure return DI::l10n()->t('Errors encountered performing database changes: ') . $message . EOL; } + public static function writeStructure() + { + Renderer::registerTemplateEngine('Friendica\Render\FriendicaSmartyEngine'); + + $tables = []; + foreach (self::definition(null) as $name => $definition) { + $fields = []; + foreach ($definition['fields'] as $key => $value) { + $field = []; + $field['name'] = $key; + $field['comment'] = $value['comment'] ?? ''; + $field['type'] = $value['type']; + $field['notnull'] = ($value['not null'] ?? false) ? 'YES' : 'NO'; + $field['primary'] = ($value['primary'] ?? false) ? 'PRI' : ''; + $field['default'] = $value['default'] ?? ''; + $field['extra'] = $value['extra'] ?? ''; + + $fields[] = $field; + } + $tables[] = ['name' => $name, 'comment' => $definition['comment']]; + $content = Renderer::replaceMacros(Renderer::getMarkupTemplate('structure.tpl'), [ + '$name' => $name, + '$comment' => $definition['comment'], + '$fields' => $fields, + ]); + $filename = DI::basePath() . '/doc/database/db_' . $name . '.md'; + file_put_contents($filename, $content); + } + asort($tables); + $content = Renderer::replaceMacros(Renderer::getMarkupTemplate('tables.tpl'), [ + '$tables' => $tables, + ]); + $filename = DI::basePath() . '/doc/database.md'; + file_put_contents($filename, $content); + } + public static function printStructure($basePath) { $database = self::definition($basePath, false); @@ -192,6 +229,9 @@ class DBStructure public static function definition($basePath, $with_addons_structure = true) { if (!self::$definition) { + if (empty($basePath)) { + $basePath = DI::app()->getBasePath(); + } $filename = $basePath . '/static/dbstructure.config.php'; @@ -238,6 +278,12 @@ class DBStructure // Assign all field that are present in the table foreach ($fieldnames as $field) { if (isset($data[$field])) { + // Limit the length of varchar, varbinary, char and binrary fields + if (is_string($data[$field]) && preg_match("/char\((\d*)\)/", $definition[$table]['fields'][$field]['type'], $result)) { + $data[$field] = mb_substr($data[$field], 0, $result[1]); + } elseif (is_string($data[$field]) && preg_match("/binary\((\d*)\)/", $definition[$table]['fields'][$field]['type'], $result)) { + $data[$field] = substr($data[$field], 0, $result[1]); + } $fields[$field] = $data[$field]; } } @@ -1232,7 +1278,7 @@ class DBStructure } elseif ($verbose) { echo "Zero permissionset already added\n"; } - if (!self::existsForeignKeyForField('item', 'psid')) { + if (self::existsTable('item') && !self::existsForeignKeyForField('item', 'psid')) { $sets = DBA::p("SELECT `psid`, `item`.`uid`, `item`.`private` FROM `item` LEFT JOIN `permissionset` ON `permissionset`.`id` = `item`.`psid` WHERE `permissionset`.`id` IS NULL AND NOT `psid` IS NULL");