File "class-wpdatabasebackupcd.php"
Full Path: /home/vantageo/public_html/cache/.wp-cli/wp-content/plugins/wp-database-backup/includes/admin/Destination/CloudDrive/class-wpdatabasebackupcd.php
File size: 4.7 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Destination CloudDrive.
*
* @package wpdbbkp
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
add_action( 'wp_db_backup_completed', array( 'WPDatabaseBackupCD', 'wp_db_backup_completed' ) );
/**
* WPDatabaseBackupCD Class.
*
* @class WPDatabaseBackupCD
*/
class WPDatabaseBackupCD {
// Function to upload files to Backblaze B2
public static function upload_backup_to_clouddrive($file_path, $file_name) {
global $wp_filesystem;
if(!function_exists('WP_Filesystem')){
require_once ( ABSPATH . '/wp-admin/includes/file.php' );
}
WP_Filesystem();
$api_url ="https://app.backupforwp.com/public";
$token = get_option('wpdb_clouddrive_token') ? get_option('wpdb_clouddrive_token') : '';
$upload_auth_token = 'Bearer '.$token;
$upload_url = $api_url . '/api/v1/file/upload';
if (!$wp_filesystem) {
return array('success' => false, 'message' => esc_html__('Unable to initialize wp_filesystem : ' , 'wpdbbkp'). $file_path);
}
if (!$wp_filesystem->exists($file_path)) {
return array('success' => false, 'message' => esc_html__('File does not exist: ' , 'wpdbbkp'). $file_path);
}
$file_size = filesize($file_path);
$file_contents = $wp_filesystem->get_contents( $file_path );
if ($file_contents === false) {
return array('success' => false, 'message' => esc_html__('Failed to read file: ', 'wpdbbkp') . $file_path);
}
$root_path = str_replace('\\', '/', ABSPATH); // Normalize to forward slashes for consistency
$file_path = str_replace($root_path, '', $file_path);
$file_path = ltrim($file_path, '/'); // Ensure there is no leading slash
$file_data = $file_contents;
$boundary = wp_generate_password( 24 );
$headers = array(
'Authorization' => $upload_auth_token,
'domain'=> $_SERVER['HTTP_HOST'],
'Content-Type' => 'multipart/form-data; boundary=' . $boundary,
);
$body = "--{$boundary}\r\n";
$body .= 'Content-Disposition: form-data; name="file"; filename="' . $file_name . '"' . "\r\n";
$body .= "file_contents-Type: application/octet-stream\r\n\r\n";
$body .= $file_data . "\r\n";
$body .= "--{$boundary}\r\n";
$body .= 'Content-Disposition: form-data; name="filename"' . "\r\n\r\n";
$body .= $file_path . "\r\n";
$body .= "--{$boundary}\r\n";
$response = wp_remote_post( $upload_url, array(
'headers' => $headers,
'body' => $body,
'timeout' => 300,
) );
if (is_wp_error($response)) {
return array('success' => false, 'message' => esc_html__('Upload request failed: ', 'wpdbbkp') . $response->get_error_message());
}
$response_code = wp_remote_retrieve_response_code($response);
if ($response_code != 200) {
$response_body = wp_remote_retrieve_body($response);
return array('success' => false, 'message' => esc_html__('Failed to upload ' , 'wpdbbkp'). $file_name . ' to Cloud Backup. Response: ' . $response_body);
}
return array('success' => true, 'message' => 'File ' . $file_name . esc_html__(' uploaded successfully to Cloud Backup.', 'wpdbbkp'));
}
/**
* Run after complete backup.
*
* @param array $args - backup details.
*/
public static function wp_db_backup_completed( &$args ) {
$destination_cd = get_option( 'wpdb_clouddrive_token' , false);
if ( $destination_cd && !empty($destination_cd)) {
try {
$ret = WPDatabaseBackupCD::upload_backup_to_clouddrive($args[1], $args[1]);
$args[2] = $args[2] .$ret['message'];
if ($ret['success']) {
$args[4] .= 'CloudDrive, ';
}
return $ret;
} catch ( Exception $e ) {
$args[2] = $args[2] . "<br>".esc_html__("Failed to upload Database Backup on Cloud Backup", 'wpdbbkp');
return $e;
}
}
}
public // Function to handle the file upload
function wp_db_handle_file_upload($file_path) {
// Prepare file array for sideload
$file_array = array(
'name' => basename($file_path),
'tmp_name' => $file_path,
);
// Include WordPress file handling functions
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
// Handle the file upload
$uploaded_file = media_handle_sideload($file_array, 0);
if (is_wp_error($uploaded_file)) {
return $uploaded_file; // Return the WP_Error object
}
return get_attached_file($uploaded_file);
}
}