function create_scheduled_backup($request_options) { // Modify time limit set_time_limit($request_options['backup_timeout']); // Get options $options = get_option(WP_BEIFEN_OPTIONS); // A shortcut for DIRECTORY_SEPARATOR if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } // Defines for recursive function use define('WP_BEIFEN_DIR', $options['plugin_backup_directory']); define('WP_BEIFEN_CURRENT_BACKUP', WP_BEIFEN_DIR . $request_options['backup_name'] . DS); define('WP_BEIFEN_CURRENT_DB_DIR', WP_BEIFEN_CURRENT_BACKUP . 'database' . DS); // Load required class definitions and create instances require_once $options['plugin_location'] . 'classes' . DS . 'file.php'; require_once $options['plugin_location'] . 'classes' . DS . 'database.php'; $bkp_db = new XinitBackupDatabaseHelper(); $bkp_file = new XinitBackupFileHelper(); // Check for existing backups with same name if ($bkp_db->existingBackup($request_options['backup_name'])) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("There is already a backup with this name. Please change the name!", WP_BEIFEN_DOMAIN); return $result; } // Check if main backup directory is writable if (!is_writable(WP_BEIFEN_DIR)) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("The backup folder is not writable. Please check write-permissions!", WP_BEIFEN_DOMAIN); return $result; } // Check if backup destination directory is writable and existing if (!@mkdir(WP_BEIFEN_CURRENT_BACKUP) && !file_exists(WP_BEIFEN_CURRENT_BACKUP)) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("Could not create backup folder. Please check write-permissions!", WP_BEIFEN_DOMAIN); return $result; } // if DB backup, check db destionation if ($request_options['backup_type'] == 'Complete' || $request_options['backup_type'] == 'DB') { if (!file_exists(WP_BEIFEN_CURRENT_DB_DIR) && !mkdir(WP_BEIFEN_CURRENT_DB_DIR)) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("The database backup folder is not writable. Please check write-permissions!", WP_BEIFEN_DOMAIN); return $result; } } // Windows path hack if (DS == '/') { define('ABSPATH_CUSTOM', ABSPATH); } else { $custom_abspath = substr(ABSPATH, 0, -1); define('ABSPATH_CUSTOM', $custom_abspath); } // Exclude backup directories $exclude = array(); // Exclude the backup itself $exclude[] = WP_BEIFEN_CURRENT_BACKUP; // Exclude existing backups? if (!$options['include_backup_directory']) { $exclude[] = WP_BEIFEN_DIR; } // Do it! switch ($request_options['backup_type']) { case 'Complete': // Complete backup // Database backup foreach ($bkp_db->getTableNames() as $table_name) { $dump = $bkp_db->getTableDump($table_name); if ($dump != '') { $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_DB_DIR . $table_name . '.sql', $dump); } unset($dump); } // File Backup $bkp_file->copyFolderRec(ABSPATH_CUSTOM, WP_BEIFEN_CURRENT_BACKUP . 'root' . DS, $exclude); break; case 'Files': // files only backup $bkp_file->copyFolderRec(ABSPATH_CUSTOM, WP_BEIFEN_CURRENT_BACKUP . 'root' . DS, $exclude); break; case 'DB': // DB only backup foreach ($bkp_db->getTableNames() as $table_name) { $dump = $bkp_db->getTableDump($table_name); if ($dump != '') { $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_DB_DIR . $table_name . '.sql', $dump); } unset($dump); } break; default: $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("This is not a valid backup type!", WP_BEIFEN_DOMAIN); return $result; } // Zip backup, if requested if ($request_options["compress_backup"] == 'Yes') { require_once $options['plugin_location'] . 'classes' . DS . 'zip.php'; $zipper = new XinitBackupZipHelper(); $zipper->createZip(WP_BEIFEN_CURRENT_BACKUP . $request_options['backup_name'] . '.zip', WP_BEIFEN_CURRENT_BACKUP); } // Create index.html and .htaccess $empty_html = '<html><body></body></html>'; $htaccess_l1 = "RewriteEngine on\n"; $htaccess_l2 = "RewriteRule (.*) " . get_bloginfo('url') . "/ [R=301,L]"; $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_BACKUP . 'index.html', $empty_html, 'a'); $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_BACKUP . '.htaccess', $htaccess_l1, 'w'); $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_BACKUP . '.htaccess', $htaccess_l2, 'a'); $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_DB_DIR . 'index.html', $empty_html, 'a'); $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_DB_DIR . '.htaccess', $htaccess_l1, 'w'); $bkp_file->writeTextToFile(WP_BEIFEN_CURRENT_DB_DIR . '.htaccess', $htaccess_l2, 'a'); // If everythings ok ... $zipped = $request_options["compress_backup"] == 'Yes' ? "TRUE" : "FALSE"; $bkp_db->insertNewBackupEntry($request_options['backup_name'], WP_BEIFEN_CURRENT_BACKUP, $request_options['backup_type'], $zipped); $result['status'] = __("Success", WP_BEIFEN_DOMAIN); $result['message'] = __("Backup has been successfully created!", WP_BEIFEN_DOMAIN); if ($options['enable_debugging'] == true) { $memory_usage = memory_get_usage() / 1048576; $result['message'] .= '<br/>Memory usage: ' . number_format($memory_usage, 2) . ' MB'; } return $result; }
function wp_beifen_process_ajax_request($request_options) { // Get options and schedules, need to rewrite them after restore $options = get_option(WP_BEIFEN_OPTIONS); $scheduled_backups = get_option('WP_BEIFEN_SCHEDULED_BACKUPS'); // Load required class definitions and create instances require_once $options['plugin_location'] . 'classes' . DS . 'file.php'; require_once $options['plugin_location'] . 'classes' . DS . 'database.php'; $bkp_db = new XinitBackupDatabaseHelper(); $bkp_file = new XinitBackupFileHelper(); global $wpdb; $table_name = $wpdb->prefix . "beifen"; $sql = "SELECT id,name,DATE_FORMAT(created,'%Y-%m-%d-%k-%i') as created,type,zipped FROM {$table_name} LIMIT 1"; $backup_details = $wpdb->get_row($sql, OBJECT); if ($wpdb->num_rows == 1) { $backup_directory = $options['plugin_backup_directory'] . $backup_details->name . DS; // Source $source = $backup_directory . 'root' . DS; // Destination // Windows path hack if (DS == '/') { $custom_abspath = ABSPATH; } else { $custom_abspath = substr(ABSPATH, 0, -1); } $destination = $custom_abspath; $error_list = array(); if ($backup_details->type == 'Complete' || $backup_details->type == 'Files') { // Is destination writable? $error_list = $bkp_file->destination_writable($destination); } if (count($error_list) == 0) { // Blog is writable switch ($backup_details->type) { case 'Complete': $bkp_file->copyFolderRec($source, $destination); $dump = readDumpFolder($backup_directory . 'database' . DS); if (!restoreDump($dump)) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("Could not restore database!", WP_BEIFEN_DOMAIN); $result['message'] .= mysql_error(); return $result; } break; case 'Files': $bkp_file->copyFolderRec($source, $destination); break; case 'DB': $dump = readDumpFolder($backup_directory . 'database' . DS); if (!restoreDump($dump)) { $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("Could not restore database!", WP_BEIFEN_DOMAIN); return $result; } break; case 'Custom': break; default: $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("This is not a valid backup type!", WP_BEIFEN_DOMAIN); return $result; } $result['status'] = __("Success", WP_BEIFEN_DOMAIN); $result['message'] = __("Backup was successfully restored!", WP_BEIFEN_DOMAIN); return $result; } else { $result['message'] .= 'Blog not writable!<br/>'; foreach ($error_list as $error_file) { $result['message'] .= 'File: ' . $error_file . ' not writable<br/>'; } $result['status'] = __("Error", WP_BEIFEN_DOMAIN); return $result; } } else { update_option(WP_BEIFEN_OPTIONS, $options); update_option('WP_BEIFEN_SCHEDULED_BACKUPS', $scheduled_backups); //$bkp_file->destination_writable($test); // Return success message $result['status'] = __("Error", WP_BEIFEN_DOMAIN); $result['message'] = __("Invalid backup ID!", WP_BEIFEN_DOMAIN); return $result; } }