public static function execute( $params ) { // Set Gdrive client $gdrive = new ServMaskGdriveClient( get_option( 'ai1wmge_gdrive_token' ), get_option( 'ai1wmge_gdrive_ssl', true ) ); $backup_folder = $gdrive->listFolder( ai1wm_archive_folder() ); if ( isset( $backup_folder['items'] ) && ( $item = array_shift( $backup_folder['items'] ) ) ) { $backup_folder = $item; } else { return $params; } $files = $gdrive->listFolder( null, $backup_folder['id'], array( 'orderBy' => 'createdDate', ) ); $backups = array(); foreach ( $files['items'] as $backup ) { if ( $backup['kind'] === 'drive#file' ) { $backups[] = $backup; } } // Skip calculations if there are no backups to delete if ( count( $backups ) === 0 ) { return $params; } // Number of backups if ( ( $backups_limit = get_option( 'ai1wmge_gdrive_backups', 0 ) ) ) { if ( ( $backups_to_remove = count( $backups ) - $backups_limit ) > 0 ) { for ( $index = 0; $index < $backups_to_remove; $index++ ) { $gdrive->delete( $backups[$index]['id'] ); } } } // Sort backups by date desc $backups = array_reverse( $backups ); // Get the size of the latest backup before we remove it $size_of_backups = $backups[0]['fileSize']; // Remove the latest backup, the user should have at least one backup array_shift( $backups ); if ( ( $retention_size = ai1wm_parse_size( get_option( 'ai1wmge_gdrive_total', 0 ) ) ) ) { foreach ( $backups as $backup ) { $size_of_backups += $backup['fileSize']; if ( $size_of_backups > $retention_size ) { $gdrive->delete( $backup['id'] ); } } } return $params; }
public static function execute( $params ) { // Set progress Ai1wm_Status::info( __( 'Connecting to Google Drive...', AI1WMGE_PLUGIN_NAME ) ); // Open achive file $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Append EOF block $archive->close( true ); // Set Gdrive client $gdrive = new ServMaskGdriveClient( get_option( 'ai1wmge_gdrive_token' ), get_option( 'ai1wmge_gdrive_ssl', true ) ); // Get or Create folder $folder = $gdrive->listFolder( ai1wm_archive_folder() ); if ( isset( $folder['items'] ) && ( $item = array_shift( $folder['items'] ) ) ) { $folder = $item; } else { $folder = $gdrive->createFolder( ai1wm_archive_folder() ); } // Upload resumable $params['uploadUrl'] = $gdrive->uploadResumable( ai1wm_archive_name( $params ), ai1wm_archive_bytes( $params ), $folder['id'] ); return $params; }
public static function execute($params) { // Set Dropbox client $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true)); // Get metadata $metadata = $dropbox->metadata(ai1wm_archive_folder()); // Number of backups if ($backups = get_option('ai1wmde_dropbox_backups')) { if ($backups = count($metadata['contents']) - $backups) { for ($i = 0; $i < $backups; $i++) { if (empty($metadata['contents'][$i]['is_dir'])) { $dropbox->delete($metadata['contents'][$i]['path']); } } } } // Size of backups if ($total = ai1wm_parse_size(get_option('ai1wmde_dropbox_total'))) { $bytes = 0; if (isset($metadata['contents']) && ($contents = $metadata['contents'])) { foreach ($contents as $content) { $bytes += $content['bytes']; } // Delete backups foreach ($contents as $content) { if ($bytes > $total) { if (empty($content['is_dir'])) { $dropbox->delete($content['path']); // Decrease bytes $bytes -= $content['bytes']; } } } } } return $params; }
public static function execute($params) { $completed = false; // Set offset if (!isset($params['offset'])) { $params['offset'] = 0; } // Set retry if (!isset($params['retry'])) { $params['retry'] = 0; } // Set Dropbox client $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true)); // Get archive file $archive = fopen(ai1wm_archive_path($params), 'rb'); // Read file chunk if (fseek($archive, $params['offset']) !== -1 && ($chunk = fread($archive, ServMaskDropboxClient::CHUNK_SIZE))) { try { // Increase number of retries $params['retry'] += 1; // Upload file chunk $dropbox->uploadFileChunk($chunk, $params); } catch (Exception $e) { // Retry 3 times if ($params['retry'] <= 3) { return $params; } throw $e; } // Reset retry counter $params['retry'] = 0; // Set archive details $name = ai1wm_archive_name($params); $bytes = ai1wm_archive_bytes($params); $size = ai1wm_archive_size($params); // Get progress if (isset($params['offset'])) { $progress = (int) ($params['offset'] / $bytes * 100); } else { $progress = 100; } // Set progress Ai1wm_Status::info(__("<i class=\"ai1wm-icon-dropbox\"></i> " . "Uploading <strong>{$name}</strong> ({$size})<br />{$progress}% complete", AI1WMDE_PLUGIN_NAME)); } else { // Set archive details $name = ai1wm_archive_name($params); $folder = ai1wm_archive_folder(); // Commit upload file chunk $dropbox->uploadFileChunkCommit(sprintf('%s/%s', $folder, $name), $params); // Set last backup date update_option('ai1wmde_dropbox_timestamp', current_time('timestamp')); // Set progress Ai1wm_Status::done(__('Your WordPress archive has been uploaded to Dropbox.', AI1WMDE_PLUGIN_NAME), __('Dropbox', AI1WMDE_PLUGIN_NAME)); // Upload completed $completed = true; self::notify_admin_of_new_backup($params); } // Close the archive file fclose($archive); // Set completed flag $params['completed'] = $completed; return $params; }