File "class-wpdbbackupgoogle.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/wp-database-backup/includes/admin/Destination/Google/class-wpdbbackupgoogle.php
File size: 3.4 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Destination form.
*
* @package wpdbbkp
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
add_action( 'wp_db_backup_completed', array( 'WPDBBackupGoogle', 'wp_db_backup_completed' ) );
/**
* WPDBBackupGoogle Class.
*
* @class WPDBBackupGoogle
*/
class WPDBBackupGoogle {
/**
* Process the database backup and upload to Google Drive.
*
* @param array $args Arguments for the backup process.
*/
public static function wp_db_backup_completed( &$args ) {
global $wp_filesystem;
// Initialize the WordPress filesystem if it hasn't been initialized yet.
if ( ! function_exists( 'WP_Filesystem' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
WP_Filesystem();
$auth_code = get_option( 'wpdb_dest_google_authCode' );
$client_id = get_option( 'wpdb_dest_google_client_key' );
$client_secret = get_option( 'wpdb_dest_google_secret_key' );
if ( ! empty( $auth_code ) && ! empty( $client_id ) && ! empty( $client_secret ) ) {
update_option( 'wpdbbkp_backupcron_current', 'Processing Google Backup', false );
set_time_limit( 0 );
// Initialize the Google API client
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$client = new Google_Client();
$client->setClientId( $client_id );
$client->setClientSecret( $client_secret );
$client->setRedirectUri( site_url() . '/wp-admin/admin.php?page=wp-database-backup&action=auth' );
$client->setScopes( array( 'https://www.googleapis.com/auth/drive' ) );
$service = new Google_DriveService( $client );
// Exchange authorization code for access token
if ( ! get_option( 'wpdb_google_drive_token' ) ) {
$access_token = $client->authenticate( $auth_code );
update_option( 'wpdb_google_drive_token', $access_token, false );
} else {
$access_token = get_option( 'wpdb_google_drive_token' );
}
$client->setAccessToken( $access_token );
// Upload file to Google Drive
$file = new Google_DriveFile();
$file->setTitle( $args[0] );
$file->setDescription( 'WP Database Backup : DB backup file - ' . site_url() );
$file->setMimeType( 'application/gzip' );
// Uploading chunked file so CPU and memory usage doesn't go 100%
$chunk_size_bytes = 1 * 1024 * 1024;
$media = new Google_MediaFileUpload( 'application/gzip', null, true, $chunk_size_bytes );
$media->setFileSize( $wp_filesystem->size( $args[1] ) );
$created_file = $service->files->insert(
$file,
array( 'mediaUpload' => $media )
);
$status = false;
$file_handle = $wp_filesystem->get_contents( $args[1] );
if ( $file_handle !== false ) {
$offset = 0;
while ( ! $status && $offset < strlen( $file_handle ) ) {
$chunk = substr( $file_handle, $offset, $chunk_size_bytes );
$status = $media->nextChunk( $created_file, $chunk );
$offset += $chunk_size_bytes;
}
}
$args[2] .= '<br>' . esc_html__( 'Upload Database Backup on Google Drive', 'wpdbbkp' );
$args[4] .= 'Drive, ';
}
}
}