feat: add S3-compatible storage provider (MinIO, Ceph, R2, etc.)
Adds a new 'S3-Compatible Storage' provider that works with any
S3-API-compatible object storage service, including MinIO, Ceph,
Cloudflare R2, Backblaze B2, and others.
Changes:
- New provider class: classes/providers/storage/s3-compatible-provider.php
- Provider key: s3compatible
- Reads user-configured endpoint URL from settings
- Uses path-style URL access (required by most S3-compatible services)
- Supports credentials via AS3CF_S3COMPAT_ACCESS_KEY_ID /
AS3CF_S3COMPAT_SECRET_ACCESS_KEY wp-config.php constants
- Disables AWS-specific features (Block Public Access, Object Ownership)
- New provider SVG icons (s3compatible.svg, -link.svg, -round.svg)
- Registered provider in main plugin class with endpoint setting support
- Updated StorageProviderSubPage to show endpoint URL input for S3-compatible
- Built pro settings bundle with rollup (Svelte 4.2.19)
- Added package.json and updated rollup.config.mjs for pro-only builds
This commit is contained in:
96
classes/pro/as3cf-pro-utils.php
Normal file
96
classes/pro/as3cf-pro-utils.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Pro Plugin Utilities
|
||||
*
|
||||
* @package amazon-s3-and-cloudfront-pro
|
||||
* @subpackage Classes/Utils
|
||||
* @copyright Copyright (c) 2015, Delicious Brains
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 1.0
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* AS3CF_Pro_Utils Class
|
||||
*
|
||||
* This class contains utility functions that need to be available
|
||||
* across the Pro plugin codebase
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
class AS3CF_Pro_Utils {
|
||||
|
||||
/**
|
||||
* Delete wildcard options
|
||||
*
|
||||
* @param array|string $keys
|
||||
*/
|
||||
public static function delete_wildcard_options( $keys ) {
|
||||
global $wpdb;
|
||||
|
||||
$table = $wpdb->options;
|
||||
$column = 'option_name';
|
||||
|
||||
if ( is_multisite() ) {
|
||||
$table = $wpdb->sitemeta;
|
||||
$column = 'meta_key';
|
||||
}
|
||||
|
||||
// Convert string values to array
|
||||
if ( ! is_array( $keys ) ) {
|
||||
$keys = array( $keys );
|
||||
}
|
||||
|
||||
foreach ( $keys as $key ) {
|
||||
$wpdb->query( $wpdb->prepare( "
|
||||
DELETE FROM {$table}
|
||||
WHERE {$column} LIKE %s
|
||||
", $key ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the keys of background jobs that could be running
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_batch_job_keys() {
|
||||
$keys = array(
|
||||
'as3cf_find_replace_batch_%',
|
||||
'as3cf_legacy_upload_%',
|
||||
'as3cf_media_actions_batch_%',
|
||||
'as3cf_settings_change_batch_%',
|
||||
'as3cf_minify_batch_%',
|
||||
'as3cf_process_assets_batch_%',
|
||||
);
|
||||
|
||||
return $keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively collapses an empty array structure.
|
||||
*
|
||||
* @param mixed $array
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function array_prune_recursive( $array ) {
|
||||
if ( ! is_array( $array ) ) {
|
||||
return $array;
|
||||
}
|
||||
|
||||
foreach ( $array as $key => &$value ) {
|
||||
$value = self::array_prune_recursive( $value );
|
||||
|
||||
if ( empty( $value ) && ! is_numeric( $value ) ) {
|
||||
unset( $array[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user