recursive_sanitize_text_field( wp_unslash( $_POST['wp_db_exclude_table'] ) ) , false); // phpcs:ignore } else { update_option( 'wp_db_exclude_table', '', false ); } $nonce = wp_create_nonce( 'wp-database-backup' ); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=save&_wpnonce=' . $nonce ); } if ( true === isset( $_POST['wp_db_local_backup_path'] ) ) { update_option( 'wp_db_local_backup_path', wp_db_filter_data( sanitize_text_field( wp_unslash( $_POST['wp_db_local_backup_path'] ) ) ) ); } if ( isset( $_POST['wp_db_backup_email_id'] ) ) { update_option( 'wp_db_backup_email_id', wp_db_filter_data( sanitize_email( wp_unslash( $_POST['wp_db_backup_email_id'] ) ) ) , false); } if ( isset( $_POST['wp_db_backup_email_attachment'] ) ) { $email_attachment = sanitize_text_field( wp_unslash( $_POST['wp_db_backup_email_attachment'] ) , false); update_option( 'wp_db_backup_email_attachment', $email_attachment ); } if ( isset( $_POST['local_backup_submit'] ) && 'Save Settings' === $_POST['local_backup_submit'] ) { if ( true === isset( $_POST['wp_db_local_backup'] ) ) { update_option( 'wp_db_local_backup', 1 , false); } else { update_option( 'wp_db_local_backup', 0 , false); } } if ( isset( $_POST['wp_db_backup_options'] ) ) { update_option( 'wp_db_backup_options', $_POST['wp_db_backup_options'], false); } do_action('wpdbbkp_save_pro_options'); } $wp_db_backup_destination_email = get_option( 'wp_db_backup_destination_Email' , false); if ( isset( $_GET['page'] ) && 'wp-database-backup' === $_GET['page'] && isset( $_GET['action'] ) && 'unlink' === $_GET['action'] ) { // Specify the target directory and add forward slash. $dir = plugin_dir_path( __FILE__ ) . 'Destination/Dropbox/tokens/'; // Open the directory. $dir_handle = opendir( $dir ); // Loop over all of the files in the folder. $file = readdir( $dir_handle ); while ( $file ) { // If $file is NOT a directory remove it. if ( ! is_dir( $file ) ) { unlink( $dir . $file ); } } // Close the directory. closedir( $dir_handle ); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup' ); } $nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'wp-database-backup' ) ) { if ( isset( $_GET['action'] ) && current_user_can( 'manage_options' ) ) { switch ( (string) $_GET['action'] ) { case 'createdbbackup': $this->wp_db_backup_event_process(); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=create&_wpnonce=' . $nonce ); break; case 'removebackup': if ( true === isset( $_GET['index'] ) ) { $index = (int) $_GET['index']; $options = get_option( 'wp_db_backup_backups' ); $newoptions = array(); $count = 0; foreach ( $options as $option ) { if ( $count !== $index ) { $newoptions[] = $option; } $count++; } $upload_dir = wp_upload_dir(); $actual_working_directory = getcwd(); $file_directory = $upload_dir['basedir'].'/db-backup/'; /* Fix for when you try to delete a file thats in a folder higher in the hierarchy to your working directory */ chdir($file_directory); if ( file_exists( $options[ $index ]['filename'] ) ) { unlink( $options[ $index ]['filename'] ); } $file_sql = explode( '.', $options[ $index ]['filename'] ); if ( file_exists( $file_sql[0] . '.sql' ) ) { unlink( $file_sql[0] . '.sql' ); } chdir($actual_working_directory); update_option( 'wp_db_backup_backups', $newoptions , false); $nonce = wp_create_nonce( 'wp-database-backup' ); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=delete&_wpnonce=' . $nonce ); exit; } break; case 'removeallbackup': $upload_dir = wp_upload_dir(); $actual_working_directory = getcwd(); $file_directory = $upload_dir['basedir']; /* Fix for when you try to delete a file thats in a folder higher in the hierarchy to your working directory */ chdir($file_directory); $files = glob($file_directory.'/db-backup'.'/*'); // Deleting all the files in the list foreach($files as $file) { if(is_file($file)){ unlink($file); } } chdir($actual_working_directory); update_option( 'wp_db_backup_backups', array() , false); $nonce = wp_create_nonce( 'wp-database-backup' ); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=deleteall&_wpnonce=' . $nonce ); exit; break; case 'clear_temp_db_backup_file': $options = get_option( 'wp_db_backup_backups' ); $newoptions = array(); $backup_check_list = array( '.htaccess', 'index.php' ); $delete_message = 'WPDB : Deleted Files:'; foreach ( $options as $option ) { $backup_check_list[] = $option['filename']; } $path_info = wp_upload_dir(); $wp_db_backup_path = $path_info['basedir'] . '/db-backup'; // Open a directory, and read its contents. if ( is_dir( $wp_db_backup_path ) ) { $dh = opendir( $wp_db_backup_path ); if ( $dh ) { while ( false !== ($file = readdir( $dh )) ) { if ( ! ( in_array( $file, $backup_check_list, true ) ) ) { if ( file_exists( $wp_db_backup_path . '/' . $file ) ) { unlink( $wp_db_backup_path . '/' . $file ); } $delete_message .= ' ' . $file; } } closedir( $dh ); } } wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=clear_temp_db_backup_file&_wpnonce=' . $nonce ); exit; break; case 'restorebackup': $index = (int) $_GET['index']; $options = get_option( 'wp_db_backup_backups' ); $restore_limit = get_option( 'wp_db_restore_limit'); $newoptions = array(); $count = 0; foreach ( $options as $option ) { if ( $count !== $index ) { $newoptions[] = $option; } $count++; } if ( isset( $options[ $index ]['restore_limit'] ) && $options[ $index ]['restore_limit']==1) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; if ( !is_plugin_active( 'wp-database-backup-pro/wp-database-backup-pro.php' ) ) { wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=restore_limit&_wpnonce=' . $nonce ); } } if(!empty($options[ $index ]['restore_limit'])){ $options[ $index ]['restore_limit']=1; } if ( isset( $options[ $index ]['sqlfile'] ) ) { // Added for extract zip file V.3.3.0. $database_file = ( $options[ $index ]['sqlfile'] ); } else { $database_file = ( $options[ $index ]['dir'] ); $file_sql = explode( '.', $options[ $index ]['dir'] ); $database_file = ( $file_sql[0] . '.sql' ); } $database_name = $this->wp_backup_get_config_db_name(); $database_user = $this->wp_backup_get_config_data( 'DB_USER' ); $datadase_password = $this->wp_backup_get_config_data( 'DB_PASSWORD' ); $database_host = $this->wp_backup_get_config_data( 'DB_HOST' ); $path_info = wp_upload_dir(); // Added for extract zip file V.3.3.0. $ext_path_info = $path_info['basedir'] . '/db-backup'; $database_zip_file = $options[ $index ]['dir']; if ( class_exists( 'ZipArchive' ) ) { $zip = new ZipArchive(); if ( $zip->open( $database_zip_file ) === true ) { $zip->extractTo( $ext_path_info ); $zip->close(); } } else { require_once ABSPATH . 'wp-admin/includes/class-pclzip.php'; $archive = new PclZip( $database_zip_file ); $dir = $path_info['basedir'] . '/db-backup/'; if ( ! $archive->extract( PCLZIP_OPT_PATH, $dir ) ) { wp_die( esc_html__('Unable to extract zip file. Please check that zlib php extension is enabled.','wpdbbkp').'', esc_html__('ZIP Error','wpdbbkp') ); } } // End for extract zip file V.3.3.0. set_time_limit( 0 ); ignore_user_abort(true); if ( '' !== ( trim( (string) $database_name ) ) && '' !== ( trim( (string) $database_user ) ) && '' !== ( trim( (string) $database_host ) ) ) { $conn = mysqli_connect( (string) $database_host, (string) $database_user, (string) $datadase_password ); // phpcs:ignore if ( $conn ) { // Start Select the database. if ( ! mysqli_select_db( $conn, (string) $database_name) ) { // phpcs:ignore $sql = 'CREATE DATABASE IF NOT EXISTS `' . (string) $database_name . '`'; mysqli_query($conn, $sql); // phpcs:ignore mysqli_select_db($conn, (string) $database_name ); // phpcs:ignore } /* END: Select the Database */ /* BEGIN: Remove All Tables from the Database */ $found_tables = null; $result = mysqli_query( $conn, 'SHOW TABLES FROM `' . (string) $database_name . '`' ); // phpcs:ignore if ( $result ) { while ($row = mysqli_fetch_row($result)) { $found_tables[] = $row[0]; } if ( count( $found_tables ) > 0 ) { foreach ( $found_tables as $table_name ) { mysqli_query( $conn, "DROP TABLE " . (string) $database_name . ".".$table_name ); // phpcs:ignore } } } /* END: Remove All Tables from the Database */ /* BEGIN: Restore Database Content */ if ( isset( $database_file ) ) { if ( file_exists( $database_file ) ) { $sql_file = file_get_contents( $database_file, true ); if($sql_file){ $sql_queries = explode( ";\n", $sql_file ); $sql_queries_count = count( $sql_queries ); mysqli_query($conn, "SET sql_mode = ''"); for ( $i = 0; $i < $sql_queries_count; $i++ ) { $sql_query_=apply_filters( 'wpdbbkp_sql_query_restore', $sql_queries[ $i ] ); mysqli_query($conn, $sql_query_ ); // phpcs:ignore } } } } } } if ( isset( $options[ $index ]['sqlfile'] ) && file_exists( $options[ $index ]['sqlfile'] ) ) { // Added for extract zip file V.3.3.0. if ( file_exists( $options[ $index ]['sqlfile'] ) ) { unlink( $options[ $index ]['sqlfile'] ); } } else { $database_file = ( $options[ $index ]['dir'] ); $file_sql = explode( '.', $options[ $index ]['dir'] ); $database_file = ( $file_sql[0] . '.sql' ); if ( file_exists( $database_file ) ) { unlink( $database_file ); } } wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=restore&_wpnonce=' . $nonce ); exit; break; case 'wpdbbkrestorefullbackup': $index = (int) $_GET['index']; require_once( 'class-restore.php' ); $restore = new Wpbp_Restore(); $restore->start($index); if (get_option('wp_db_log') == 1) { $options = get_option('wp_db_backup_backups'); $path_info = wp_upload_dir(); $logFileName = explode(".", $options[$index]['filename']); $logfile = $path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/log/' . $logFileName[0] . '.txt'; $message = "\n\n Restore Backup at " . date("Y-m-d h:i:sa"); $this->write_log($logfile, $message); } $nonce = wp_create_nonce( 'wp-database-backup' ); wp_safe_redirect( site_url() . '/wp-admin/admin.php?page=wp-database-backup¬ification=restore&_wpnonce=' . $nonce ); exit; break; /* END: Restore Database Content */ } } } } } if ( is_admin() && current_user_can( 'manage_options' ) ) { register_setting( 'wp_db_backup_options', 'wp_db_backup_options', array( $this, 'wp_db_backup_validate' ) ); add_settings_section( 'wp_db_backup_main', 'WP-Database-Backup', array( $this, 'wp_db_backup_section_text' ), 'manage_options' ); } } /** * Validate data. * * @param string $input - Input data. */ public function wp_db_backup_validate( $input ) { return $input; } /** * Setting page. */ public function wp_db_backup_settings_page() { $options = get_option( 'wp_db_backup_backups' ); $settings = get_option( 'wp_db_backup_options' ); $wp_db_log = get_option( 'wp_db_log' ); ?>
'; esc_attr_e( 'Invalid Local Backup Path : ', 'wp-database-backup' ); echo esc_attr( $wp_db_local_backup_path ); echo '
'; } $upload_dir = wp_upload_dir(); $dir = $upload_dir['basedir'] . '/db-backup'; if ( ! is_dir( $dir ) ) { $dir = $upload_dir['basedir']; } if ( is_dir( $dir ) && ! is_writable( $dir ) ) { ?>
'; echo '
'; $nonce = wp_create_nonce( 'wp-database-backup' ); $wp_db_backup_search_text = get_option( 'wp_db_backup_search_text' ); $wp_db_backup_replace_text = get_option( 'wp_db_backup_replace_text' ); if ( ( false === empty( $wp_db_backup_search_text ) ) && ( false === empty( $wp_db_backup_replace_text ) ) ) { echo ' '.esc_html__('Create Database Backup with Search/Replace', 'wpdbbkp').''; echo '

