Files
WPS3Media/classes/pro/as3cf-pro-utils.php
Malin 3248cbb029 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
2026-03-03 12:30:18 +01:00

97 lines
1.8 KiB
PHP

<?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;
}
}