forked from extern/egroupware
* restore to current system charset, to force all restores to utf-8, and do NOT halt on sql errors in restore
This commit is contained in:
parent
6699869e2b
commit
a65406b88b
@ -347,23 +347,26 @@ class db_backup
|
|||||||
'httpproxy_port',
|
'httpproxy_port',
|
||||||
'httpproxy_server_username',
|
'httpproxy_server_username',
|
||||||
'httpproxy_server_password',
|
'httpproxy_server_password',
|
||||||
|
'system_charset',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Backup all data in the form of a (compressed) csv file
|
* Backup all data in the form of a (compressed) csv file
|
||||||
*
|
*
|
||||||
* @param resource $f file opened with fopen for reading
|
* @param resource $f file opened with fopen for reading
|
||||||
* @param boolean $convert_to_system_charset=false convert the restored data to the selected system-charset
|
* @param boolean $convert_to_system_charset=true convert the restored data to the selected system-charset
|
||||||
* @param string $filename='' gives the file name which is used in case of a zip archive.
|
* @param string $filename='' gives the file name which is used in case of a zip archive.
|
||||||
* @param boolean $protect_system_config=true should above system_config values be protected (NOT overwritten)
|
* @param boolean $protect_system_config=true should above system_config values be protected (NOT overwritten)
|
||||||
*
|
*
|
||||||
* @returns An empty string or an error message in case of failure.
|
* @returns An empty string or an error message in case of failure.
|
||||||
*/
|
*/
|
||||||
function restore($f,$convert_to_system_charset=false,$filename='',$protect_system_config=true)
|
function restore($f,$convert_to_system_charset=true,$filename='',$protect_system_config=true)
|
||||||
{
|
{
|
||||||
@set_time_limit(0);
|
@set_time_limit(0);
|
||||||
ini_set('auto_detect_line_endings',true);
|
ini_set('auto_detect_line_endings',true);
|
||||||
|
|
||||||
|
$convert_to_system_charset = true; // enforce now utf-8 as system charset restores of old backups
|
||||||
|
|
||||||
if ($protect_system_config)
|
if ($protect_system_config)
|
||||||
{
|
{
|
||||||
$system_config = array();
|
$system_config = array();
|
||||||
@ -419,6 +422,12 @@ class db_backup
|
|||||||
return lang("Cant open '%1' for %2", $filename, lang("reading"))."<br>\n";
|
return lang("Cant open '%1' for %2", $filename, lang("reading"))."<br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// do not stop if for whatever reason some sql statement fails
|
||||||
|
if ($this->db->Halt_On_Error != 'no')
|
||||||
|
{
|
||||||
|
$backup_db_halt_on_error = $this->db->Halt_On_Error;
|
||||||
|
$this->db->Halt_On_Error = 'no';
|
||||||
|
}
|
||||||
$table = False;
|
$table = False;
|
||||||
$n = 0;
|
$n = 0;
|
||||||
while(!feof($f))
|
while(!feof($f))
|
||||||
@ -547,14 +556,7 @@ class db_backup
|
|||||||
'config_name' => 'system_charset',
|
'config_name' => 'system_charset',
|
||||||
),__LINE__,__FILE__);
|
),__LINE__,__FILE__);
|
||||||
}
|
}
|
||||||
// zip?
|
// restore protected system config
|
||||||
if($type == 'zip')
|
|
||||||
{
|
|
||||||
fclose($f);
|
|
||||||
$f = $save_f;
|
|
||||||
unlink($name);
|
|
||||||
rmdir($dir.'/database_backup');
|
|
||||||
}
|
|
||||||
if ($protect_system_config)
|
if ($protect_system_config)
|
||||||
{
|
{
|
||||||
foreach($system_config as $row)
|
foreach($system_config as $row)
|
||||||
@ -565,6 +567,19 @@ class db_backup
|
|||||||
),__LINE__,__FILE__);
|
),__LINE__,__FILE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// restore original Halt_On_Error state (if changed)
|
||||||
|
if ($backup_db_halt_on_error)
|
||||||
|
{
|
||||||
|
$this->db->Halt_On_Error = $backup_db_halt_on_error;
|
||||||
|
}
|
||||||
|
// zip?
|
||||||
|
if($type == 'zip')
|
||||||
|
{
|
||||||
|
fclose($f);
|
||||||
|
$f = $save_f;
|
||||||
|
unlink($name);
|
||||||
|
rmdir($dir.'/database_backup');
|
||||||
|
}
|
||||||
if (!$this->db->transaction_commit())
|
if (!$this->db->transaction_commit())
|
||||||
{
|
{
|
||||||
return lang('Restore failed');
|
return lang('Restore failed');
|
||||||
|
@ -28,8 +28,8 @@ if (!is_object(@$GLOBALS['egw'])) // called from outside eGW ==> setup
|
|||||||
$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
|
$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
|
||||||
$self = 'db_backup.php';
|
$self = 'db_backup.php';
|
||||||
}
|
}
|
||||||
$db_backup = CreateObject('phpgwapi.db_backup');
|
$db_backup = new db_backup();
|
||||||
$asyncservice = CreateObject('phpgwapi.asyncservice');
|
$asyncservice = new asyncservice();
|
||||||
|
|
||||||
// download a backup, has to be before any output !!!
|
// download a backup, has to be before any output !!!
|
||||||
if ($_POST['download'])
|
if ($_POST['download'])
|
||||||
@ -176,7 +176,7 @@ if ($_POST['restore'])
|
|||||||
if (is_resource($f = $db_backup->fopen_backup($file,true)))
|
if (is_resource($f = $db_backup->fopen_backup($file,true)))
|
||||||
{
|
{
|
||||||
echo '<p align="center">'.lang('restore started, this might take a few minutes ...')."</p>\n".str_repeat(' ',4096);
|
echo '<p align="center">'.lang('restore started, this might take a few minutes ...')."</p>\n".str_repeat(' ',4096);
|
||||||
$db_backup->restore($f, FALSE, $file);
|
$db_backup->restore($f, true, $file); // allways convert to current system charset on restore
|
||||||
$setup_tpl->set_var('error_msg',lang("backup '%1' restored",$file));
|
$setup_tpl->set_var('error_msg',lang("backup '%1' restored",$file));
|
||||||
if ($run_in_egw)
|
if ($run_in_egw)
|
||||||
{
|
{
|
||||||
@ -185,6 +185,7 @@ if ($_POST['restore'])
|
|||||||
$GLOBALS['egw_info']['server']['header_admin_user']='admin',
|
$GLOBALS['egw_info']['server']['header_admin_user']='admin',
|
||||||
$GLOBALS['egw_info']['server']['header_admin_password']=uniqid('pw',true),false,true);
|
$GLOBALS['egw_info']['server']['header_admin_password']=uniqid('pw',true),false,true);
|
||||||
echo $cmd->run()."\n";
|
echo $cmd->run()."\n";
|
||||||
|
echo '<h3>'.lang('You should %1log out%2 and in again, to update your current session!','<a href="'.egw::link('/logout.php').'" target="_parent">','</a>')."</h3>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user