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' ); } ?>

'.$text.'

'; } ?>

  

  


mysqldump.exe\'.', 'wp-dbmanager'); ?>
mysql.exe\'.', 'wp-dbmanager'); ?>

mysqldump\'.', 'wp-dbmanager'); ?>
mysql\'.', 'wp-dbmanager'); ?>

'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_backup') + (get_option('gmt_offset') * 3600)))).''; } else { _e('N/A', 'wp-dbmanager'); } ?>

      

'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_optimize') + (get_option('gmt_offset') * 3600)))).''; } else { _e('N/A', 'wp-dbmanager'); } ?>

  

'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_repair') + (get_option('gmt_offset') * 3600)))).''; } else { _e('N/A', 'wp-dbmanager'); } ?>

  

  <>

/>  />