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:
10
view/pro/deactivate-plugin-prompt.php
Normal file
10
view/pro/deactivate-plugin-prompt.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<div class="as3cf-deactivate-plugin-container" style="display: none;">
|
||||
<h3><?php _e( 'WP Offload Media Uninstall', 'amazon-s3-and-cloudfront' ); ?></h3>
|
||||
<p><?php _e( 'You have the "Remove Local Media" option ON, which means some media files are likely missing from your local server and deactivating WP Offload Media could result in broken images and file links on your site.', 'amazon-s3-and-cloudfront' ); ?></p>
|
||||
<p><?php _e( 'We recommend you copy all the media files back to your server from the bucket before deactivating. Would you like to do this now?', 'amazon-s3-and-cloudfront' ); ?></p>
|
||||
<p class="actions select">
|
||||
<button type="submit" class="button button-primary right" data-download-tool="1"><?php _e( 'Yes', 'amazon-s3-and-cloudfront' ); ?></button>
|
||||
<button type="submit" class="button right" data-download-tool="0"><?php _e( 'No', 'amazon-s3-and-cloudfront' ); ?></button>
|
||||
<span class="spinner right"></span>
|
||||
</p>
|
||||
</div>
|
||||
36
view/pro/install-notice.php
Normal file
36
view/pro/install-notice.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/** @var array $plugins_not_installed */
|
||||
?>
|
||||
<div class="notice-info notice as3cf-pro-installer">
|
||||
<p>
|
||||
<strong>
|
||||
<?php printf( __( 'Finish Installing %s', 'amazon-s3-and-cloudfront' ), $this->plugin_name ); ?>
|
||||
</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<?php printf( __( 'The %s plugin requires the following plugins to be installed:', 'amazon-s3-and-cloudfront' ), $this->plugin_name ); ?>
|
||||
</p>
|
||||
<ul style="list-style-type: disc; padding: 0 0 0 30px; margin: 5px 0;">
|
||||
<?php foreach ( $plugins_not_installed as $slug => $plugin_name ) : ?>
|
||||
<li style="margin: 0;">
|
||||
<a class="thickbox" style="text-decoration: none;" href="<?php echo $this->get_plugin_info_url( $slug ); ?>">
|
||||
<?php echo $plugin_name; ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<p>
|
||||
<a href="#" class="button button-primary button-large install-plugins" data-process="installer"><?php _e( 'Install & Activate Now' ); ?></a>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
<?php
|
||||
$deactivate_url = $this->get_plugin_action_url( 'deactivate' );
|
||||
$deactivate_link = sprintf( '<a id="' . $this->plugin_slug . '-install-notice-deactivate" style="text-decoration:none;" href="%s">%s</a>', $deactivate_url, __( 'deactivating', 'amazon-s3-and-cloudfront' ) );
|
||||
|
||||
printf( __( 'You can also remove this message by %s the %s plugin.', 'amazon-s3-and-cloudfront' ), $deactivate_link, $this->plugin_name );
|
||||
?>
|
||||
</em>
|
||||
</p>
|
||||
</div>
|
||||
38
view/pro/licence-notice.php
Normal file
38
view/pro/licence-notice.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/** @var string $dashboard */
|
||||
/** @var string $id */
|
||||
/** @var string $heading */
|
||||
/** @var string $type */
|
||||
/** @var string $message */
|
||||
/** @var string $extra */
|
||||
/** @var bool $dismissible */
|
||||
/** @var string $dismiss_url */
|
||||
/** @var array $links */
|
||||
?>
|
||||
<div id="<?php echo "{$id}"; ?>" class="as3cf-pro-licence-notice notice <?php echo $type; ?> important <?php echo $dismissible ? 'is-dismissible' : ''; ?>">
|
||||
<p>
|
||||
<strong><?php echo $heading; ?></strong> — <?php echo $message; ?>
|
||||
</p>
|
||||
|
||||
<?php if ( $extra ) : ?>
|
||||
<p>
|
||||
<?php echo $extra; ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ( $links ) : ?>
|
||||
<p class="notice-links">
|
||||
<?php echo join( ' | ', $links ); ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ( $dismissible ) : // use inline script to omit need to enqueue a script dashboard-wide ?>
|
||||
<script>
|
||||
(function( $ ) {
|
||||
$( '#<?php echo "{$id}.is-dismissible"; ?>' ).on( 'click', '.notice-dismiss', function() {
|
||||
$.get( '<?php echo $dismiss_url; ?>' );
|
||||
} );
|
||||
})( jQuery );
|
||||
</script>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
11
view/pro/settings.php
Normal file
11
view/pro/settings.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<div id="as3cf-settings" class="wpome wpomepro">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new AS3CFPro_Settings( {
|
||||
target: document.getElementById( 'as3cf-settings' ),
|
||||
props: {
|
||||
init: as3cfpro_settings
|
||||
}
|
||||
} );
|
||||
</script>
|
||||
Reference in New Issue
Block a user