Backup file will replace ' . esc_attr( $wp_db_backup_search_text ) . ' text with ' . esc_attr( $wp_db_backup_replace_text ) . '. For Regular Database Backup without replace then Go to Dashboard=>Tool=>WP-DB Backup > Settings > '.esc_html__('Search and Replace - Set Blank Fields', 'wpdbbkp').'

'; } else { echo ' '.esc_html__('Create Database Backup', 'wpdbbkp').''; echo ' '.esc_html__('Create Full Backup', 'wpdbbkp').''; echo ''; } include_once 'admin-header-notification.php'; ?> var $j = jQuery.noConflict(); $j(document).ready(function () { var table = $j("#wpdbbkp_table").DataTable({ order: [[0, "desc"]], }); $j(".popoverid").popover(); $j("#create_backup").click(function() { $j(".wpdbbkp_notification").hide(); $j("#backup_process").show(); $j("#create_backup").attr("disabled", true); }); }); function excludetableall(){ var checkboxes = document.getElementsByClassName("wp_db_exclude_table"); var checked = ""; if($j("#wp_db_exclude_table_all").prop("checked") == true){ checked = "checked"; } $j(".wp_db_exclude_table").each(function() { this.checked = checked; }); } '; echo '
'; echo ''; echo ''; echo ''; if($wp_db_log==1){ echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $count = 1; $destination_icon = array( 'Local' => 'glyphicon glyphicon-home', 'Local Path' => 'glyphicon glyphicon-folder-open', 'Email' => 'glyphicon glyphicon-envelope', 'FTP' => 'glyphicon glyphicon-tasks', 'SFTP' => 'glyphicon glyphicon-tasks', 'S3' => 'glyphicon glyphicon-cloud-upload', 'Drive' => 'glyphicon glyphicon-hdd', 'DropBox' => 'glyphicon glyphicon-inbox', 'Backblaze' => 'glyphicon glyphicon-cloud-upload', ); foreach ( $options as $option ) { $str_class = ( 0 === (int) $option['size'] ) ? 'text-danger' : 'wpdb_download'; echo ''; echo ''; $curr_date = new DateTime(date( 'Y-m-d H:i:s', $option['date'] )); $curr_date->setTimezone(new DateTimeZone(wp_timezone_string())); echo ''; if($wp_db_log==1){ echo ''; } echo ''; if(isset($option['type']) && !empty($option['type'])){ if($option['type'] == 'complete'){ echo ''; } if($option['type'] == 'database'){ echo ''; } }else{ echo ''; } echo ''; echo ''; $remove_backup_href = esc_url( site_url() ) . '/wp-admin/admin.php?page=wp-database-backup&action=removebackup&_wpnonce=' . esc_attr( $nonce ) . '&index=' . esc_attr( ( $count - 1 ) ); echo ''; $count++; } echo ''; echo '
#DateLogDestinationTypeBackup FileSizeAction
' . esc_attr( $count ) . '' . esc_attr( $curr_date->format('Y-m-d H:i:s') ) . '' .$this->wpdbbkp_get_timeago($option['date']).''; echo ''; if (!empty($option['log'])) { if(isset($option['type']) && ($option['type'] == 'complete' || $option['type'] == 'database')){ echo ''; echo ''; echo ''; }else{ echo ''; } } echo ''; if ( ! empty( $option['destination'] ) ) { $destination = ( explode( ',', $option['destination'] ) ); foreach ( $destination as $dest ) { $key = trim( $dest ); if ( ! empty( $dest ) && array_key_exists( $key, $destination_icon ) ) { echo ' '; } } } echo ''.esc_html__('Full Backup', 'wpdbbkp').''.esc_html__('Database', 'wpdbbkp').'Database'; echo ''; echo ' Download' . esc_attr( $this->wp_db_backup_format_bytes( $option['size'] ) ) . ' Remove '; if ( isset( $option['search_replace'] ) && 1 === (int) $option['search_replace'] ) { echo ''; } else { $restore_url_href = esc_url( site_url() ) . '/wp-admin/admin.php?page=wp-database-backup&action=restorebackup&_wpnonce=' . esc_attr( $nonce ) . '&index=' . esc_attr( ( $count - 1 ) ); if(isset($option['type']) && !empty($option['type'])){ if($option['type'] == 'complete'){ $restore_url_href = esc_url( site_url() ) . '/wp-admin/admin.php?page=wp-database-backup&action=wpdbbkrestorefullbackup&_wpnonce=' . esc_attr( $nonce ) . '&index=' . esc_attr( ( $count - 1 ) ); } } echo ' Restore '; } echo '
'; } else { echo '

