diff options
-rw-r--r-- | phpBB/adm/style/acp_database.html | 3 | ||||
-rw-r--r-- | phpBB/includes/acp/acp_database.php | 113 | ||||
-rw-r--r-- | phpBB/language/en/acp/board.php | 2 | ||||
-rw-r--r-- | phpBB/language/en/acp/database.php | 6 |
4 files changed, 84 insertions, 40 deletions
diff --git a/phpBB/adm/style/acp_database.html b/phpBB/adm/style/acp_database.html index e40909febc..c1db0cda9c 100644 --- a/phpBB/adm/style/acp_database.html +++ b/phpBB/adm/style/acp_database.html @@ -16,7 +16,8 @@ </fieldset> <fieldset class="submit-buttons"> <input class="button1" type="submit" id="submit" name="submit" value="{L_START_RESTORE}" /> - <input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" /> + <input class="button2" type="submit" id="delete" name="delete" value="{L_DELETE_BACKUP}" /> + <input class="button2" type="submit" id="download" name="download" value="{L_DOWNLOAD_BACKUP}" /> </fieldset> </form> <!-- ELSE --> diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 05208c9235..45c60d2df5 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -44,10 +44,21 @@ class acp_database $format = request_var('method', ''); $where = request_var('where', ''); + $store = $download = false; + + if ($where == 'store_and_download' || $where == 'store') + { + $store = true; + } + + if ($where == 'store_and_download' || $where == 'download') + { + $download = true; + } + @set_time_limit(1200); $filename = time(); - //$time_start = microtime(true); // We set up the info needed for our on-the-fly creation :D switch ($format) @@ -82,7 +93,7 @@ class acp_database // memory. The server process can be easily killed by storing too much data at once. - if ($where == 'store') + if ($store == true) { $file = $phpbb_root_path . 'store/' . $filename . $ext; @@ -93,7 +104,8 @@ class acp_database trigger_error('Unable to write temporary file to storage folder'); } } - else + + if ($download == true) { $name = $filename . $ext; header('Pragma: no-cache'); @@ -107,7 +119,6 @@ class acp_database $sql_data .= "# phpBB Backup Script\n"; $sql_data .= "# Dump of tables for $table_prefix\n"; $sql_data .= "# DATE : " . gmdate("d-m-Y H:i:s", $filename) . " GMT\n"; - //$sql_data .= "# START : $time_start\n"; $sql_data .= "#\n"; switch (SQL_LAYER) @@ -144,11 +155,12 @@ class acp_database $sql_data .= $this->get_table_structure($table_name); } // Now write the data for the first time. :) - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); } - else + + if ($download == true) { if (!empty($oper)) { @@ -209,11 +221,12 @@ class acp_database } $sql_data .= $schema_insert . implode(', ', $values) . ");\n"; - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); } - else + + if ($download == true) { if (!empty($oper)) { @@ -226,6 +239,7 @@ class acp_database } $sql_data = ''; + $values = array(); } mysqli_free_result($result); } @@ -253,13 +267,16 @@ class acp_database { $field_set[$j] = $field[$j]->name; } - + + $search = array('\\', "'", "\x00", "\x0a", "\x0d", "\x1a"); //\x08\\x09, not required + $replace = array('\\\\\\\\', "''", '\0', '\n', '\r', '\Z'); $fields = implode(', ', $field_set); - $values = array(); $schema_insert = 'INSERT INTO ' . $table_name . ' (' . $fields . ') VALUES ('; while ($row = mysql_fetch_row($result)) { + $values = array(); + for ($j = 0; $j < $fields_cnt; $j++) { if (!isset($row[$j]) || is_null($row[$j])) @@ -272,16 +289,17 @@ class acp_database } else { - $values[] = "'" . $row[$j] . "'"; + $values[] = "'" . str_replace($search, $replace, $row[$j]) . "'"; } } $sql_data .= $schema_insert . implode(', ', $values) . ");\n"; - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); } - else + + if ($download == true) { if (!empty($oper)) { @@ -293,8 +311,6 @@ class acp_database } } $sql_data = ''; - - $values = array(); } mysql_free_result($result); } @@ -331,11 +347,12 @@ class acp_database } $sql_data .= 'INSERT INTO ' . $table_name . ' (' . implode(', ', $names) . ') VALUES ('. implode(', ', $data) .");\n"; - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); } - else + + if ($download == true) { if (!empty($oper)) { @@ -413,11 +430,12 @@ class acp_database // into a valid sql statement to recreate that field in the data. $sql_data .= "INSERT INTO $table_name (" . implode(', ', $schema_fields) . ') VALUES(' . implode(', ', $schema_vals) . ");\n"; - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); } - else + + if ($download == true) { if (!empty($oper)) { @@ -428,6 +446,7 @@ class acp_database echo $sql_data; } } + $sql_data = ''; } @@ -446,17 +465,14 @@ class acp_database $sql_data .= "COMMIT;"; break; } - - /*$time_stop = microtime(true); - $sql_data .= "# END : $time_stop\n"; - $sql_data .= "# DIFF : ".($time_stop-$time_start);*/ - if ($where !== 'download') + if ($store == true) { $write($fp, $sql_data); $close($fp); } - else + + if ($download == true) { if (!empty($oper)) { @@ -471,18 +487,6 @@ class acp_database unset($sql_data); - if ($where == 'store_and_download') - { - $name = $filename . $ext; - - $fp = fopen("{$phpbb_root_path}store/$name", 'rb'); - while ($buffer = fread($fp, 1024)) - { - echo $buffer; - } - fclose($fp); - exit; - } add_log('admin', 'LOG_DB_BACKUP'); trigger_error($user->lang['BACKUP_SUCCESS']); break; @@ -570,6 +574,15 @@ class acp_database switch ($action) { case 'submit': + $delete = request_var('delete', ''); + + if ($delete) + { + $file = request_var('file', ''); + unlink($phpbb_root_path . 'store/' . $file); + trigger_error($user->lang['BACKUP_SUCCESS']); + } + $file = request_var('file', ''); $data = ''; @@ -588,6 +601,32 @@ class acp_database break; } + $download = request_var('download', ''); + + if ($download) + { + $name = $matches[0]; + + switch ($matches[2]) + { + case 'sql': + $mimetype = 'text/x-sql'; + break; + case 'sql.bz2': + $mimetype = 'application/x-bzip2'; + break; + case 'sql.gz': + $mimetype = 'application/x-gzip'; + break; + } + + header('Pragma: no-cache'); + header("Content-Type: $mimetype; name=\"$name\""); + header("Content-disposition: attachment; filename=$name"); + echo $data; + die; + } + if (!empty($data)) { // Strip out sql comments... diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 33589d2a1f..723a61c745 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -252,7 +252,7 @@ $lang = array_merge($lang, array( 'ALLOW_AUTOLOGIN_EXPLAIN' => 'Determines whether users can autologin when they visit the board.', 'AUTOLOGIN_LENGTH' => 'Persistent login key expiry days', 'AUTOLOGIN_LENGTH_EXPLAIN' => 'Number of days after which persistent login keys are removed or zero to disable.', - 'VISUAL_CONFIRM_REG' => 'Enable visual confirmation', + 'VISUAL_CONFIRM_REG' => 'Enable visual confirmation for registrations', 'VISUAL_CONFIRM_REG_EXPLAIN'=> 'Requires new users to enter a random code matching an image to help prevent mass registrations.', 'VISUAL_CONFIRM_POST' => 'Enable visual confirmation for guest postings', 'VISUAL_CONFIRM_POST_EXPLAIN'=> 'Requires anonymous users to enter a random code matching an image to help prevent mass postings.', diff --git a/phpBB/language/en/acp/database.php b/phpBB/language/en/acp/database.php index 3f688d6d77..1db01ed7a4 100644 --- a/phpBB/language/en/acp/database.php +++ b/phpBB/language/en/acp/database.php @@ -47,10 +47,14 @@ $lang = array_merge($lang, array( 'STORE_AND_DOWNLOAD' => 'Store and Download', 'ACP_RESTORE' => 'Restore', - 'ACP_RESTORE_EXPLAIN' => 'This will perform a full restore of all phpBB tables from a saved file. You can <u>either</u> upload the backup file via this form or upload it manually to a location on the server. If your server supports it you may use a gzip compressed text file and it will automatically be decompressed. <b>WARNING</b> This will overwrite any existing data. The restore may take a long time to process please do not move from this page till it is complete.', + 'ACP_RESTORE_EXPLAIN' => 'This will perform a full restore of all phpBB tables from a saved file. You can <u>either</u> upload the backup file via this form or upload it manually to a location on the server. If your server supports it you may use a gzip or bzip2 compressed text file and it will automatically be decompressed. <b>WARNING</b> This will overwrite any existing data. The restore may take a long time to process please do not move from this page till it is complete.', 'SELECT_FILE' => 'Select a file', + 'RESTORE_OPTIONS' => 'Restore options', 'START_RESTORE' => 'Start Restore', + 'DELETE_BACKUP' => 'Delete Backup', + 'DOWNLOAD_BACKUP' => 'Download Backup', 'RESTORE_SUCCESS' => 'The Database has been successfully restored.<br /><br />Your board should be back to the state it was when the backup was made.', + 'BACKUP_SUCCESS' => 'The backup has been successfully deleted.', )); ?>
\ No newline at end of file |