0) {
$current_date = mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', current_time('timestamp')));
$backup = array();
$backup['date'] = current_time('timestamp');
$backup['mysqldumppath'] = $backup_options['mysqldumppath'];
$backup['mysqlpath'] = $backup_options['mysqlpath'];
$backup['path'] = $backup_options['path'];
$backup['password'] = str_replace('$', '\$', DB_PASSWORD);
$backup['host'] = DB_HOST;
$backup['port'] = '';
$backup['sock'] = '';
if(strpos(DB_HOST, ':') !== false) {
$db_host = explode(':', DB_HOST);
$backup['host'] = $db_host[0];
if(intval($db_host[1]) != 0) {
$backup['port'] = ' --port="'.intval($db_host[1]).'"';
} else {
$backup['sock'] = ' --socket="'.$db_host[1].'"';
}
}
$backup['command'] = '';
$brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
if(intval($backup_options['backup_gzip']) == 1) {
$backup['filename'] = $backup['date'].'_-_'.DB_NAME.'.sql.gz';
$backup['filepath'] = $backup['path'].'/'.$backup['filename'];
$backup['command'] = $brace.$backup['mysqldumppath'].$brace.' --force --host="'.$backup['host'].'" --user="'.DB_USER.'" --password="'.$backup['password'].'"'.$backup['port'].$backup['sock'].' --add-drop-table --skip-lock-tables '.DB_NAME.' | gzip > '.$brace.$backup['filepath'].$brace;
} else {
$backup['filename'] = $backup['date'].'_-_'.DB_NAME.'.sql';
$backup['filepath'] = $backup['path'].'/'.$backup['filename'];
$backup['command'] = $brace.$backup['mysqldumppath'].$brace.' --force --host="'.$backup['host'].'" --user="'.DB_USER.'" --password="'.$backup['password'].'"'.$backup['port'].$backup['sock'].' --add-drop-table --skip-lock-tables '.DB_NAME.' > '.$brace.$backup['filepath'].$brace;
}
execute_backup($backup['command']);
if( !empty( $backup_email ) )
{
dbmanager_email_backup( $backup_email, $backup['filepath'] );
}
}
return;
}
function cron_dbmanager_optimize() {
global $wpdb;
$backup_options = get_option('dbmanager_options');
$optimize = intval($backup_options['optimize']);
$optimize_period = intval($backup_options['optimize_period']);
if($optimize_period > 0) {
$optimize_tables = array();
$tables = $wpdb->get_col("SHOW TABLES");
foreach($tables as $table_name) {
$optimize_tables[] = '`'.$table_name.'`';
}
$wpdb->query('OPTIMIZE TABLE '.implode(',', $optimize_tables));
}
return;
}
function cron_dbmanager_repair() {
global $wpdb;
$backup_options = get_option('dbmanager_options');
$repair = intval($backup_options['repair']);
$repair_period = intval($backup_options['repair_period']);
if($repair_period > 0) {
$repair_tables = array();
$tables = $wpdb->get_col("SHOW TABLES");
foreach($tables as $table_name) {
$repair_tables[] = '`'.$table_name.'`';
}
$wpdb->query('REPAIR TABLE '.implode(',', $repair_tables));
}
return;
}
function cron_dbmanager_reccurences($schedules) {
$backup_options = get_option('dbmanager_options');
$backup = intval($backup_options['backup'])*intval($backup_options['backup_period']);
$optimize = intval($backup_options['optimize'])*intval($backup_options['optimize_period']);
$repair = intval($backup_options['repair'])*intval($backup_options['repair_period']);
if($backup == 0) {
$backup = 31536000;
}
if($optimize == 0) {
$optimize = 31536000;
}
if($repair == 0) {
$repair = 31536000;
}
$schedules['dbmanager_backup'] = array('interval' => $backup, 'display' => __('WP-DBManager Backup Schedule', 'wp-dbmanager'));
$schedules['dbmanager_optimize'] = array('interval' => $optimize, 'display' => __('WP-DBManager Optimize Schedule', 'wp-dbmanager'));
$schedules['dbmanager_repair'] = array('interval' => $repair, 'display' => __('WP-DBManager Repair Schedule', 'wp-dbmanager'));
return $schedules;
}
### Function: Ensure .htaccess Is In The Backup Folder
add_action( 'admin_notices', 'dbmanager_admin_notices' );
function dbmanager_admin_notices() {
$backup_options = get_option( 'dbmanager_options' );
$backup_folder_writable = ( is_dir( $backup_options['path'] ) && wp_is_writable( $backup_options['path'] ) );
$htaccess_exists = ( file_exists( $backup_options['path'] . '/.htaccess' ) );
if( !isset( $backup_options['hide_admin_notices'] ) || intval( $backup_options['hide_admin_notices'] ) === 0 )
{
if( !$backup_folder_writable || !$htaccess_exists ) {
echo '
';
if( !$backup_folder_writable ) {
echo '
'.__('Your backup folder is NOT writable', 'wp-postratings').'
';
echo '
'.sprintf( __( 'To correct this issue, make the folder %s writable.', 'wp-dbmanager'), $backup_options['path'] ).'
';
}
if( !$htaccess_exists ) {
echo '
'.__('Your backup folder MIGHT be visible to the public', 'wp-dbmanager').'
';
echo '
'.sprintf( __( 'To correct this issue, move the file from %s to %s', 'wp-dbmanager'), plugin_dir_path( __FILE__ ) . 'htaccess.txt', $backup_options['path'] .'/.htaccess' ).'
';
}
echo '
';
}
}
}
### Function: Auto Detect MYSQL and MYSQL Dump Paths
function detect_mysql() {
global $wpdb;
$paths = array('mysq' => '', 'mysqldump' => '');
if(substr(PHP_OS,0,3) == 'WIN') {
$mysql_install = $wpdb->get_row("SHOW VARIABLES LIKE 'basedir'");
if($mysql_install) {
$install_path = str_replace('\\', '/', $mysql_install->Value);
$paths['mysql'] = $install_path.'bin/mysql.exe';
$paths['mysqldump'] = $install_path.'bin/mysqldump.exe';
} else {
$paths['mysql'] = 'mysql.exe';
$paths['mysqldump'] = 'mysqldump.exe';
}
} else {
if(function_exists('exec')) {
$paths['mysql'] = @exec('which mysql');
$paths['mysqldump'] = @exec('which mysqldump');
} else {
$paths['mysql'] = 'mysql';
$paths['mysqldump'] = 'mysqldump';
}
}
return $paths;
}
### Executes OS-Dependent mysqldump Command (By: Vlad Sharanhovich)
function execute_backup($command) {
$backup_options = get_option('dbmanager_options');
check_backup_files();
if(substr(PHP_OS, 0, 3) == 'WIN') {
$writable_dir = $backup_options['path'];
$tmpnam = $writable_dir.'/wp-dbmanager.bat';
$fp = fopen($tmpnam, 'w');
fwrite($fp, $command);
fclose($fp);
system($tmpnam.' > NUL', $error);
unlink($tmpnam);
} else {
passthru($command, $error);
}
return $error;
}
### Function: Email database backup
function dbmanager_email_backup($to = '', $backup_file_path)
{
if( is_email( $to ) && file_exists( $backup_file_path ) )
{
$backup_options = get_option( 'dbmanager_options' );
$file_name = basename( $backup_file_path );
$file_gmt_date = gmdate( 'Y-m-d H:i:s', substr( $file_name, 0, 10 ) );
$file_size = format_size( filesize( $backup_file_path) );
$file_date = mysql2date( sprintf( __( '%s @ %s', 'wp-dbmanager' ), get_option( 'date_format' ), get_option( 'time_format' ) ), $file_gmt_date );
$to = ( !empty( $to ) ? $to : get_option( 'admin_email' ) );
$subject = ( !empty( $backup_options['backup_email_subject'] ) ? $backup_options['backup_email_subject'] : dbmanager_default_options( 'backup_email_subject' ) );
$subject = str_replace(
array(
'%SITE_NAME%'
, '%POST_DATE%'
, '%POST_TIME%'
)
, array(
wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES )
, mysql2date( get_option( 'date_format' ), $file_gmt_date )
, mysql2date( get_option( 'time_format' ), $file_gmt_date )
)
, $subject
);
$message = __( 'Website Name:', 'wp-dbmanager').' '. wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) . "\n".
__( 'Website URL:', 'wp-dbmanager' ).' '.get_bloginfo( 'url' )."\n".
__( 'Backup File Name:', 'wp-dbmanager' ).' '.$file_name."\n".
__( 'Backup File Date:', 'wp-dbmanager' ).' '.$file_date."\n".
__( 'Backup File Size:', 'wp-dbmanager' ).' '.$file_size."\n\n".
__( 'With Regards,', 'wp-dbmanager' )."\n".
wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ). ' ' . __('Administrator', 'wp-dbmanager' )."\n".
get_bloginfo('url');
$from = ( !empty( $backup_options['backup_email_from'] ) ? $backup_options['backup_email_from'] : dbmanager_default_options( 'backup_email_from' ) );
$from_name = ( !empty( $backup_options['backup_email_from_name'] ) ? $backup_options['backup_email_from_name'] : dbmanager_default_options( 'backup_email_from_name' ) );
$headers[] = 'From: "' . wp_specialchars_decode( stripslashes_deep( $from_name ), ENT_QUOTES ) . '" <'.$from.'>';
return wp_mail( $to, $subject, $message, $headers, $backup_file_path );
}
return false;
}
### Function: Format Bytes Into KB/MB
if(!function_exists('format_size')) {
function format_size($rawSize) {
if($rawSize / 1073741824 > 1)
return number_format_i18n($rawSize/1048576, 1) . ' '.__('GiB', 'wp-dbmanager');
else if ($rawSize / 1048576 > 1)
return number_format_i18n($rawSize/1048576, 1) . ' '.__('MiB', 'wp-dbmanager');
else if ($rawSize / 1024 > 1)
return number_format_i18n($rawSize/1024, 1) . ' '.__('KiB', 'wp-dbmanager');
else
return number_format_i18n($rawSize, 0) . ' '.__('bytes', 'wp-dbmanager');
}
}
### Function: Get File Extension
if(!function_exists('file_ext')) {
function file_ext($file_name) {
return substr(strrchr($file_name, '.'), 1);
}
}
### Function: Check Folder Whether There Is Any File Inside
if(!function_exists('is_emtpy_folder')) {
function is_emtpy_folder($folder){
if(is_dir($folder) ){
$folder_content = '';
$handle = opendir($folder);
while( (gettype( $name = readdir($handle)) != 'boolean')){
if($name != '.htaccess') {
$name_array[] = $name;
}
}
foreach($name_array as $temp)
$folder_content .= $temp;
if($folder_content == '...')
return true;
else
return false;
closedir($handle);
}
else
return true;
}
}
### Function: Make Sure Maximum Number Of Database Backup Files Does Not Exceed
function check_backup_files() {
$backup_options = get_option('dbmanager_options');
$database_files = array();
if(!is_emtpy_folder($backup_options['path'])) {
if ($handle = opendir($backup_options['path'])) {
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..' && (file_ext($file) == 'sql' || file_ext($file) == 'gz')) {
$database_files[] = $file;
}
}
closedir($handle);
sort($database_files);
}
}
if(sizeof($database_files) >= $backup_options['max_backup']) {
@unlink($backup_options['path'].'/'.$database_files[0]);
}
}
### Function: DBManager Default Options
function dbmanager_default_options( $option_name )
{
switch( $option_name )
{
case 'backup_email_from':
return get_option( 'admin_email' );
break;
case 'backup_email_from_name':
return wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) .' '.__( 'Administrator', 'wp-dbmanager' );
break;
case 'backup_email_subject':
return __( '%SITE_NAME% Database Backup File For %POST_DATE% @ %POST_TIME%', 'wp-dbmanager' );
break;
case 'hide_admin_notices':
return 0;
break;
}
}
### Function: Acticate Plugin
register_activation_hook( __FILE__, 'dbmanager_activation' );
function dbmanager_activation( $network_wide )
{
$auto = detect_mysql();
// Add Options
$option_name = 'dbmanager_options';
$option = array(
'mysqldumppath' => $auto['mysqldump']
, 'mysqlpath' => $auto['mysql']
, 'path' => str_replace( '\\', '/', WP_CONTENT_DIR ).'/backup-db'
, 'max_backup' => 10
, 'backup' => 1
, 'backup_gzip' => 0
, 'backup_period' => 604800
, 'backup_email' => get_option( 'admin_email' )
, 'backup_email_from' => dbmanager_default_options( 'backup_email_from' )
, 'backup_email_from_name' => dbmanager_default_options( 'backup_email_from_name' )
, 'backup_email_subject' => dbmanager_default_options( 'backup_email_subject' )
, 'optimize' => 3
, 'optimize_period' => 86400
, 'repair' => 2
, 'repair_period' => 604800
, 'hide_admin_notices' => 0
);
if ( is_multisite() && $network_wide )
{
$ms_sites = wp_get_sites();
if( 0 < sizeof( $ms_sites ) )
{
foreach ( $ms_sites as $ms_site )
{
switch_to_blog( $ms_site['blog_id'] );
add_option( $option_name, $option );
dbmanager_activate();
}
}
restore_current_blog();
}
else
{
add_option( $option_name, $option );
dbmanager_activate();
}
}
function dbmanager_activate() {
$plugin_path = plugin_dir_path( __FILE__ );
$default_backup_folder = WP_CONTENT_DIR . '/backup-db';
// Create Backup Folder
if( is_dir( $default_backup_folder ) && wp_is_writable( $default_backup_folder ) )
{
if( wp_mkdir_p( $default_backup_folder ) )
{
@copy( $plugin_path . 'htaccess.txt', $default_backup_folder . '/.htaccess' );
@chmod( $default_backup_folder, 0750 );
}
}
// Set 'manage_database' Capabilities To Administrator
$role = get_role( 'administrator' );
if( !$role->has_cap( 'manage_database') )
{
$role->add_cap( 'manage_database' );
}
}
### Function: Download Database
add_action('init', 'download_database');
function download_database() {
if(isset($_POST['do']) && $_POST['do'] == __('Download', 'wp-dbmanager') && !empty($_POST['database_file'])) {
if(strpos($_SERVER['HTTP_REFERER'], admin_url('admin.php?page=wp-dbmanager/database-manage.php')) !== false) {
$database_file = trim($_POST['database_file']);
if(substr($database_file, strlen($database_file) - 4, 4) == '.sql' || substr($database_file, strlen($database_file) - 7, 7) == '.sql.gz') {
check_admin_referer('wp-dbmanager_manage');
$backup_options = get_option('dbmanager_options');
$clean_file_name = sanitize_file_name($database_file);
$clean_file_name = str_replace('sql_.gz', 'sql.gz', $clean_file_name);
$file_path = $backup_options['path'].'/'.$clean_file_name;
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".basename($file_path).";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file_path));
@readfile($file_path);
}
}
exit();
}
}
### Function: Database Options
function dbmanager_options() {
$text = '';
$backup_options = get_option('dbmanager_options');
if(!empty($_POST['Submit'])) {
check_admin_referer('wp-dbmanager_options');
$backup_options['mysqldumppath'] = sanitize_text_field( $_POST['db_mysqldumppath'] );
$backup_options['mysqlpath'] = sanitize_text_field( $_POST['db_mysqlpath'] );
$backup_options['path'] = sanitize_text_field( $_POST['db_path'] );
$backup_options['max_backup'] = intval( $_POST['db_max_backup'] );
$backup_options['backup'] = intval( $_POST['db_backup'] );
$backup_options['backup_gzip'] = intval( $_POST['db_backup_gzip'] );
$backup_options['backup_period'] = intval( $_POST['db_backup_period'] );
$backup_options['backup_email'] = sanitize_email( $_POST['db_backup_email'] );
$backup_options['backup_email_from'] = sanitize_email( $_POST['db_backup_email_from'] );
$backup_options['backup_email_from_name'] = sanitize_text_field( $_POST['db_backup_email_from_name'] );
$backup_options['backup_email_subject'] = sanitize_text_field( $_POST['db_backup_email_subject'] );
$backup_options['optimize'] = intval( $_POST['db_optimize'] );
$backup_options['optimize_period'] = intval( $_POST['db_optimize_period'] );
$backup_options['repair'] = intval( $_POST['db_repair'] );
$backup_options['repair_period'] = intval( $_POST['db_repair_period'] );
$backup_options['hide_admin_notices'] = intval( $_POST['db_hide_admin_notices'] );
$update_db_options = update_option('dbmanager_options', $backup_options);
if($update_db_options) {
$text = ''.__('Database Options Updated', 'wp-dbmanager').'';
}
if(empty($text)) {
$text = ''.__('No Database Option Updated', 'wp-dbmanager').'';
}
wp_clear_scheduled_hook('dbmanager_cron_backup');
if($backup_options['backup_period'] > 0) {
if (!wp_next_scheduled('dbmanager_cron_backup')) {
wp_schedule_event(time(), 'dbmanager_backup', 'dbmanager_cron_backup');
}
}
wp_clear_scheduled_hook('dbmanager_cron_optimize');
if($backup_options['optimize_period'] > 0) {
if (!wp_next_scheduled('dbmanager_cron_optimize')) {
wp_schedule_event(time(), 'dbmanager_optimize', 'dbmanager_cron_optimize');
}
}
wp_clear_scheduled_hook('dbmanager_cron_repair');
if($backup_options['repair_period'] > 0) {
if (!wp_next_scheduled('dbmanager_cron_repair')) {
wp_schedule_event(time(), 'dbmanager_repair', 'dbmanager_cron_repair');
}
}
}
$path = detect_mysql();
// Default Options
if( !isset( $backup_options['backup_email_from'] ) )
{
$backup_options['backup_email_from'] = dbmanager_default_options( 'backup_email_from' );
}
if( !isset( $backup_options['backup_email_from_name'] ) )
{
$backup_options['backup_email_from_name'] = dbmanager_default_options( 'backup_email_from_name' );
}
if( !isset( $backup_options['backup_email_subject'] ) )
{
$backup_options['backup_email_subject'] = dbmanager_default_options( 'backup_email_subject' );
}
if( !isset( $backup_options['hide_admin_notices'] ) )
{
$backup_options['hide_admin_notices'] = dbmanager_default_options( 'hide_admin_notices' );
}
?>
'; } ?>