No Database Backups Created!

'; } echo '

If you like WP Database Backup please leave us a rating . Many thanks in advance!

'; echo '
'; echo '
'; echo '
'; echo '
'; wp_nonce_field( 'wp-database-backup' ); $enable_autobackups = '0'; if ( isset( $settings['enable_autobackups'] ) ) { $enable_autobackups = $settings['enable_autobackups']; } $autobackup_frequency = '0'; if ( isset( $settings['autobackup_frequency'] ) ) { $autobackup_frequency = $settings['autobackup_frequency']; } $full_autobackup_frequency = 'disabled'; if ( isset( $settings['full_autobackup_frequency'] ) ) { $full_autobackup_frequency = $settings['full_autobackup_frequency']; } $autobackup_type = ''; if ( isset( $settings['autobackup_type'] ) ) { $autobackup_type = $settings['autobackup_type']; } echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; do_action('wpdbbkp_database_backup_options'); echo '

'; echo ''; echo '

'; echo '
'; echo '
'; echo '
'; do_action('wpdbbkp_pro_tab_content'); ?>

wp_db_backup_format_bytes( $df ); $du = $this->wp_db_backup_format_bytes( $du ); $dt = $this->wp_db_backup_format_bytes( $dt ); } $du=$dp=$df=$dt='NA'; ?>
Disk Space
%


Not writable

' : '

writable

'; ?>
)
Low

' : ''; ?>
Not writable

' : '

writable

'; ?>
' : '

No

'; ?>
get_mysqldump_command_path() ) ? 'Yes

' : '

No

'; ?>
get_var( 'SELECT VERSION() AS version' ); // phpcs:ignore wp_cache_set( 'wpdb_mysqlversion', $mysqlversion, '', 18000 ); } ?>
v
get_results( 'SHOW TABLE STATUS' ); // phpcs:ignore if($tablesstatus != null && !empty($tablesstatus)){ foreach ( $tablesstatus as $tablestatus ) { $tablestatus_arr = (array) $tablestatus; if ( 0 === ( $no % 2 ) ) { $style = ''; } else { $style = ' class="alternate"'; } $no++; echo ''; echo ''; echo ''; echo ''; $row_usage += $tablestatus_arr['Rows']; echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; ?>
' . esc_attr( number_format_i18n( $no ) ) . '' . esc_attr( $tablestatus_arr['Name'] ) . '' . esc_attr( number_format_i18n( isset($tablestatus_arr['Rows'])?$tablestatus_arr['Rows']:0 ) ) . '
Total:' . esc_attr( number_format_i18n( $no ) ) . ' Table ' . esc_attr( number_format_i18n( $row_usage ) ) . ' Records
'; } ?>
' . esc_attr( $plugin['Name'] ) . ' ' . esc_attr( $plugin['Version'] ) . '
'; ?>
' . esc_attr( $my_theme->get( 'Name' ) ) . ' ' . esc_attr( $my_theme->get( 'Version' ) ) . '









get_results( 'SHOW TABLE STATUS' ); // phpcs:ignore if($tablesstatus != null && !empty($tablesstatus)){ foreach ( $tablesstatus as $tablestatus ) { $tablestatus_arr = (array) $tablestatus; if ( 0 === ( $no % 2 ) ) { $style = ''; } else { $style = ' class="alternate"'; } $no++; echo ''; echo ''; echo ''; echo ''; if ( false === empty( $wp_db_exclude_table ) && in_array( $tablestatus_arr['Name'], $wp_db_exclude_table, true ) ) { $checked = 'checked'; } else { $checked = ''; } echo ''; $row_usage += $tablestatus_arr['Rows']; echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; ?>
' . esc_attr( number_format_i18n( $no ) ) . '' . esc_attr( $tablestatus_arr['Name'] ) . '' . esc_attr( number_format_i18n( isset($tablestatus_arr['Rows'])?$tablestatus_arr['Rows']:0 ) ) . '
Total:' . esc_attr( number_format_i18n( $no ) ) . ' Table' . esc_attr( number_format_i18n( $row_usage ) ) . ' Records



Tool=>WP-DB Backup > Setting > Exclude Table From Database Backup setting. The tables you selected will be skipped over for each backup you make.', 'wpdbbkp') ?>



