Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
f2f8ee1819
39
export.php
39
export.php
@ -59,6 +59,7 @@ if (!defined('TESTSUITE')) {
|
||||
'remember_template',
|
||||
'charset_of_file',
|
||||
'compression',
|
||||
'as_separate_files',
|
||||
'knjenc',
|
||||
'xkana',
|
||||
'htmlword_structure_or_data',
|
||||
@ -211,6 +212,7 @@ if (!defined('TESTSUITE')) {
|
||||
$file_handle = '';
|
||||
$err_url = '';
|
||||
$filename = '';
|
||||
$separate_files = '';
|
||||
|
||||
// Is it a quick or custom export?
|
||||
if ($_REQUEST['quick_or_custom'] == 'quick') {
|
||||
@ -223,6 +225,16 @@ if (!defined('TESTSUITE')) {
|
||||
$asfile = false;
|
||||
} else {
|
||||
$asfile = true;
|
||||
if (isset($_REQUEST['as_separate_files'])
|
||||
&& ! empty($_REQUEST['as_separate_files'])
|
||||
) {
|
||||
if (isset($_REQUEST['compression'])
|
||||
&& ! empty($_REQUEST['compression'])
|
||||
&& $_REQUEST['compression'] == 'zip'
|
||||
) {
|
||||
$separate_files = $_REQUEST['as_separate_files'];
|
||||
}
|
||||
}
|
||||
if (in_array($_REQUEST['compression'], $compression_methods)) {
|
||||
$compression = $_REQUEST['compression'];
|
||||
$buffer_needed = true;
|
||||
@ -292,6 +304,9 @@ if (!defined('TESTSUITE')) {
|
||||
$dump_buffer = '';
|
||||
$dump_buffer_len = 0;
|
||||
|
||||
// Array of dump_buffers - used in separate file exports
|
||||
$dump_buffer_objects = array();
|
||||
|
||||
// We send fake headers to avoid browser timeout when buffering
|
||||
$time_start = time();
|
||||
|
||||
@ -380,9 +395,11 @@ if (!defined('TESTSUITE')) {
|
||||
// need exceptions here :-)
|
||||
do {
|
||||
|
||||
// Add possibly some comments to export
|
||||
if (! $export_plugin->exportHeader($db)) {
|
||||
break;
|
||||
if ($separate_files != 'database') {
|
||||
// Add possibly some comments to export
|
||||
if (! $export_plugin->exportHeader($db)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Will we need relation & co. setup?
|
||||
@ -412,7 +429,7 @@ if (!defined('TESTSUITE')) {
|
||||
PMA_exportServer(
|
||||
$db_select, $whatStrucOrData, $export_plugin, $crlf, $err_url,
|
||||
$export_type, $do_relation, $do_comments, $do_mime, $do_dates,
|
||||
$aliases
|
||||
$aliases, $separate_files
|
||||
);
|
||||
} elseif ($export_type == 'database') {
|
||||
if (isset($lock_tables)) {
|
||||
@ -421,7 +438,7 @@ if (!defined('TESTSUITE')) {
|
||||
PMA_exportDatabase(
|
||||
$db, $tables, $whatStrucOrData, $export_plugin, $crlf,
|
||||
$err_url, $export_type, $do_relation, $do_comments,
|
||||
$do_mime, $do_dates, $aliases
|
||||
$do_mime, $do_dates, $aliases, $separate_files
|
||||
);
|
||||
PMA_unlockTables();
|
||||
} catch (Exception $e) { // TODO use finally when PHP version is 5.5
|
||||
@ -432,7 +449,7 @@ if (!defined('TESTSUITE')) {
|
||||
PMA_exportDatabase(
|
||||
$db, $tables, $whatStrucOrData, $export_plugin, $crlf, $err_url,
|
||||
$export_type, $do_relation, $do_comments, $do_mime, $do_dates,
|
||||
$aliases
|
||||
$aliases, $separate_files
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@ -495,8 +512,14 @@ if (!defined('TESTSUITE')) {
|
||||
|
||||
// Compression needed?
|
||||
if ($compression) {
|
||||
$dump_buffer
|
||||
= PMA_compressExport($dump_buffer, $compression, $filename);
|
||||
if (! empty($separate_files)) {
|
||||
$dump_buffer
|
||||
= PMA_compressExport($dump_buffer_objects, $compression, $filename);
|
||||
} else {
|
||||
$dump_buffer
|
||||
= PMA_compressExport($dump_buffer, $compression, $filename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* If we saved on server, we have to close file now */
|
||||
|
||||
13
js/export.js
13
js/export.js
@ -86,6 +86,19 @@ AJAX.registerOnload('export.js', function () {
|
||||
$("#checkbox_sql_auto_increment").removeProp('disabled').parent().fadeTo('fast', 1);
|
||||
}
|
||||
});
|
||||
|
||||
// For separate-file exports only ZIP compression is allowed
|
||||
$('input[type="checkbox"][name="as_separate_files"]').change(function(){
|
||||
if (! $(this).attr('checked')) {
|
||||
$('#compression').val('zip');
|
||||
}
|
||||
});
|
||||
|
||||
$('#compression').change(function(){
|
||||
if ($('option:selected').val() !== 'zip') {
|
||||
$('input[type="checkbox"][name="as_separate_files"]').attr('checked', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
@ -628,6 +628,34 @@ function PMA_getHtmlForExportOptionsOutputRadio()
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints Html For Export Options Checkbox - Separate files
|
||||
*
|
||||
* @param String $export_type Selected Export Type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForExportOptionsOutputSeparateFiles($export_type)
|
||||
{
|
||||
$html = '<li>';
|
||||
$html .= '<input type="checkbox" id="checkbox_separate_files" '
|
||||
. ' name="as_separate_files" value="'
|
||||
. $export_type
|
||||
. '" ';
|
||||
$html .= '/>';
|
||||
$html .= '<label for="checkbox_separate_files">';
|
||||
|
||||
if ($export_type == 'server') {
|
||||
$html .= __('Export databases as separate files');
|
||||
} elseif ($export_type == 'database') {
|
||||
$html .= __('Export tables as separate files');
|
||||
}
|
||||
|
||||
$html .= '</label></li>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints Html For Export Options
|
||||
*
|
||||
@ -686,6 +714,12 @@ function PMA_getHtmlForExportOptionsOutput($export_type)
|
||||
|
||||
$html .= PMA_getHtmlForExportOptionsOutputCompression();
|
||||
|
||||
if ($export_type == 'server'
|
||||
|| $export_type == 'database'
|
||||
) {
|
||||
$html .= PMA_getHtmlForExportOptionsOutputSeparateFiles($export_type);
|
||||
}
|
||||
|
||||
$html .= '</ul>';
|
||||
$html .= '</li>';
|
||||
|
||||
|
||||
@ -404,11 +404,24 @@ function PMA_closeExportFile($file_handle, $dump_buffer, $save_filename)
|
||||
function PMA_compressExport($dump_buffer, $compression, $filename)
|
||||
{
|
||||
if ($compression == 'zip' && @function_exists('gzcompress')) {
|
||||
$filename = substr($filename, 0, -4); // remove extension (.zip)
|
||||
$zipfile = new ZipFile();
|
||||
$zipfile->addFile(
|
||||
$dump_buffer,
|
||||
substr($filename, 0, -4)
|
||||
);
|
||||
if (is_array($dump_buffer)) {
|
||||
foreach ($dump_buffer as $table => $dump) {
|
||||
$ext_pos = strpos($filename, '.');
|
||||
$extension = substr($filename, $ext_pos);
|
||||
$zipfile->addFile(
|
||||
$dump,
|
||||
str_replace(
|
||||
$extension,
|
||||
'_' . $table . $extension,
|
||||
$filename
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$zipfile->addFile($dump_buffer, $filename);
|
||||
}
|
||||
$dump_buffer = $zipfile->file();
|
||||
} elseif ($compression == 'gzip' && PMA_gzencodeNeeded()) {
|
||||
// without the optional parameter level because it bugs
|
||||
@ -417,6 +430,34 @@ function PMA_compressExport($dump_buffer, $compression, $filename)
|
||||
return $dump_buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the dump_buffer for a particular table in an array
|
||||
* Used in separate files export
|
||||
*
|
||||
* @param string $object_name the name of current object to be stored
|
||||
* @param boolean $append optional boolean to append to an existing index or not
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_saveObjectInBuffer($object_name, $append = false)
|
||||
{
|
||||
|
||||
global $dump_buffer_objects, $dump_buffer, $dump_buffer_len;
|
||||
|
||||
if (! empty($dump_buffer)) {
|
||||
if ($append) {
|
||||
$dump_buffer_objects[$object_name] .= $dump_buffer;
|
||||
} else {
|
||||
$dump_buffer_objects[$object_name] = $dump_buffer;
|
||||
}
|
||||
}
|
||||
|
||||
// Re - initialize
|
||||
$dump_buffer = '';
|
||||
$dump_buffer_len = 0;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML containing the header for a displayed export
|
||||
*
|
||||
@ -485,13 +526,14 @@ function PMA_getHtmlForDisplayedExportHeader($export_type, $db, $table)
|
||||
* @param bool $do_mime whether to add MIME info
|
||||
* @param bool $do_dates whether to add dates
|
||||
* @param array $aliases alias information for db/table/column
|
||||
* @param string $separate_files whether it is a separate-files export
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_exportServer(
|
||||
$db_select, $whatStrucOrData, $export_plugin, $crlf, $err_url,
|
||||
$export_type, $do_relation, $do_comments, $do_mime, $do_dates,
|
||||
$aliases
|
||||
$aliases, $separate_files
|
||||
) {
|
||||
if (! empty($db_select)) {
|
||||
$tmp_select = implode($db_select, '|');
|
||||
@ -506,8 +548,11 @@ function PMA_exportServer(
|
||||
PMA_exportDatabase(
|
||||
$current_db, $tables, $whatStrucOrData, $export_plugin, $crlf,
|
||||
$err_url, $export_type, $do_relation, $do_comments, $do_mime,
|
||||
$do_dates, $aliases
|
||||
$do_dates, $aliases, $separate_files == 'database' ? $separate_files : ''
|
||||
);
|
||||
if ($separate_files == 'server') {
|
||||
PMA_saveObjectInBuffer($current_db);
|
||||
}
|
||||
}
|
||||
} // end foreach database
|
||||
}
|
||||
@ -527,21 +572,26 @@ function PMA_exportServer(
|
||||
* @param bool $do_mime whether to add MIME info
|
||||
* @param bool $do_dates whether to add dates
|
||||
* @param array $aliases Alias information for db/table/column
|
||||
* @param string $separate_files whether it is a separate-files export
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_exportDatabase(
|
||||
$db, $tables, $whatStrucOrData, $export_plugin, $crlf, $err_url,
|
||||
$export_type, $do_relation, $do_comments, $do_mime, $do_dates,
|
||||
$aliases
|
||||
$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, $db_alias)) {
|
||||
return;
|
||||
|
||||
// If single file, add DB header and Create but don't store in $dump_buffer_objects
|
||||
if (! $separate_files == 'database') {
|
||||
if (! $export_plugin->exportDBHeader($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
if (! $export_plugin->exportDBCreate($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (method_exists($export_plugin, 'exportRoutines')
|
||||
@ -551,7 +601,24 @@ function PMA_exportDatabase(
|
||||
) !== false
|
||||
&& isset($GLOBALS['sql_procedure_function'])
|
||||
) {
|
||||
if ($separate_files == 'database') {
|
||||
if (! $export_plugin->exportHeader($db)) {
|
||||
break;
|
||||
}
|
||||
if (! $export_plugin->exportDBHeader($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
if (! $export_plugin->exportDBCreate($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
PMA_saveObjectInBuffer('db');
|
||||
}
|
||||
|
||||
$export_plugin->exportRoutines($db, $aliases);
|
||||
|
||||
if ($separate_files == 'database') {
|
||||
PMA_saveObjectInBuffer('routines');
|
||||
}
|
||||
}
|
||||
|
||||
$views = array();
|
||||
@ -567,20 +634,19 @@ function PMA_exportDatabase(
|
||||
|| $whatStrucOrData == 'structure_and_data'
|
||||
) {
|
||||
// for a view, export a stand-in definition of the table
|
||||
// to resolve view dependencies
|
||||
|
||||
// to resolve view dependencies (only when it's a single-file export)
|
||||
if ($is_view) {
|
||||
|
||||
if (isset($GLOBALS['sql_create_view'])) {
|
||||
if (! $export_plugin->exportStructure(
|
||||
$db, $table, $crlf, $err_url, 'stand_in',
|
||||
$export_type, $do_relation, $do_comments,
|
||||
$do_mime, $do_dates, $aliases
|
||||
)) {
|
||||
break 1;
|
||||
if ($separate_files == '') {
|
||||
if (isset($GLOBALS['sql_create_view'])) {
|
||||
if (! $export_plugin->exportStructure(
|
||||
$db, $table, $crlf, $err_url, 'stand_in',
|
||||
$export_type, $do_relation, $do_comments,
|
||||
$do_mime, $do_dates, $aliases
|
||||
)) {
|
||||
break 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else if (isset($GLOBALS['sql_create_table'])) {
|
||||
|
||||
$table_size = $GLOBALS['maxsize'];
|
||||
@ -625,6 +691,11 @@ function PMA_exportDatabase(
|
||||
break 1;
|
||||
}
|
||||
}
|
||||
|
||||
// this buffer was filled, we save it and go to the next one
|
||||
if ($separate_files == 'database') {
|
||||
PMA_saveObjectInBuffer('tbl_' . $table);
|
||||
}
|
||||
// now export the triggers (needs to be done after the data because
|
||||
// triggers can modify already imported tables)
|
||||
if (isset($GLOBALS['sql_create_trigger']) && ($whatStrucOrData == 'structure'
|
||||
@ -637,7 +708,18 @@ function PMA_exportDatabase(
|
||||
)) {
|
||||
break 1;
|
||||
}
|
||||
if ($separate_files == 'database') {
|
||||
PMA_saveObjectInBuffer('triggers', true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ($separate_files == 'database') {
|
||||
if (! $export_plugin->exportDBFooter($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
PMA_saveObjectInBuffer('extra', true);
|
||||
}
|
||||
|
||||
if (isset($GLOBALS['sql_create_view'])) {
|
||||
@ -654,21 +736,28 @@ function PMA_exportDatabase(
|
||||
)) {
|
||||
break 1;
|
||||
}
|
||||
if ($separate_files == 'database') {
|
||||
PMA_saveObjectInBuffer('view_' . $view);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (! $export_plugin->exportDBFooter($db, $db_alias)) {
|
||||
return;
|
||||
if ($separate_files != 'database') {
|
||||
// export metadata related to this db
|
||||
if (isset($GLOBALS['sql_metadata'])) {
|
||||
// Types of metadata to export.
|
||||
// In the future these can be allowed to be selected by the user
|
||||
$metadataTypes = PMA_getMetadataTypesToExport();
|
||||
$export_plugin->exportMetadata($db, $tables, $metadataTypes);
|
||||
}
|
||||
}
|
||||
|
||||
// export metadata related to this db
|
||||
if (isset($GLOBALS['sql_metadata'])) {
|
||||
// Types of metadata to export.
|
||||
// In the future these can be allowed to be selected by the user
|
||||
$metadataTypes = PMA_getMetadataTypesToExport();
|
||||
$export_plugin->exportMetadata($db, $tables, $metadataTypes);
|
||||
if ($separate_files != 'database') {
|
||||
if (! $export_plugin->exportDBFooter($db, $db_alias)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user