* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ if (!is_object(@$GLOBALS['egw'])) // called from outside eGW ==> setup { include ('./inc/functions.inc.php'); @set_time_limit(0); // Check header and authentication if (!$GLOBALS['egw_setup']->auth('Config')) { Header('Location: index.php'); exit; } // Does not return unless user is authorized $GLOBALS['egw_setup']->loaddb(); $tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup'); $self = 'db_backup.php'; } $db_backup = CreateObject('phpgwapi.db_backup'); $asyncservice = CreateObject('phpgwapi.asyncservice'); // download a backup, has to be before any output !!! if ($_POST['download']) { list($file) = each($_POST['download']); $file = $db_backup->backup_dir.'/'.basename($file); // basename to now allow to change the dir ob_end_clean(); $browser = CreateObject('phpgwapi.browser'); $browser->content_header(basename($file)); $f = fopen($file,'rb'); fpassthru($f); fclose($f); exit; } $setup_tpl = CreateObject('phpgwapi.Template',$tpl_root); $setup_tpl->set_file(array( 'T_head' => 'head.tpl', 'T_footer' => 'footer.tpl', 'T_db_backup' => 'db_backup.tpl', )); $setup_tpl->set_block('T_db_backup','schedule_row','schedule_rows'); $setup_tpl->set_block('T_db_backup','set_row','set_rows'); $setup_tpl->set_var('stage_title',$stage_title = lang('DB backup and restore')); $setup_tpl->set_var('stage_desc',lang('This program lets you backup your database, schedule a backup or restore it.')); $setup_tpl->set_var('error_msg',''); $bgcolor = array('#DDDDDD','#EEEEEE'); if (is_object($GLOBALS['egw_setup']->html)) { $GLOBALS['egw_setup']->html->show_header($stage_title,False,'config',$GLOBALS['egw_setup']->ConfigDomain . '(' . $GLOBALS['egw_domain'][$GLOBALS['egw_setup']->ConfigDomain]['db_type'] . ')'); } else { $setup_tpl->set_block('T_db_backup','setup_header'); $setup_tpl->set_var('setup_header',''); $GLOBALS['egw_info']['flags']['app_header'] = $stage_title; $GLOBALS['egw']->common->phpgw_header(); parse_navbar(); } // save backup housekeeping settings if ($_POST['save_backup_settings']) { $matches = array(); preg_match('/^[1-9][0-9]*$/', $_POST['backup_mincount'], $matches); $minCount = $matches[0]; $filesBackup =false; if ($_POST['backup_files']==='backup_files') $filesBackup = true; if (empty($minCount)) { $minCount = 0; $setup_tpl->set_var('error_msg',htmlspecialchars(lang("'%1' must be integer", lang("backup min count")))); } $configValues = array( 'backup_mincount'=>$minCount, 'backup_files' =>$filesBackup, ); $db_backup->saveConfig($configValues); if (is_int($minCount) && $minCount>0) { $cleaned_files = array(); /* Remove old backups. */ $db_backup->housekeeping(&$cleaned_files); foreach ($cleaned_files as $file) { echo '
'.lang('backup started, this might take a few minutes ...')."
\n".str_repeat(' ',4096); $db_backup->backup($f); if(is_resource($f)) fclose($f); $setup_tpl->set_var('error_msg',lang('backup finished')); /* Remove old backups. */ $cleaned_files = array(); $db_backup->housekeeping(&$cleaned_files); foreach ($cleaned_files as $file) { echo ''.lang('restore started, this might take a few minutes ...')."
\n".str_repeat(' ',4096); $db_backup->restore($f, FALSE, $file); $setup_tpl->set_var('error_msg',lang("backup '%1' restored",$file)); } else { $setup_tpl->set_var('error_msg',$f); } } // create a new scheduled backup if ($_POST['schedule']) { $asyncservice->set_timer($_POST['times'],'db_backup-'.implode(':',$_POST['times']),'admin.admin_db_backup.do_backup',''); } // cancel a scheduled backup if (is_array($_POST['cancel'])) { list($id) = each($_POST['cancel']); $asyncservice->cancel_timer($id); } // list scheduled backups if (($jobs = $asyncservice->read('db_backup-%'))) { foreach($jobs as $job) { $setup_tpl->set_var($job['times']); $setup_tpl->set_var('next_run',date('Y-m-d H:i',$job['next'])); $setup_tpl->set_var('actions',''); $setup_tpl->parse('schedule_rows','schedule_row',true); } } // input-fields to create a new scheduled backup foreach($times=array('year'=>'*','month'=>'*','day'=>'*','dow'=>'2-6','hour'=>3,'min'=>0) as $name => $default) { $setup_tpl->set_var($name,''); } $setup_tpl->set_var('next_run',' '); $setup_tpl->set_var('actions',''); $setup_tpl->parse('schedule_rows','schedule_row',true); // listing the availible backup sets $setup_tpl->set_var('backup_dir',$db_backup->backup_dir); $setup_tpl->set_var('set_rows',''); $handle = @opendir($db_backup->backup_dir); $files = array(); while($handle && ($file = readdir($handle))) { if ($file != '.' && $file != '..') { $files[filectime($db_backup->backup_dir.'/'.$file)] = $file; } } if ($handle) closedir($handle); krsort($files); foreach($files as $ctime => $file) { $size = filesize($db_backup->backup_dir.'/'.$file); $setup_tpl->set_var(array( 'filename' => $file, 'date' => date('Y-m-d H:i',$ctime), 'size' => sprintf('%3.1lf MB (%d)',$size/(1024*1024),$size), 'actions' => ' '."\n". ' '."\n". ' '."\n". '', )); $setup_tpl->parse('set_rows','set_row',true); } $setup_tpl->set_var(array( 'lang_scheduled_backups'=> lang('scheduled backups'), 'lang_year' => lang('year'), 'lang_month' => lang('month'), 'lang_day' => lang('day'), 'lang_dow' => lang('day of week