get_col( 'SHOW TABLES' ); // phpcs:ignore $output = ''; foreach ( $tables as $table ) { if ( empty( $wp_db_exclude_table ) || ( ! ( in_array( $table, $wp_db_exclude_table, true ) ) ) ) { $check_count = $wpdb->get_var( "SELECT count(*) FROM {$table}"); // phpcs:ignore $check_count = intval($check_count); $sub_limit =500; if(isset($check_count) && $check_count>$sub_limit){ $result =array(); $t_sub_queries= ceil($check_count/$sub_limit); for($sub_i=0;$sub_i<$t_sub_queries;$sub_i++) { $sub_offset = $sub_i*$sub_limit; $sub_result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM %i LIMIT %d OFFSET %d",array($table,$sub_limit,$sub_offset)), ARRAY_A ); if($sub_result){ $result = array_merge($result,$sub_result); } sleep(1); } } else{ $result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM %i",array($table)), ARRAY_A ); // phpcs:ignore } $row2 = $wpdb->get_row( 'SHOW CREATE TABLE ' . $table, ARRAY_N ); // phpcs:ignore $output .= "\n\n" . $row2[1] . ";\n\n"; $result_count = count( $result ); for ( $i = 0; $i < $result_count; $i++ ) { $row = $result[ $i ]; $output .= 'INSERT INTO ' . $table . ' VALUES('; $result_o_index = count( $result[0] ); $j=0; foreach ($row as $key => $value) { $row[ $key] = $wpdb->_real_escape( apply_filters( 'wpdbbkp_process_db_fields', $row[$key],$table,$key) ); $output .= ( isset( $row[ $key ] ) ) ? '"' . $row[ $key ] . '"' : '""'; if ( $j < ( $result_o_index - 1 ) ) { $output .= ','; } $j++; } $output .= ");\n"; } $output .= "\n"; } sleep(1); } $wpdb->flush(); /* BEGIN : Prevent saving backup plugin settings in the database dump */ add_option( 'wp_db_backup_backups', $options_backup ); add_option( 'wp_db_backup_options', $settings_backup ); /* END : Prevent saving backup plugin settings in the database dump */ return $output; } /** * Create database backup new function. */ public function wp_db_backup_create_mysql_backup_new($table) { global $wpdb; $output = ''; $check_count = $wpdb->get_var( "SELECT count(*) FROM {$table}"); // phpcs:ignore $check_count = intval($check_count); $sub_limit =500; if(isset($check_count) && $check_count>$sub_limit){ $result =array(); $t_sub_queries= ceil($check_count/$sub_limit); for($sub_i=0;$sub_i<$t_sub_queries;$sub_i++) { $sub_offset = $sub_i*$sub_limit; $sub_result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM %i LIMIT %d OFFSET %d",array($table,$sub_limit,$sub_offset)), ARRAY_A ); if($sub_result){ $result = array_merge($result,$sub_result); } sleep(1); } } else{ $result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM %i",array($table)), ARRAY_A ); // phpcs:ignore } $row2 = $wpdb->get_row( 'SHOW CREATE TABLE ' . $table, ARRAY_N ); // phpcs:ignore $output .= "\n\n" . $row2[1] . ";\n\n"; $result_count = count( $result ); for ( $i = 0; $i < $result_count; $i++ ) { $row = $result[ $i ]; $output .= 'INSERT INTO ' . $table . ' VALUES('; $result_o_index = count( $result[0] ); $j=0; if(!empty($row)){ foreach ($row as $key => $value) { $row[ $key] = $wpdb->_real_escape( apply_filters( 'wpdbbkp_process_db_fields', $row[$key],$table,$key) ); $output .= ( isset( $row[ $key ] ) ) ? '"' . $row[ $key ] . '"' : '""'; if ( $j < ( $result_o_index - 1 ) ) { $output .= ','; } $j++; } } $output .= ");\n"; } $output .= "\n"; sleep(1); $wpdb->flush(); return $output; } /** * Mysql Dump set path. * * @param string $path - Path. */ public function set_mysqldump_command_path( $path ) { $this->mysqldump_command_path = $path; } /** * Mysql Dump get path. */ public function get_mysqldump_command_path() { // Check shell_exec is available. if ( ! self::is_shell_exec_available() ) { return ''; } // Return now if it's already been set. if ( isset( $this->mysqldump_command_path ) ) { return $this->mysqldump_command_path; } $this->mysqldump_command_path = ''; // Does mysqldump work. if ( is_null( shell_exec( 'hash mysqldump 2>&1' ) ) ) { // phpcs:ignore // If so store it for later. $this->set_mysqldump_command_path( 'mysqldump' ); // And return now. return $this->mysqldump_command_path; } // List of possible mysqldump locations. $mysqldump_locations = array( '/usr/local/bin/mysqldump', '/usr/local/mysql/bin/mysqldump', '/usr/mysql/bin/mysqldump', '/usr/bin/mysqldump', '/opt/local/lib/mysql6/bin/mysqldump', '/opt/local/lib/mysql5/bin/mysqldump', '/opt/local/lib/mysql4/bin/mysqldump', '/xwpdbbkpp/mysql/bin/mysqldump', '/Program Files/xwpdbbkpp/mysql/bin/mysqldump', '/Program Files/MySQL/MySQL Server 6.0/bin/mysqldump', '/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump', '/Program Files/MySQL/MySQL Server 5.4/bin/mysqldump', '/Program Files/MySQL/MySQL Server 5.1/bin/mysqldump', '/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump', '/Program Files/MySQL/MySQL Server 4.1/bin/mysqldump', ); // Find the one which works. foreach ( $mysqldump_locations as $location ) { if ( is_executable( self::conform_dir( $location ) ) ) { $this->set_mysqldump_command_path( $location ); } } return $this->mysqldump_command_path; } /** * Check dir. * * @param string $dir - Dir Details. * @param bool $recursive - Recursive. */ public static function conform_dir( $dir, $recursive = false ) { // Assume empty dir is root. if ( ! $dir ) { $dir = '/'; } // Replace single forward slash (looks like double slash because we have to escape it). $dir = str_replace( '\\', '/', $dir ); $dir = str_replace( '//', '/', $dir ); // Remove the trailing slash. if ( '/' !== $dir ) { $dir = untrailingslashit( $dir ); } // Carry on until completely normalized. if ( ! $recursive && self::conform_dir( $dir, true ) !== $dir ) { return self::conform_dir( $dir ); } return (string) $dir; } /** * Check Shell. */ public static function is_shell_exec_available() { // Are we in Safe Mode. if ( self::is_safe_mode_active() ) { return false; } // Is shell_exec or escapeshellcmd or escapeshellarg disabled? if ( array_intersect( array( 'shell_exec', 'escapeshellarg', 'escapeshellcmd' ), array_map( 'trim', explode( ',', ini_get( 'disable_functions' ) ) ) ) ) { return false; } // Can we issue a simple echo command? if ( ! shell_exec( 'echo WP Backup' ) ) { // phpcs:ignore return false; } return true; } /** * Check Safe mode active. * * @param string $ini_get_callback - String cmd. * @return bool */ public static function is_safe_mode_active( $ini_get_callback = 'ini_get' ) { $safe_mode = call_user_func( $ini_get_callback, 'safe_mode' ); if ( ( $safe_mode ) && 'off' !== strtolower( $safe_mode ) ) { return true; } return false; } /** * Database dump. * * @param string $sql_filename - File name. */ public function mysqldump( $sql_filename ) { $this->mysqldump_method = 'mysqldump'; $host = explode( ':', DB_HOST ); $host = reset( $host ); $port = strpos( DB_HOST, ':' ) ? end( explode( ':', DB_HOST ) ) : ''; // Path to the mysqldump executable. $cmd = escapeshellarg( $this->get_mysqldump_command_path() ); // We don't want to create a new DB. $cmd .= ' --no-create-db'; // Allow lock-tables to be overridden. if ( ! defined( 'WPDB_MYSQLDUMP_SINGLE_TRANSACTION' ) || WPDB_MYSQLDUMP_SINGLE_TRANSACTION !== false ) { $cmd .= ' --single-transaction'; } // Make sure binary data is exported properly. $cmd .= ' --hex-blob'; // Username. $cmd .= ' -u ' . escapeshellarg( DB_USER ); // Don't pass the password if it's blank. if ( DB_PASSWORD ) { $cmd .= ' -p' . escapeshellarg( DB_PASSWORD ); } // Set the host. $cmd .= ' -h ' . escapeshellarg( $host ); // Set the port if it was set. if ( ! empty( $port ) && is_numeric( $port ) ) { $cmd .= ' -P ' . $port; } // The file we're saving too. $cmd .= ' -r ' . escapeshellarg( $sql_filename ); $wp_db_exclude_table = array(); $wp_db_exclude_table = get_option( 'wp_db_exclude_table' ); if ( ! empty( $wp_db_exclude_table ) ) { foreach ( $wp_db_exclude_table as $wp_db_exclude_table ) { $cmd .= ' --ignore-table=' . DB_NAME . '.' . $wp_db_exclude_table; } } // The database we're dumping. $cmd .= ' ' . escapeshellarg( DB_NAME ); // Pipe STDERR to STDOUT. $cmd .= ' 2>&1'; // Store any returned data in an error. $stderr = shell_exec( $cmd ); // phpcs:ignore // Skip the new password warning that is output in mysql > 5.6. if ( trim( $stderr ) === 'Warning: Using a password on the command line interface can be insecure.' ) { $stderr = ''; } if ( $stderr ) { $this->error( $this->get_mysqldump_method(), $stderr ); } return $this->verify_mysqldump( $sql_filename ); } /** * Error. * * @param string $context - Data. * @param object $error - Error data. */ public function error( $context, $error ) { if ( empty( $context ) || empty( $error ) ) { return; } $error_str = implode( ':', (array) $error ); $_key = md5( $error_str ); $this->errors[ $context ][ $_key ] = $error; } /** * Verify Dump. * * @param string $sql_filename - Sql file. * @return bool */ public function verify_mysqldump( $sql_filename ) { // If we've already passed then no need to check again. if ( ! empty( $this->mysqldump_verified ) ) { return true; } // If there are mysqldump errors delete the database dump file as mysqldump will still have written one. if ( $this->get_errors( $this->get_mysqldump_method() ) && file_exists( $sql_filename ) ) { if ( file_exists( $sql_filename ) ) { unlink( $sql_filename ); } } // If we have an empty file delete it. if ( 0 === filesize( $sql_filename ) ) { if ( file_exists( $sql_filename ) ) { unlink( $sql_filename ); } } // If the file still exists then it must be good. if ( file_exists( $sql_filename ) ) { $this->mysqldump_verified = true; return $this->mysqldump_verified; } return false; } /** * Get error. * * @param string $context - Data. * @return string */ public function get_errors( $context = null ) { if ( ! empty( $context ) ) { return isset( $this->errors[ $context ] ) ? $this->errors[ $context ] : array(); } return $this->errors; } /** * Get mysql dump method. * * @return string */ public function get_mysqldump_method() { return $this->mysqldump_method; } // End : Generate SQL DUMP using cmd 06-03-2016. /** * Create zip. */ public function wp_db_backup_create_archive() { // Begin : Setup Upload Directory, Secure it and generate a random file name. $source_directory = $this->wp_db_backup_wp_config_path(); $path_info = wp_upload_dir(); $htasses_text = ''; wp_mkdir_p($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR); wp_mkdir_p($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/log'); fclose(fopen($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/index.php', 'w')); fclose(fopen($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/log/index.php', 'w')); // Added htaccess file 08-05-2015 for prevent directory listing. // Fixed Vulnerability 22-06-2016 for prevent direct download. if ( 1 === (int) get_option( 'wp_db_backup_enable_htaccess' ) ) { $f = fopen( $path_info['basedir'] . '/db-backup/.htaccess', 'w' ); // phpcs:ignore fwrite( // phpcs:ignore $f, '#These next two lines will already exist in your .htaccess file RewriteEngine On RewriteBase / # Add these lines right after the preceding two RewriteCond %{REQUEST_FILENAME} ^.*(.zip)$ RewriteCond %{HTTP_COOKIE} !^.*can_download.*$ [NC] RewriteRule . - [R=403,L]' ); // phpcs:ignore fclose( $f ); // phpcs:ignore } // Begin : Generate SQL DUMP and save to file database.sql. $wp_site_name = preg_replace('/[^\p{L}\p{M}]+/u', '_', get_bloginfo('name')); $wp_db_file_name = $wp_site_name . '_' . date( 'Y_m_d' ) . '_' . time() . '_' . substr( md5( AUTH_KEY ), 0, 7 ) . '_wpdb'; $sql_filename = $wp_db_file_name . '.sql'; $filename = $wp_db_file_name . '.zip'; $logname = $wp_db_file_name . '.txt'; // Begin : Generate SQL DUMP using cmd 06-03-2016. $my_sql_dump = 0; if ( $this->get_mysqldump_command_path() ) { if ( ! $this->mysqldump( $path_info['basedir'] . '/db-backup/' . $sql_filename ) ) { $my_sql_dump = 1; } } else { $my_sql_dump = 1; } if ( 1 === (int) $my_sql_dump ) { /* BEGIN : Prevent saving backup plugin settings in the database dump */ $options_backup = get_option( 'wp_db_backup_backups' ); $settings_backup = get_option( 'wp_db_backup_options' ); delete_option( 'wp_db_backup_backups' ); delete_option( 'wp_db_backup_options' ); /* END : Prevent saving backup plugin settings in the database dump */ global $wpdb; $tables = $wpdb->get_col( 'SHOW TABLES' ); $wp_db_exclude_table = get_option( 'wp_db_exclude_table',array()); if(!empty($tables)){ foreach($tables as $table){ if ( empty( $wp_db_exclude_table ) || ( ! ( in_array( $table, $wp_db_exclude_table, true ) ) ) ) { $handle = fopen( $path_info['basedir'] . '/db-backup/' . $sql_filename, 'a' ); // phpcs:ignore fwrite( $handle, $this->wp_db_backup_create_mysql_backup_new($table) ); // phpcs:ignore fclose( $handle ); // phpcs:ignore } } } /* BEGIN : Prevent saving backup plugin settings in the database dump */ add_option( 'wp_db_backup_backups', $options_backup ); add_option( 'wp_db_backup_options', $settings_backup ); /* END : Prevent saving backup plugin settings in the database dump */ } /* End : Generate SQL DUMP using cmd 06-03-2016 */ $wp_db_backup_search_text = get_option( 'wp_db_backup_search_text' ); $wp_db_backup_replace_text = get_option( 'wp_db_backup_replace_text' ); if ( ( false === empty( $wp_db_backup_search_text ) ) && ( false === empty( $wp_db_backup_replace_text ) ) ) { $filecontent = wp_remote_get( $path_info['basedir'] . '/db-backup/' . $sql_filename ); if (! is_wp_error( $filecontent ) && isset($filecontent['body']) ) { $backup_str = str_replace( $wp_db_backup_search_text, $wp_db_backup_replace_text, $filecontent['body'] ); // phpcs:ignore file_put_contents( $path_info['basedir'] . '/db-backup/' . $sql_filename, $backup_str ); // phpcs:ignore } } /* End : Generate SQL DUMP and save to file database.sql */ $upload_path = array( 'filename' => ( $filename ), 'dir' => ( $path_info['basedir'] . '/db-backup/' . $filename ), 'url' => ( $path_info['baseurl'] . '/db-backup/' . $filename ), 'log_dir' => ( $path_info['basedir'] . '/db-backup/log/' . $logname ), 'log_url' => ( $path_info['baseurl'] . '/db-backup/log/' . $logname ), 'size' => 0, ); $arcname = $path_info['basedir'] . '/db-backup/' . $wp_db_file_name . '.zip'; if ( class_exists( 'ZipArchive' ) ) { $zip = new ZipArchive(); $zip->open( $arcname, ZipArchive::CREATE ); $zip->addFile( $path_info['basedir'] . '/db-backup/' . $sql_filename, $sql_filename ); $zip->close(); } else { require_once ABSPATH . 'wp-admin/includes/class-pclzip.php'; $archive = new PclZip( $arcname ); $v_dir = $path_info['basedir'] . '/db-backup/' . $sql_filename; $v_remove = $path_info['basedir'] . '/db-backup'; // Create the archive. $v_list = $archive->create( $v_dir, PCLZIP_OPT_REMOVE_PATH, $v_remove ); } global $wpdb; $mysqlversion = wp_cache_get( 'wpdb_mysqlversion' ); if ( true === empty( $mysqlversion ) ) { $mysqlversion = $wpdb->get_var( 'SELECT VERSION() AS version' ); // phpcs:ignore wp_cache_set( 'wpdb_mysqlversion', $mysqlversion, '', 18000 ); } if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $my_theme = wp_get_theme(); $active_plugin = count(get_option('active_plugins')); $total_plugin = count(get_plugins()); $log_message = 'WordPress Version : ' . get_bloginfo( 'version' ); $log_message .= '
Database Version : ' . $mysqlversion; $log_message .= '
Active Theme Name : ' . $my_theme->get( 'Name' ); $log_message .= '
Theme Version : ' . $my_theme->get( 'Version' ); $log_message .= '
Plugin Count : ' . $total_plugin; $log_message .= '
Active Plugins : ' . $active_plugin; $upload_path['size'] = filesize( $upload_path['dir'] ); $upload_path['sqlfile'] = $path_info['basedir'] . '/db-backup/' . $sql_filename; $wp_db_log = get_option( 'wp_db_log' ); if ( 1 === (int) $wp_db_log ) { $wp_db_exclude_table = get_option( 'wp_db_exclude_table' ); if ( ! empty( $wp_db_exclude_table ) ) { $log_message .= '
Exclude Table : ' . implode( ', ', $wp_db_exclude_table ); } $upload_path['log'] = $log_message; } $options = get_option( 'wp_db_backup_backups' ); $newoptions = array(); $number_of_existing_backups = count( (array) $options ); $number_of_backups_from_user = get_option( 'wp_local_db_backup_count' ); if ( ! empty( $number_of_backups_from_user ) ) { if ( ! ( $number_of_existing_backups < $number_of_backups_from_user ) ) { $diff = $number_of_existing_backups - $number_of_backups_from_user; for ( $i = 0; $i <= $diff; $i++ ) { $index = $i; if ( file_exists( $options[ $index ]['dir'] ) ) { unlink( $options[ $index ]['dir'] ); } $file_sql = explode( '.', $options[ $index ]['dir'] ); if ( file_exists( $file_sql[0] . '.sql' ) ) { unlink( $file_sql[0] . '.sql' ); } } for ( $i = ( $diff + 1 ); $i < $number_of_existing_backups; $i++ ) { $index = $i; $newoptions[] = $options[ $index ]; } update_option( 'wp_db_backup_backups', $newoptions , false); } } if ( file_exists( $path_info['basedir'] . '/db-backup/' . $sql_filename ) ) { unlink( $path_info['basedir'] . '/db-backup/' . $sql_filename ); } return $upload_path; } /** * Config Path. */ public function wp_db_backup_wp_config_path() { $base = dirname( __FILE__ ); $path = false; if ( file_exists( dirname( dirname( $base ) ) . '/wp-config.php' ) ) { $path = dirname( dirname( $base ) ); } else { if ( file_exists( dirname( dirname( dirname( $base ) ) ) . '/wp-config.php' ) ) { $path = dirname( dirname( dirname( $base ) ) ); } else { $path = false; } } if ( false !== $path ) { $path = str_replace( '\\', '/', $path ); } return $path; } /** * Backup Process. */ public function wp_db_backup_event_process() { // Added in v.3.9.5! $cron_condition = apply_filters('wpdbbkp_dbback_cron_condition',true ); if(wp_doing_cron() && !$cron_condition){ wp_die(); } set_time_limit( 0 ); ignore_user_abort(true); $details = $this->wp_db_backup_create_archive(); $options = get_option( 'wp_db_backup_backups' ); if ( ! $options ) { $options = array(); } $is_search_replace_flag = 0; $wp_db_log = get_option( 'wp_db_log' ); if ( 1 === (int) $wp_db_log ) { $log_message = $details['log']; $wp_db_backup_search_text = get_option( 'wp_db_backup_search_text' ); $wp_db_backup_replace_text = get_option( 'wp_db_backup_replace_text' ); if ( ( false === empty( $wp_db_backup_search_text ) ) && ( false === empty( $wp_db_backup_replace_text ) ) ) { $log_message .= ' Replaced/Search text - ' . $wp_db_backup_search_text . ' With -' . $wp_db_backup_replace_text; $is_search_replace_flag = 1; } } else { $log_message = ''; } $wp_db_remove_local_backup = get_option( 'wp_db_remove_local_backup' ); $destination = ( 1 === (int) $wp_db_remove_local_backup ) ? '' : 'Local, '; $args = array( $details['filename'], $details['dir'], $log_message, $details['size'], $destination ); do_action_ref_array( 'wp_db_backup_completed', array( &$args ) ); $options[] = array( 'date' => time(), 'filename' => $details['filename'], 'url' => $details['url'], 'dir' => $details['dir'], 'log' => $details['log_url'], 'search_replace' => $is_search_replace_flag, 'sqlfile' => $details['sqlfile'], 'size' => $details['size'], 'type' =>'database', 'destination' => $args[4] ); if ( 1 !== (int) $wp_db_remove_local_backup ) { update_option( 'wp_db_backup_backups', $options , false); } if(isset($details['log_dir']) && !empty($details['log_dir'])) { if (is_writable($details['log_dir']) || !file_exists($details['log_dir'])) { if ($handle = @fopen($details['log_dir'], 'a')) { if (fwrite($handle, str_replace(array("
","",""), array("\n","",""), $args[2]))) { fclose($handle); } } } } } /** * Cron schedule. * * @param array $schedules - Schedules details. */ public function wp_db_backup_cron_schedules( $schedules ) { $schedules['hourly'] = array( 'interval' => 3600, 'display' => 'hourly', ); $schedules['twicedaily'] = array( 'interval' => 43200, 'display' => 'twicedaily', ); $schedules['daily'] = array( 'interval' => 86400, 'display' => 'daily', ); $schedules['weekly'] = array( 'interval' => 604800, 'display' => 'Once Weekly', ); $schedules['monthly'] = array( 'interval' => 2635200, 'display' => 'Once a month', ); return $schedules; } /** * Schedular activation. */ public function wp_db_backup_scheduler_activation() { $options = get_option( 'wp_db_backup_options' ); if ( ( ! wp_next_scheduled( 'wp_db_backup_event' ) ) && ( true === isset( $options['enable_autobackups'] ) ) ) { $cron_freq = apply_filters( 'wpdbbkp_dbback_cron_frequency',$options['autobackup_frequency']); wp_schedule_event( time(), $cron_freq, 'wp_db_backup_event' ); } } /** * Config data. * * @param string $key - key name. */ public function wp_backup_get_config_data( $key ) { $filepath = get_home_path() . '/wp-config.php'; $config_file = file_get_contents( "$filepath", true ); if($config_file){ switch ( $key ) { case 'DB_NAME': preg_match( "/'DB_NAME',\s*'(.*)?'/", $config_file, $matches ); break; case 'DB_USER': preg_match( "/'DB_USER',\s*'(.*)?'/", $config_file, $matches ); break; case 'DB_PASSWORD': preg_match( "/'DB_PASSWORD',\s*'(.*)?'/", $config_file, $matches ); break; case 'DB_HOST': preg_match( "/'DB_HOST',\s*'(.*)?'/", $config_file, $matches ); break; } return $matches[1]; } return ''; } /** * Get db name from config. */ public function wp_backup_get_config_db_name() { $filepath = get_home_path() . '/wp-config.php'; $config_file = file_get_contents( "$filepath", true ); if($config_file){ preg_match( "/'DB_NAME',\s*'(.*)?'/", $config_file, $matches ); return $matches[1]; } return ''; } /** * Recursive sanitation for an array * * @param array $array - Array data to sanitize. * * @return mixed */ public function recursive_sanitize_text_field( $array ) { foreach ( $array as $key => &$value ) { if ( is_array( $value ) ) { $value = $this->recursive_sanitize_text_field( $value ); } else { $value = sanitize_text_field( $value ); } } return $array; } /** * Enqueue scripts and style */ public function admin_scripts_style() { if ( true === $this->is_wpdb_page() ) { wp_enqueue_script( 'jquery' ); wp_register_script( 'bootstrapjs', WPDB_PLUGIN_URL . '/assets/js/bootstrap.min.js', array( 'jquery' ), WPDB_VERSION, false ); wp_enqueue_script( 'bootstrapjs' ); wp_register_style( 'bootstrapcss', WPDB_PLUGIN_URL . '/assets/css/bootstrap.min.css', array(), WPDB_VERSION ); wp_enqueue_style( 'bootstrapcss' ); wp_register_script( 'dataTablesjs', WPDB_PLUGIN_URL . '/assets/js/jquery.dataTables.js', array( 'jquery' ), WPDB_VERSION, false ); wp_enqueue_script( 'dataTablesjs' ); wp_register_style( 'dataTablescss', WPDB_PLUGIN_URL . '/assets/css/jquery.dataTables.css', array(), WPDB_VERSION ); wp_enqueue_style( 'dataTablescss' ); wp_register_style( 'wpdbcss', WPDB_PLUGIN_URL . '/assets/css/wpdb_admin.css', array(), WPDB_VERSION ); wp_enqueue_style( 'wpdbcss' ); } } /** * Check is plugin page. */ public function is_wpdb_page() { if ( is_admin() ) { return isset( $_REQUEST['page'] ) && preg_match( '/wp-database-backup/', $_REQUEST['page'] ) ? true : false; // phpcs:ignore } else { return true; } } // loading admin scripts/styles on admin page only public function wpdbbkp_admin_style($hook_suffix) { if($hook_suffix=="tools_page_wp-database-backup" || $hook_suffix=="toplevel_page_wp-database-backup") { wp_register_script('wpdbbkp-admin-script', WPDB_PLUGIN_URL . '/assets/js/wpdbbkp-admin.js', array('jquery'), WPDB_VERSION, 'true' ); wp_localize_script('wpdbbkp-admin-script', 'wpdbbkp_script_vars', array( 'nonce' => wp_create_nonce( 'wpdbbkp-admin-nonce' ), )); wp_enqueue_script('wpdbbkp-admin-script'); // Adding custom js $local = array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'wpdbbkp_admin_security_nonce' => wp_create_nonce('wpdbbkp_ajax_check_nonce'), ); wp_register_script('wpdbbkp-admin-fb', WPDB_PLUGIN_URL . '/assets/js/wpdbbkp-admin-cron-backup.js', array(), WPDB_VERSION , true ); wp_localize_script('wpdbbkp-admin-fb', 'wpdbbkp_localize_admin_data', $local ); wp_enqueue_script('wpdbbkp-admin-fb'); // Custom Js ends } } public function wpdbbkp_admin_newsletter_script($hook_suffix ) { if($hook_suffix=="tools_page_wp-database-backup" || $hook_suffix=="toplevel_page_wp-database-backup") { wp_enqueue_script('wpdbbkp-admin-newsletter-script', WPDB_PLUGIN_URL . '/assets/js/wpdbbkp-admin-newsletter.js', array('jquery'), WPDB_VERSION, 'true' ); $current_screen = get_current_screen(); if(isset($current_screen->post_type)){ $post_type = $current_screen->post_type; } $post_id = get_the_ID(); if(isset($_GET['tag_ID'])){ $post_id = intval($_GET['tag_ID']); } $data = array( 'current_url' => wpdbbkp_get_current_url(), 'post_id' => $post_id, 'ajax_url' => admin_url( 'admin-ajax.php' ), 'post_type' => $post_type, 'page_now' => $hook_suffix, 'wpdbbkp_security_nonce' => wp_create_nonce('wpdbbkp_ajax_check_nonce'), ); $data = apply_filters('wpdbbkp_localize_filter',$data,'wpdbbkp_localize_data'); wp_localize_script( 'wpdbbkp-admin-newsletter-script', 'wpdbbkp_localize_data', $data ); } } public function wpdbbkp_sanitize_textarea_field( $str ) { if ( is_object( $str ) || is_array( $str ) ) { return ''; } $str = (string) $str; $filtered = wp_check_invalid_utf8( $str ); if ( strpos( $filtered, '<' ) !== false ) { $filtered = wp_pre_kses_less_than( $filtered ); // This will strip extra whitespace for us. $filtered = wp_strip_all_tags( $filtered, false ); // Use HTML entities in a special case to make sure no later // newline stripping stage could lead to a functional tag. $filtered = str_replace( "<\n", "<\n", $filtered ); } $filtered = trim( $filtered ); $found = false; while ( preg_match( '/%[a-f0-9]{2}/i', $filtered, $match ) ) { $filtered = str_replace( $match[0], '', $filtered ); $found = true; } if ( $found ) { // Strip out the whitespace that may now exist after removing the octets. $filtered = trim( preg_replace( '/ +/', ' ', $filtered ) ); } return $filtered; } public function wpdbbkp_send_query_message(){ if ( ! isset( $_POST['wpdbbkp_security_nonce'] ) ){ return; } if ( !wp_verify_nonce( $_POST['wpdbbkp_security_nonce'], 'wpdbbkp-admin-nonce' ) ){ return; } if( ! current_user_can( 'manage_options' ) ) { return; } $message = $this->wpdbbkp_sanitize_textarea_field($_POST['message']); $email = $this->wpdbbkp_sanitize_textarea_field($_POST['email']); if(function_exists('wp_get_current_user')){ $user = wp_get_current_user(); $message = '

