Files
operadores/adminer/plugins-enabled/dump-markdown.php
2021-08-10 15:48:44 -04:00

143 lines
3.8 KiB
PHP

<?php
/*
* AdminerDumpMarkdown - dump to MARKDOWN format v0.7 (October 14th, 2020)
*
* @link https://github.com/fthiella/adminer-plugin-dump-markdown
* @author Federico Thiella, https://fthiella.github.io/
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*
*/
class AdminerDumpMarkdown {
private $type = 'markdown';
private $format = 'Markdown';
function _format_value($s, $l, $c) {
return (strlen(utf8_decode($s)) > $l) ? substr($s, 0, $l) : $s.str_repeat($c, $l-strlen(utf8_decode($s)));
}
function _map($array, $width, $c) {
foreach ($array as $k => &$v) $v = $this->_format_value($v, $width[$k], $c);
return $array;
}
function _map_header($array) {
foreach ($array as $k => &$v) $v = $k;
return $array;
}
function _map_mtable($array) {
foreach ($array as $k => &$v) $v = '-';
return $array;
}
function _markdown_row($row, $column_width, $separator, $filler) {
return implode($separator, $this->_map($row, $column_width, $filler));
}
function _markdown_table($rows, $column_width) {
$content = $this->_markdown_row($this->_map_header($rows[0]), $column_width, " | ", " ") . "\n";
$content .= $this->_markdown_row($this->_map_mtable($rows[0]), $column_width, "-|-", "-") . "\n";
foreach ($rows as $row) {
$content .= $this->_markdown_row($row, $column_width, " | ", " ") . "\n";
}
return $content;
}
function _bool($value) {
return $value == 1 ? 'Yes' : 'No';
}
function dumpFormat() {
return array($this->type => $this->format);
}
function dumpDatabase($db) {
if ($_POST["format"] == $this->type) {
echo '# ' . $db . "\n\n";
return true;
}
}
/* export table structure */
function dumpTable($table, $style, $is_view = false) {
if ($_POST["format"] == $this->type) {
echo '## ' . addcslashes($table, "\n\"\\") . "\n\n";
if ($style) {
echo "### table structure\n\n";
$field_rows = array();
$field_width = (['Column name' => 11, 'Type' => 4, 'Comment' => 7, 'Null' => 4, 'AI' => 2]);
foreach (fields($table) as $field) {
$new_row = [
'Column name' => $field['field'],
'Type' => $field['full_type'],
'Comment' => $field['comment'],
'Null' => $this->_bool($field['null']),
'AI' => $this->_bool($field['auto_increment'])
];
array_push($field_rows, $new_row);
foreach ($new_row as $key => $val) {
$field_width[$key] = max($field_width[$key], strlen(utf8_decode($new_row[$key])));
}
}
echo $this->_markdown_table($field_rows, $field_width);
echo "\n";
}
return true;
}
}
/* export table data */
function dumpData($table, $style, $query) {
if ($_POST["format"] == $this->type) {
echo "### table data\n\n";
$connection = connection();
$result = $connection->query($query, 1);
if ($result) {
$rn = 0;
$sample_rows = array();
$column_width = array();
while ($row = $result->fetch_assoc()) {
switch(true) {
case $rn==0:
foreach ($row as $key => $val) {
$column_width[$key] = strlen(utf8_decode($key));
}
case $rn<100:
$sample_rows[$rn]=$row;
foreach ($row as $key => $val) {
$column_width[$key] = max($column_width[$key], strlen(utf8_decode($row[$key])));
}
break;
case $rn==100:
echo $this->_markdown_table($sample_rows, $column_width);
default:
echo $this->_markdown_row($row, $column_width, " | ", " ") . "\n";
}
$rn++;
}
if ($rn<100) {
echo $this->_markdown_table($sample_rows, $column_width);
}
echo "\n";
}
return true;
}
}
function dumpHeaders($identifier, $multi_table = false) {
if ($_POST["format"] == $this->type) {
header("Content-Type: text/text; charset=utf-8");
return "md";
}
}
}