123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101 |
- <?php
- namespace PhpMyAdmin;
- use PhpMyAdmin\Core;
- use PhpMyAdmin\Encoding;
- use PhpMyAdmin\Message;
- use PhpMyAdmin\Plugins;
- use PhpMyAdmin\Plugins\ExportPlugin;
- use PhpMyAdmin\Sanitize;
- use PhpMyAdmin\Table;
- use PhpMyAdmin\Url;
- use PhpMyAdmin\Util;
- use PhpMyAdmin\ZipExtension;
- class Export
- {
-
- public static function shutdown()
- {
- $error = error_get_last();
- if ($error != null && mb_strpos($error['message'], "execution time")) {
-
- $_SESSION['pma_export_error'] = $error['message'];
- }
- }
-
- public static function isGzHandlerEnabled()
- {
- return in_array('ob_gzhandler', ob_list_handlers());
- }
-
- public static function gzencodeNeeded()
- {
-
- $chromeAndGreaterThan43 = PMA_USR_BROWSER_AGENT == 'CHROME'
- && PMA_USR_BROWSER_VER >= 43;
- if (function_exists('gzencode')
- && ((! ini_get('zlib.output_compression')
- && ! self::isGzHandlerEnabled())
- || $GLOBALS['save_on_server']
- || $chromeAndGreaterThan43)
- ) {
- return true;
- }
- return false;
- }
-
- public static function outputHandler($line)
- {
- global $time_start, $dump_buffer, $dump_buffer_len, $save_filename;
-
- if ($GLOBALS['output_kanji_conversion']) {
- $line = Encoding::kanjiStrConv(
- $line,
- $GLOBALS['knjenc'],
- isset($GLOBALS['xkana']) ? $GLOBALS['xkana'] : ''
- );
- }
-
- if ($GLOBALS['buffer_needed']) {
- $dump_buffer .= $line;
- if ($GLOBALS['onfly_compression']) {
- $dump_buffer_len += strlen($line);
- if ($dump_buffer_len > $GLOBALS['memory_limit']) {
- if ($GLOBALS['output_charset_conversion']) {
- $dump_buffer = Encoding::convertString(
- 'utf-8',
- $GLOBALS['charset'],
- $dump_buffer
- );
- }
- if ($GLOBALS['compression'] == 'gzip'
- && self::gzencodeNeeded()
- ) {
-
-
- $dump_buffer = gzencode($dump_buffer);
- }
- if ($GLOBALS['save_on_server']) {
- $write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer);
-
-
- if ($write_result != strlen($dump_buffer)) {
- $GLOBALS['message'] = Message::error(
- __('Insufficient space to save the file %s.')
- );
- $GLOBALS['message']->addParam($save_filename);
- return false;
- }
- } else {
- echo $dump_buffer;
- }
- $dump_buffer = '';
- $dump_buffer_len = 0;
- }
- } else {
- $time_now = time();
- if ($time_start >= $time_now + 30) {
- $time_start = $time_now;
- header('X-pmaPing: Pong');
- }
- }
- } else {
- if ($GLOBALS['asfile']) {
- if ($GLOBALS['output_charset_conversion']) {
- $line = Encoding::convertString(
- 'utf-8',
- $GLOBALS['charset'],
- $line
- );
- }
- if ($GLOBALS['save_on_server'] && mb_strlen($line) > 0) {
- $write_result = @fwrite($GLOBALS['file_handle'], $line);
-
-
- if (! $write_result
- || $write_result != strlen($line)
- ) {
- $GLOBALS['message'] = Message::error(
- __('Insufficient space to save the file %s.')
- );
- $GLOBALS['message']->addParam($save_filename);
- return false;
- }
- $time_now = time();
- if ($time_start >= $time_now + 30) {
- $time_start = $time_now;
- header('X-pmaPing: Pong');
- }
- } else {
-
- echo $line;
- }
- } else {
-
- echo htmlspecialchars($line);
- }
- }
- return true;
- }
-
- public static function getHtmlForDisplayedExportFooter($back_button, $refreshButton)
- {
-
- $html = '</textarea>'
- . ' </form>'
- . '<br />'
-
- . $back_button
- . $refreshButton
- . '</div>'
- . '<script type="text/javascript">' . "\n"
- . '//<![CDATA[' . "\n"
- . 'var $body = $("body");' . "\n"
- . '$("#textSQLDUMP")' . "\n"
- . '.width($body.width() - 50)' . "\n"
- . '.height($body.height() - 100);' . "\n"
- . '//]]>' . "\n"
- . '</script>' . "\n";
- return $html;
- }
-
- public static function getMemoryLimit()
- {
- $memory_limit = trim(ini_get('memory_limit'));
- $memory_limit_num = (int)substr($memory_limit, 0, -1);
- $lowerLastChar = strtolower(substr($memory_limit, -1));
-
- if (empty($memory_limit) || '-1' == $memory_limit) {
- $memory_limit = 2 * 1024 * 1024;
- } elseif ($lowerLastChar == 'm') {
- $memory_limit = $memory_limit_num * 1024 * 1024;
- } elseif ($lowerLastChar == 'k') {
- $memory_limit = $memory_limit_num * 1024;
- } elseif ($lowerLastChar == 'g') {
- $memory_limit = $memory_limit_num * 1024 * 1024 * 1024;
- } else {
- $memory_limit = (int)$memory_limit;
- }
-
-
-
- if ($memory_limit > 1500000) {
- $memory_limit -= 1500000;
- }
-
- $memory_limit /= 8;
- return $memory_limit;
- }
-
- public static function getFilenameAndMimetype(
- $export_type, $remember_template, $export_plugin, $compression,
- $filename_template
- ) {
- if ($export_type == 'server') {
- if (! empty($remember_template)) {
- $GLOBALS['PMA_Config']->setUserValue(
- 'pma_server_filename_template',
- 'Export/file_template_server',
- $filename_template
- );
- }
- } elseif ($export_type == 'database') {
- if (! empty($remember_template)) {
- $GLOBALS['PMA_Config']->setUserValue(
- 'pma_db_filename_template',
- 'Export/file_template_database',
- $filename_template
- );
- }
- } else {
- if (! empty($remember_template)) {
- $GLOBALS['PMA_Config']->setUserValue(
- 'pma_table_filename_template',
- 'Export/file_template_table',
- $filename_template
- );
- }
- }
- $filename = Util::expandUserString($filename_template);
-
-
- $filename = Sanitize::sanitizeFilename($filename, $replaceDots = true);
-
-
-
- $extension_start_pos = mb_strlen($filename) - mb_strlen(
- $export_plugin->getProperties()->getExtension()
- ) - 1;
- $user_extension = mb_substr(
- $filename, $extension_start_pos, mb_strlen($filename)
- );
- $required_extension = "." . $export_plugin->getProperties()->getExtension();
- if (mb_strtolower($user_extension) != $required_extension) {
- $filename .= $required_extension;
- }
- $mime_type = $export_plugin->getProperties()->getMimeType();
-
-
- if ($compression == 'gzip') {
- $filename .= '.gz';
- $mime_type = 'application/x-gzip';
- } elseif ($compression == 'zip') {
- $filename .= '.zip';
- $mime_type = 'application/zip';
- }
- return array($filename, $mime_type);
- }
-
- public static function openFile($filename, $quick_export)
- {
- $file_handle = null;
- $message = '';
- $doNotSaveItOver = true;
- if(isset($_POST['quick_export_onserver_overwrite'])) {
- $doNotSaveItOver = $_POST['quick_export_onserver_overwrite'] != 'saveitover';
- }
- $save_filename = Util::userDir($GLOBALS['cfg']['SaveDir'])
- . preg_replace('@[/\\\\]@', '_', $filename);
- if (@file_exists($save_filename)
- && ((! $quick_export && empty($_POST['onserver_overwrite']))
- || ($quick_export
- && $doNotSaveItOver))
- ) {
- $message = Message::error(
- __(
- 'File %s already exists on server, '
- . 'change filename or check overwrite option.'
- )
- );
- $message->addParam($save_filename);
- } elseif (@is_file($save_filename) && ! @is_writable($save_filename)) {
- $message = Message::error(
- __(
- 'The web server does not have permission '
- . 'to save the file %s.'
- )
- );
- $message->addParam($save_filename);
- } elseif (! $file_handle = @fopen($save_filename, 'w')) {
- $message = Message::error(
- __(
- 'The web server does not have permission '
- . 'to save the file %s.'
- )
- );
- $message->addParam($save_filename);
- }
- return array($save_filename, $message, $file_handle);
- }
-
- public static function closeFile($file_handle, $dump_buffer, $save_filename)
- {
- $write_result = @fwrite($file_handle, $dump_buffer);
- fclose($file_handle);
-
-
- if (strlen($dump_buffer) > 0
- && (! $write_result || $write_result != strlen($dump_buffer))
- ) {
- $message = new Message(
- __('Insufficient space to save the file %s.'),
- Message::ERROR,
- array($save_filename)
- );
- } else {
- $message = new Message(
- __('Dump has been saved to file %s.'),
- Message::SUCCESS,
- array($save_filename)
- );
- }
- return $message;
- }
-
- public static function compress($dump_buffer, $compression, $filename)
- {
- if ($compression == 'zip' && function_exists('gzcompress')) {
- $zipExtension = new ZipExtension();
- $filename = substr($filename, 0, -4);
- $dump_buffer = $zipExtension->createFile($dump_buffer, $filename);
- } elseif ($compression == 'gzip' && self::gzencodeNeeded()) {
-
- $dump_buffer = gzencode($dump_buffer);
- }
- return $dump_buffer;
- }
-
- public static function saveObjectInBuffer($object_name, $append = false)
- {
- global $dump_buffer_objects, $dump_buffer, $dump_buffer_len;
- if (! empty($dump_buffer)) {
- if ($append && isset($dump_buffer_objects[$object_name])) {
- $dump_buffer_objects[$object_name] .= $dump_buffer;
- } else {
- $dump_buffer_objects[$object_name] = $dump_buffer;
- }
- }
-
- $dump_buffer = '';
- $dump_buffer_len = 0;
- }
-
- public static function getHtmlForDisplayedExportHeader($export_type, $db, $table)
- {
- $html = '<div>';
-
- $back_button = '<p id="export_back_button">[ <a href="';
- if ($export_type == 'server') {
- $back_button .= 'server_export.php" data-post="' . Url::getCommon([], '', false);
- } elseif ($export_type == 'database') {
- $back_button .= 'db_export.php" data-post="' . Url::getCommon(array('db' => $db), '', false);
- } else {
- $back_button .= 'tbl_export.php" data-post="' . Url::getCommon(
- array(
- 'db' => $db, 'table' => $table
- ), '', false
- );
- }
-
- if ($export_type == 'database') {
- $structOrDataForced = empty($_POST['structure_or_data_forced']);
- if ($structOrDataForced && ! isset($_POST['table_structure'])) {
- $_POST['table_structure'] = [];
- }
- if ($structOrDataForced && ! isset($_POST['table_data'])) {
- $_POST['table_data'] = [];
- }
- }
- foreach ($_POST as $name => $value) {
- if (!is_array($value)) {
- $back_button .= '&' . urlencode($name) . '=' . urlencode($value);
- }
- }
- $back_button .= '&repopulate=1">' . __('Back') . '</a> ]</p>';
- $html .= '<br />';
- $html .= $back_button;
- $refreshButton = '<form id="export_refresh_form" method="POST" action="export.php" class="disableAjax">';
- $refreshButton .= '[ <a class="disableAjax" onclick="$(this).parent().submit()">'. __('Refresh') .'</a> ]';
- foreach($_POST as $name => $value) {
- if (is_array($value)) {
- foreach($value as $val) {
- $refreshButton .= '<input type="hidden" name="' . htmlentities((string) $name) . '[]" value="' . htmlentities((string) $val) . '">';
- }
- }
- else {
- $refreshButton .= '<input type="hidden" name="' . htmlentities((string) $name) . '" value="' . htmlentities((string) $value) . '">';
- }
- }
- $refreshButton .= '</form>';
- $html .= $refreshButton
- . '<br />'
- . '<form name="nofunction">'
- . '<textarea name="sqldump" cols="50" rows="30" '
- . 'id="textSQLDUMP" wrap="OFF">';
- return array($html, $back_button, $refreshButton);
- }
-
- public static function exportServer(
- $db_select, $whatStrucOrData, $export_plugin, $crlf, $err_url,
- $export_type, $do_relation, $do_comments, $do_mime, $do_dates,
- array $aliases, $separate_files
- ) {
- if (! empty($db_select)) {
- $tmp_select = implode($db_select, '|');
- $tmp_select = '|' . $tmp_select . '|';
- }
-
- foreach ($GLOBALS['dblist']->databases as $current_db) {
- if (isset($tmp_select)
- && mb_strpos(' ' . $tmp_select, '|' . $current_db . '|')
- ) {
- $tables = $GLOBALS['dbi']->getTables($current_db);
- self::exportDatabase(
- $current_db, $tables, $whatStrucOrData, $tables, $tables,
- $export_plugin, $crlf, $err_url, $export_type, $do_relation,
- $do_comments, $do_mime, $do_dates, $aliases,
- $separate_files == 'database' ? $separate_files : ''
- );
- if ($separate_files == 'server') {
- self::saveObjectInBuffer($current_db);
- }
- }
- }
- }
-
- public static function exportDatabase(
- $db, array $tables, $whatStrucOrData, array $table_structure, array $table_data,
- $export_plugin, $crlf, $err_url, $export_type, $do_relation,
- $do_comments, $do_mime, $do_dates, array $aliases, $separate_files
- ) {
- $db_alias = !empty($aliases[$db]['alias'])
- ? $aliases[$db]['alias'] : '';
- if (! $export_plugin->exportDBHeader($db, $db_alias)) {
- return;
- }
- if (! $export_plugin->exportDBCreate($db, $export_type, $db_alias)) {
- return;
- }
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('database', true);
- }
- if (($GLOBALS['sql_structure_or_data'] == 'structure'
- || $GLOBALS['sql_structure_or_data'] == 'structure_and_data')
- && isset($GLOBALS['sql_procedure_function'])
- ) {
- $export_plugin->exportRoutines($db, $aliases);
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('routines');
- }
- }
- $views = array();
- foreach ($tables as $table) {
- $_table = new Table($table, $db);
-
-
- $is_view = $_table->isView();
- if ($is_view) {
- $views[] = $table;
- }
- if (($whatStrucOrData == 'structure'
- || $whatStrucOrData == 'structure_and_data')
- && in_array($table, $table_structure)
- ) {
-
-
- if ($is_view) {
- if ($separate_files == ''
- && isset($GLOBALS['sql_create_view'])
- && ! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'stand_in',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )
- ) {
- break;
- }
- } elseif (isset($GLOBALS['sql_create_table'])) {
- $table_size = $GLOBALS['maxsize'];
-
-
- if ($table_size !== '' && is_numeric($table_size)) {
-
- $query = 'SELECT data_length + index_length
- from information_schema.TABLES
- WHERE table_schema = "' . $GLOBALS['dbi']->escapeString($db) . '"
- AND table_name = "' . $GLOBALS['dbi']->escapeString($table) . '"';
- $size = $GLOBALS['dbi']->fetchValue($query);
-
- $size = ($size / 1024) / 1024;
- if ($size > $table_size) {
- continue;
- }
- }
- if (! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'create_table',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- break;
- }
- }
- }
-
- if (($whatStrucOrData == 'data' || $whatStrucOrData == 'structure_and_data')
- && in_array($table, $table_data)
- && ! ($is_view)
- ) {
- $tableObj = new Table($table, $db);
- $nonGeneratedCols = $tableObj->getNonGeneratedColumns(true);
- $local_query = 'SELECT ' . implode(', ', $nonGeneratedCols)
- . ' FROM ' . Util::backquote($db)
- . '.' . Util::backquote($table);
- if (! $export_plugin->exportData(
- $db, $table, $crlf, $err_url, $local_query, $aliases
- )) {
- break;
- }
- }
-
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('table_' . $table);
- }
-
-
- if (isset($GLOBALS['sql_create_trigger']) && ($whatStrucOrData == 'structure'
- || $whatStrucOrData == 'structure_and_data')
- && in_array($table, $table_structure)
- ) {
- if (! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'triggers',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- break;
- }
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('table_' . $table, true);
- }
- }
- }
- if (isset($GLOBALS['sql_create_view'])) {
- foreach ($views as $view) {
-
- if ($whatStrucOrData == 'structure'
- || $whatStrucOrData == 'structure_and_data'
- ) {
- if (! $export_plugin->exportStructure(
- $db, $view, $crlf, $err_url, 'create_view',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- break;
- }
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('view_' . $view);
- }
- }
- }
- }
- if (! $export_plugin->exportDBFooter($db)) {
- return;
- }
-
- if (isset($GLOBALS['sql_metadata'])) {
-
-
- $metadataTypes = self::getMetadataTypes();
- $export_plugin->exportMetadata($db, $tables, $metadataTypes);
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('metadata');
- }
- }
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('extra');
- }
- if (($GLOBALS['sql_structure_or_data'] == 'structure'
- || $GLOBALS['sql_structure_or_data'] == 'structure_and_data')
- && isset($GLOBALS['sql_procedure_function'])
- ) {
- $export_plugin->exportEvents($db);
- if ($separate_files == 'database') {
- self::saveObjectInBuffer('events');
- }
- }
- }
-
- public static function exportTable(
- $db, $table, $whatStrucOrData, $export_plugin, $crlf, $err_url,
- $export_type, $do_relation, $do_comments, $do_mime, $do_dates,
- $allrows, $limit_to, $limit_from, $sql_query, array $aliases
- ) {
- $db_alias = !empty($aliases[$db]['alias'])
- ? $aliases[$db]['alias'] : '';
- if (! $export_plugin->exportDBHeader($db, $db_alias)) {
- return;
- }
- if (isset($allrows)
- && $allrows == '0'
- && $limit_to > 0
- && $limit_from >= 0
- ) {
- $add_query = ' LIMIT '
- . (($limit_from > 0) ? $limit_from . ', ' : '')
- . $limit_to;
- } else {
- $add_query = '';
- }
- $_table = new Table($table, $db);
- $is_view = $_table->isView();
- if ($whatStrucOrData == 'structure'
- || $whatStrucOrData == 'structure_and_data'
- ) {
- if ($is_view) {
- if (isset($GLOBALS['sql_create_view'])) {
- if (! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'create_view',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- return;
- }
- }
- } elseif (isset($GLOBALS['sql_create_table'])) {
- if (! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'create_table',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- return;
- }
- }
- }
-
-
-
- if ($whatStrucOrData == 'data'
- || $whatStrucOrData == 'structure_and_data'
- ) {
- if (! empty($sql_query)) {
-
- if (! empty($add_query)) {
-
- $sql_query = preg_replace('%;\s*$%', '', $sql_query);
- }
- $local_query = $sql_query . $add_query;
- $GLOBALS['dbi']->selectDb($db);
- } else {
-
- $tableObj = new Table($table, $db);
- $nonGeneratedCols = $tableObj->getNonGeneratedColumns(true);
- $local_query = 'SELECT ' . implode(', ', $nonGeneratedCols)
- . ' FROM ' . Util::backquote($db)
- . '.' . Util::backquote($table) . $add_query;
- }
- if (! $export_plugin->exportData(
- $db, $table, $crlf, $err_url, $local_query, $aliases
- )) {
- return;
- }
- }
-
-
- if (isset($GLOBALS['sql_create_trigger']) && ($whatStrucOrData == 'structure'
- || $whatStrucOrData == 'structure_and_data')
- ) {
- if (! $export_plugin->exportStructure(
- $db, $table, $crlf, $err_url, 'triggers',
- $export_type, $do_relation, $do_comments,
- $do_mime, $do_dates, $aliases
- )) {
- return;
- }
- }
- if (! $export_plugin->exportDBFooter($db)) {
- return;
- }
- if (isset($GLOBALS['sql_metadata'])) {
-
-
- $metadataTypes = self::getMetadataTypes();
- $export_plugin->exportMetadata($db, $table, $metadataTypes);
- }
- }
-
- public static function showPage($db, $table, $export_type)
- {
- global $cfg;
- if ($export_type == 'server') {
- $active_page = 'server_export.php';
- include_once 'server_export.php';
- } elseif ($export_type == 'database') {
- $active_page = 'db_export.php';
- include_once 'db_export.php';
- } else {
- $active_page = 'tbl_export.php';
- include_once 'tbl_export.php';
- }
- exit();
- }
-
- public static function mergeAliases(array $aliases1, array $aliases2)
- {
-
-
- $aliases = array_merge_recursive($aliases1, $aliases2);
-
- foreach ($aliases as $db_name => $db) {
-
-
- if (isset($db['alias']) && is_array($db['alias'])) {
- $val1 = $db['alias'][0];
- $val2 = $db['alias'][1];
-
- $aliases[$db_name]['alias']
- = empty($val2) ? $val1 : $val2;
- }
- if (!isset($db['tables'])) {
- continue;
- }
- foreach ($db['tables'] as $tbl_name => $tbl) {
- if (isset($tbl['alias']) && is_array($tbl['alias'])) {
- $val1 = $tbl['alias'][0];
- $val2 = $tbl['alias'][1];
-
- $aliases[$db_name]['tables'][$tbl_name]['alias']
- = empty($val2) ? $val1 : $val2;
- }
- if (!isset($tbl['columns'])) {
- continue;
- }
- foreach ($tbl['columns'] as $col => $col_as) {
- if (isset($col_as) && is_array($col_as)) {
- $val1 = $col_as[0];
- $val2 = $col_as[1];
-
- $aliases[$db_name]['tables'][$tbl_name]['columns'][$col]
- = empty($val2) ? $val1 : $val2;
- }
- };
- };
- }
- return $aliases;
- }
-
- public static function lockTables($db, array $tables, $lockType = "WRITE")
- {
- $locks = array();
- foreach ($tables as $table) {
- $locks[] = Util::backquote($db) . "."
- . Util::backquote($table) . " " . $lockType;
- }
- $sql = "LOCK TABLES " . implode(", ", $locks);
- return $GLOBALS['dbi']->tryQuery($sql);
- }
-
- public static function unlockTables()
- {
- return $GLOBALS['dbi']->tryQuery("UNLOCK TABLES");
- }
-
- public static function getMetadataTypes()
- {
- return array(
- 'column_info',
- 'table_uiprefs',
- 'tracking',
- 'bookmark',
- 'relation',
- 'table_coords',
- 'pdf_pages',
- 'savedsearches',
- 'central_columns',
- 'export_templates',
- );
- }
-
- public static function getCheckedClause($key, array $array)
- {
- if (in_array($key, $array)) {
- return ' checked="checked"';
- }
- return '';
- }
-
- public static function processExportSchema($export_type)
- {
-
- if (! isset($export_type) || ! preg_match('/^[a-zA-Z]+$/', $export_type)) {
- $export_type = 'pdf';
- }
-
- $export_type = Core::securePath($export_type);
-
-
- $export_plugin = Plugins::getPlugin(
- "schema",
- $export_type,
- 'libraries/classes/Plugins/Schema/'
- );
-
- if (! isset($export_plugin)) {
- Core::fatalError(__('Bad type!'));
- }
- $GLOBALS['dbi']->selectDb($_POST['db']);
- $export_plugin->exportSchema($_POST['db']);
- }
- }
|