'.$message.'



'.'Query from BackupforWP plugin support tab'; $user_data = $user->data; $user_email = $user_data->user_email; if($email){ $user_email = $email; } //php mailer variables $sendto = 'team@magazine3.in'; $subject = "BackupforWP Query"; $headers[] = 'Content-Type: text/html; charset=UTF-8'; $headers[] = 'From: '. esc_attr($user_email); $headers[] = 'Reply-To: ' . esc_attr($user_email); // Load WP components, no themes. $sent = wp_mail($sendto, $subject, $message, $headers); if($sent){ echo wp_json_encode(array('status'=>'t')); }else{ echo wp_json_encode(array('status'=>'f')); } } wp_die(); } public function add_settings_plugin_action_wp( $actions, $plugin_file, $plugin_data, $context ) { $plugin_actions['settings'] = sprintf( '' . _x( 'Settings', 'wpdbbkp' ) . '', admin_url( 'options-general.php?page=wp-database-backup' ) ); $actions = array_merge( $actions, $plugin_actions ); return $actions; } public function wpdbbkp_update_backup_info($FileName, $logFile, $logMessage = '') { $path_info = wp_upload_dir(); $filename = $FileName . '.sql'; $WPDBFileName = $FileName . '.zip'; @unlink($this->wp_db_backup_wp_config_path() . '/' . $filename); @unlink($this->wp_db_backup_wp_config_path() . '/wp_installer.php'); @$filesize = filesize($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/' . $WPDBFileName); $upload_path = array( 'filename' => ($WPDBFileName), 'dir' => ($path_info['basedir'] . '/' . WPDB_BACKUPS_DIR . '/' . $WPDBFileName), 'url' => ($path_info['baseurl'] . '/' . WPDB_BACKUPS_DIR . '/' . $WPDBFileName), 'size' => ($filesize), 'type' => get_option('wp_db_backup_backup_type') ); if (get_option('wp_db_log') == 1) { $this->write_log($logFile, $logMessage); $upload_path['logfile'] = $path_info['baseurl'] . '/' . WPDB_BACKUPS_DIR . '/log/' . $FileName . '.txt'; $upload_path['logfileDir'] = $logFile; } else { $upload_path['logfile'] = ""; } $args = array($FileName, $logFile, $logMessage); do_action_ref_array('wpdbbkp_backup_completed', array(&$args)); return $upload_path; } private function write_log($logFile, $logMessage) { // Actually write the log file if (is_writable($logFile) || !file_exists($logFile)) { if (!$handle = @fopen($logFile, 'a')) return; if (!fwrite($handle, $logMessage)) return; fclose($handle); return true; } } public function get_zip_command_path() { // Check shell_exec is available if (!self::is_shell_exec_available()) return ''; // Return now if it's already been set if (isset($this->zip_command_path)) return $this->zip_command_path; $this->zip_command_path = ''; // Does zip work if (is_null(shell_exec('hash zip 2>&1'))) { // If so store it for later $this->set_zip_command_path('zip'); // And return now return $this->zip_command_path; } // List of possible zip locations $zip_locations = array( '/usr/bin/zip' ); // Find the one which works foreach ($zip_locations as $location) if (@is_executable(self::conform_dir($location))) $this->set_zip_command_path($location); return $this->zip_command_path; } public function set_zip_command_path($path) { $this->zip_command_path = $path; } /* Begin : Generate Zip using cmd 06-03-2016 V.3.9 */ public function zip($WPDBFileName) { $this->archive_method = 'zip'; $wp_all_backup_exclude_dir = get_option('wp_db_backup_exclude_dir'); if (empty($wp_all_backup_exclude_dir)) { $excludes = WPDB_BACKUPS_DIR; } else { $excludes = WPDB_BACKUPS_DIR . '|' . $wp_all_backup_exclude_dir; } // Zip up $this->root with excludes if (!empty($excludes)) { $stderr = shell_exec('cd ' . escapeshellarg($this->get_root()) . ' && ' . escapeshellcmd($this->get_zip_command_path()) . ' -rq ' . escapeshellarg($WPDBFileName) . ' ./' . ' -x ' . $this->exclude_string('zip') . ' 2>&1'); } // Zip up $this->root without excludes else { // error_log('without exclude rule'); $stderr = shell_exec('cd ' . escapeshellarg($this->get_root()) . ' && ' . escapeshellcmd($this->get_zip_command_path()) . ' -rq ' . escapeshellarg($WPDBFileName) . ' ./' . ' 2>&1'); } error_log($stderr); if (!empty($stderr)) $this->warning($this->get_archive_method(), $stderr); return $this->verify_archive($WPDBFileName); } public function get_root() { if (empty($this->root)) $this->set_root(self::conform_dir(self::get_home_path())); return $this->root; } public function set_root($path) { if (empty($path) || !is_string($path) || !is_dir($path)) throw new Exception('Invalid root path ' . $path . ' must be a valid directory path'); $this->root = self::conform_dir($path); } public static function get_home_path() { $home_url = home_url(); $site_url = site_url(); $home_path = ABSPATH; // If site_url contains home_url and they differ then assume WordPress is installed in a sub directory if ($home_url !== $site_url && strpos($site_url, $home_url) === 0) $home_path = trailingslashit(substr(self::conform_dir(ABSPATH), 0, strrpos(self::conform_dir(ABSPATH), str_replace($home_url, '', $site_url)))); return self::conform_dir($home_path); } private function warning($context, $warning) { if (empty($context) || empty($warning)) return; $this->warnings[$context][$_key = md5(implode(':', (array) $warning))] = $warning; } public function exclude_string($context = 'zip') { // Return a comma separated list by default $separator = ', '; $wildcard = ''; // The zip command if ($context === 'zip') { $wildcard = '*'; $separator = ' -x '; // The PclZip fallback library } elseif ($context === 'regex') { $wildcard = '([\s\S]*?)'; $separator = '|'; } $wp_all_backup_exclude_dir = get_option('wp_db_backup_exclude_dir'); if (empty($wp_all_backup_exclude_dir)) { $excludes = WPDB_BACKUPS_DIR; } else { $excludes = WPDB_BACKUPS_DIR . '|' . $wp_all_backup_exclude_dir; } $excludes = explode("|", $excludes); foreach ($excludes as $key => &$rule) { $file = $absolute = $fragment = false; // Files don't end with / if (!in_array(substr($rule, -1), array('\\', '/'))) $file = true; // If rule starts with a / then treat as absolute path elseif (in_array(substr($rule, 0, 1), array('\\', '/'))) $absolute = true; // Otherwise treat as dir fragment else $fragment = true; // Strip $this->root and conform $rule = str_ireplace($this->get_root(), '', untrailingslashit(self::conform_dir($rule))); // Strip the preceeding slash if (in_array(substr($rule, 0, 1), array('\\', '/'))) $rule = substr($rule, 1); // Escape string for regex if ($context === 'regex') $rule = str_replace('.', '\.', $rule); // Convert any existing wildcards if ($wildcard !== '*' && strpos($rule, '*') !== false) $rule = str_replace('*', $wildcard, $rule); // Wrap directory fragments and files in wildcards for zip if ($context === 'zip' && ( $fragment || $file )) $rule = $wildcard . $rule . $wildcard; // Add a wildcard to the end of absolute url for zips if ($context === 'zip' && $absolute) $rule .= $wildcard; // Add and end carrot to files for pclzip but only if it doesn't end in a wildcard if ($file && $context === 'regex') $rule .= '$'; // Add a start carrot to absolute urls for pclzip if ($absolute && $context === 'regex') $rule = '^' . $rule; } // Escape shell args for zip command if ($context === 'zip') $excludes = array_map('escapeshellarg', array_unique($excludes)); return implode($separator, $excludes); } public function get_archive_method() { return $this->archive_method; } public function verify_archive($WPDBFileName) { // If we've already passed then no need to check again if (!empty($this->archive_verified)) return true; // If there are errors delete the backup file. if ($this->get_errors($this->get_archive_method()) && file_exists($WPDBFileName)) unlink($WPDBFileName); // If the archive file still exists assume it's good if (file_exists($WPDBFileName)) return $this->archive_verified = true; return false; } public function get_files() { if (!empty($this->files)) return $this->files; $this->files = array(); // We only want to use the RecursiveDirectoryIterator if the FOLLOW_SYMLINKS flag is available if (defined('RecursiveDirectoryIterator::FOLLOW_SYMLINKS')) { $this->files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->get_root(), RecursiveDirectoryIterator::FOLLOW_SYMLINKS), RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD); // Skip dot files if the SKIP_Dots flag is available if (defined('RecursiveDirectoryIterator::SKIP_DOTS')) $this->files->setFlags(RecursiveDirectoryIterator::SKIP_DOTS + RecursiveDirectoryIterator::FOLLOW_SYMLINKS); // If RecursiveDirectoryIterator::FOLLOW_SYMLINKS isn't available then fallback to a less memory efficient method } else { $this->files = $this->get_files_fallback($this->get_root()); } return $this->files; } public function wpdbbkp_get_timeago( $time ) { $time_difference = time() - $time; if( $time_difference < 1 ) { return 'less than 1 second ago'; } $condition = array( 12 * 30 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second' ); foreach( $condition as $secs => $str ) { $d = $time_difference / $secs; if( $d >= 1 ) { $t = floor( $d ); return 'About ' . $t . ' ' . $str . ( $t > 1 ? 's' : '' ) . ' ago'; } } } } new Wpdb_Admin();