<?php
+/**********************************************************************
+ Copyright (C) FrontAccounting, LLC.
+ Released under the terms of the GNU General Public License,
+ GPL, as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
function write_config_db($new = false)
{
}
}
-function db_import($filename, $connection)
+function db_import($filename, $connection, $force=true)
{
global $db;
$allowed_commands = array(
"insert" => 'data_queries',
"update" => 'data_queries',
"drop table if exists" => 'drop_queries');
-
+ $ignored_mysql_errors = array( //errors ignored in normal (non forced) mode
+ '1022', // duplicate key
+ '1050', // Table %s already exists
+ '1060', // duplicate column name
+ '1061', // duplicate key name
+ '1062', // duplicate key entry
+ '1091' // can't drop key/column check if exists
+ );
$data_queries = array();
$drop_queries = array();
$table_queries = array();
$sql_errors = array();
ini_set("max_execution_time", "180");
+ db_query("SET foreign_key_checks=0");
+
// uncrompress gziped backup files
- if (strpos($filename, ".gzip") || strpos($filename, ".GZIP"))
+ if (strpos($filename, ".gz") || strpos($filename, ".GZ"))
$lines = db_ungzip("lines", $filename);
elseif (strpos($filename, ".zip") || strpos($filename, ".ZIP"))
$lines = db_unzip("lines", $filename);
}
}
-
-/* { // for debugging purposes
+/*
+ { // for debugging purposes
global $path_to_root;
- $f = fopen($path_to_root.'/tmp/dbimport.txt', 'w');
+ $f = fopen($path_to_root.'/tmp/dbimport.txt', 'w+');
fwrite($f, print_r($drop_queries,true) ."\n");
- fwrite(print_r($table_queries,true) ."\n");
- fwrite(print_r($data_queries,true));
+ fwrite($f, print_r($table_queries,true) ."\n");
+ fwrite($f, print_r($data_queries,true));
fclose($f);
}
*/
// execute drop tables if exists queries
- if (is_array($drop_queries))
+ if ($force && is_array($drop_queries))
{
foreach($drop_queries as $drop_query)
{
if (!db_query($drop_query[0]))
{
- $sql_errors[] = array(db_error_msg($db), $drop_query[1]);
+ if (!in_array(db_error_no(), $ignored_mysql_errors))
+ $sql_errors[] = array(db_error_msg($db), $drop_query[1]);
}
}
}
foreach($table_queries as $table_query)
{
if (!db_query($table_query[0]))
- {
- $sql_errors[] = array(db_error_msg($db), $table_query[1]);
+ {
+ if (!in_array(db_error_no(), $ignored_mysql_errors) || !$force) {
+ $sql_errors[] = array(db_error_msg($db), $table_query[1]);
+ }
}
}
}
{
if (!db_query($data_query[0]))
{
- $sql_errors[] = array(db_error_msg($db), $data_query[1]);
- break;
+ if (!in_array(db_error_no(),$ignored_mysql_errors) || !$force)
+ $sql_errors[] = array(db_error_msg($db), $data_query[1]);
}
}
}
+ db_query("SET foreign_key_checks=1");
+
if (count($sql_errors)) {
// display first failure message; the rest are probably derivative
$err = $sql_errors[0];
$filename = substr($filename, 0, strlen($filename) - 4);
// compare filname in zip and filename from $_GET
- if (substr($all, 30, strlen($filename)) != $filename)
- {
- return '';
- // exit if names differ
- //echo F_WRONG_FILE.".";
- //exit;
+ if (substr($all, 30, strlen($filename)-4) . substr($all, 30+strlen($filename)+9, 4)
+ != $filename) {
+ return ''; // exit if names differ
}
else
{
// get the suffix of the filename in hex
- $crc_bugfix = substr(substr($filename, 0, strlen($filename) - 4), strlen($filename) - 12 - 4);
+ $crc_bugfix = substr($all, 30, strlen($filename)+13);
+ $crc_bugfix = substr(substr($crc_bugfix, 0, strlen($crc_bugfix) - 4),
+ strlen($crc_bugfix) - 12 - 4);
$suffix = false;
-
// convert hex to ascii
for ($i=0; $i < 12; )
$suffix .= chr($crc_bugfix[$i++] . $crc_bugfix[$i++] . $crc_bugfix[$i++]);
// remove central directory information (we have always just one ziped file)
- $comp = substr($all, -(strlen($all) - 30 - strlen($filename)));
- $comp = substr($comp, 0, (strlen($comp) - 80 - strlen($filename)));
+ $comp = substr($all, -(strlen($all) - 30 - strlen($filename)-13));
+ $comp = substr($comp, 0, (strlen($comp) - 80 - strlen($filename)-13));
// fix the crc bugfix (see function save_to_file)
$comp = "x\9c" . $comp . $suffix;
// generates a dump of $db database
// $drop and $zip tell if to include the drop table statement or dry to pack
-function db_export($conn, $filename, $zip='no', $comment='')
+function db_export($conn, $filename, $zip='no', $comment='', $tbpref = TB_PREF)
{
global $app_title, $version, $power_url, $path_to_root;
$error = false;
-
// set max string size before writing to file
$max_size = 1048576 * 2; // 2 MB
// changes max size if value can be retrieved
$backupfile = $filename . ".zip";
else
$backupfile = $filename;
- $company = get_company_pref('coy_name');
+ $company = get_company_pref('coy_name', $tbpref);
+
//create comment
$out="# MySQL dump of database '".$conn["dbname"]."' on host '".$conn["host"]."'\n";
$out.="# Backup Date and Time: ".date("Y-m-d H:i")."\n";
$crc = crc32($fileData);
$zdata = gzcompress($fileData);
- // string needed for decoding (because of crc bug)
- //$name_suffix = substr($zdata, -4, 4);
- //$name_suffix2 = "_";
- //for ($i = 0; $i < 4; $i++)
- // $name_suffix2 .= sprintf("%03d", ord($name_suffix[$i]));
- //$backupfile = substr($backupfile, 0, strlen($backupfile) - 8) . $name_suffix2 . ".sql.zip";
- $name = substr($backupfile, 0, strlen($backupfile) -4);
+ // extend stored file name with suffix
+ // needed for decoding (because of crc bug)
+ $name_suffix = substr($zdata, -4, 4);
+ $name_suffix2 = "_";
+ for ($i = 0; $i < 4; $i++)
+ $name_suffix2 .= sprintf("%03d", ord($name_suffix[$i]));
+
+ $name = substr($backupfile, 0, strlen($backupfile) - 8) . $name_suffix2 . ".sql";
// fix crc bug
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
}
}
-
+function create_comp_dirs($comp_path, $comp_subdirs)
+{
+ $index = "<?php\nheader(\"Location: ../index.php\");\n?>";
+ $cdir = $comp_path;
+ @mkdir($cdir);
+ $f = @fopen("$cdir/index.php", "wb");
+ @fwrite($f, $index);
+ @fclose($f);
+
+ foreach($comp_subdirs as $dir)
+ {
+ @mkdir($cdir.'/'.$dir);
+ $f = @fopen("$cdir/$dir/index.php", "wb");
+ @fwrite($f, $index);
+ @fclose($f);
+ }
+}
?>
\ No newline at end of file