From 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 9 Jan 2020 10:55:03 +0100 Subject: phpmyadmin working --- .../Database/DataDictionaryController.php | 156 +++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 srcs/phpmyadmin/libraries/classes/Controllers/Database/DataDictionaryController.php (limited to 'srcs/phpmyadmin/libraries/classes/Controllers/Database/DataDictionaryController.php') diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Database/DataDictionaryController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Database/DataDictionaryController.php new file mode 100644 index 0000000..ba424b6 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Database/DataDictionaryController.php @@ -0,0 +1,156 @@ +relation = $relation; + $this->transformations = $transformations; + } + + /** + * @return string HTML + */ + public function index(): string + { + $cfgRelation = $this->relation->getRelationsParam(); + + $comment = $this->relation->getDbComment($this->db); + + $this->dbi->selectDb($this->db); + $tablesNames = $this->dbi->getTables($this->db); + + $tables = []; + foreach ($tablesNames as $tableName) { + $showComment = (string) $this->dbi->getTable( + $this->db, + $tableName + )->getStatusInfo('TABLE_COMMENT'); + + list(, $primaryKeys, , ) = Util::processIndexData( + $this->dbi->getTableIndexes($this->db, $tableName) + ); + + list($foreigners, $hasRelation) = $this->relation->getRelationsAndStatus( + ! empty($cfgRelation['relation']), + $this->db, + $tableName + ); + + $columnsComments = $this->relation->getComments($this->db, $tableName); + + $columns = $this->dbi->getColumns($this->db, $tableName); + $rows = []; + foreach ($columns as $row) { + $extractedColumnSpec = Util::extractColumnSpec($row['Type']); + + $relation = ''; + if ($hasRelation) { + $foreigner = $this->relation->searchColumnInForeigners( + $foreigners, + $row['Field'] + ); + if ($foreigner !== false && $foreigner !== []) { + $relation = $foreigner['foreign_table']; + $relation .= ' -> '; + $relation .= $foreigner['foreign_field']; + } + } + + $mime = ''; + if ($cfgRelation['mimework']) { + $mimeMap = $this->transformations->getMime( + $this->db, + $tableName, + true + ); + if (isset($mimeMap[$row['Field']])) { + $mime = str_replace( + '_', + '/', + $mimeMap[$row['Field']]['mimetype'] + ); + } + } + + $rows[$row['Field']] = [ + 'name' => $row['Field'], + 'has_primary_key' => isset($primaryKeys[$row['Field']]), + 'type' => $extractedColumnSpec['type'], + 'print_type' => $extractedColumnSpec['print_type'], + 'is_nullable' => $row['Null'] !== '' && $row['Null'] !== 'NO', + 'default' => $row['Default'] ?? null, + 'comment' => $columnsComments[$row['Field']] ?? '', + 'mime' => $mime, + 'relation' => $relation, + ]; + } + + $indexesTable = ''; + if (count(Index::getFromTable($tableName, $this->db)) > 0) { + $indexesTable = Index::getHtmlForIndexes( + $tableName, + $this->db, + true + ); + } + + $tables[$tableName] = [ + 'name' => $tableName, + 'comment' => $showComment, + 'has_relation' => $hasRelation, + 'has_mime' => $cfgRelation['mimework'], + 'columns' => $rows, + 'indexes_table' => $indexesTable, + ]; + } + + return $this->template->render('database/data_dictionary/index', [ + 'database' => $this->db, + 'comment' => $comment, + 'tables' => $tables, + ]); + } +} -- cgit