Files
WPS3Media/vendor/deliciousbrains/plugin.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

205 lines
4.3 KiB
PHP

<?php
/**
* Plugin Class
*
* @package deliciousbrains
* @subpackage api/plugin
* @copyright Copyright (c) 2015, Delicious Brains
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 0.1
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Delicious_Brains_API_Plugin Class
*
* This class holds all the information about the plugin used by the common API classes
*
* @since 0.1
*/
class Delicious_Brains_API_Plugin {
/**
* @var string Plugin slug
*/
public $slug;
/**
* @var string Plugin name
*/
public $name;
/**
* @var string Plugin version
*/
public $version;
/**
* @var string Plugin basename
*/
public $basename;
/**
* @var string Plugin Directory Path
*/
public $dir_path;
/**
* @var string Prefix to use in nonces and transients
*/
public $prefix;
/**
* @var string Path for the URL to the plugin's settings page, passed to admin_url()
*/
public $settings_url_path;
/**
* @var string Hash for the URL to the plugin's settings page, passed to admin_url()
*/
public $settings_url_hash;
/**
* @var string Hook for the plugin's menu
*/
public $hook_suffix;
/**
* @var bool For Multisite installs is the plugin network activated
*/
public $is_network_activated = true;
/**
* @var bool Do we allow expired licenses as valid, ie. we don't cripple functionality
*/
public $expired_licence_is_valid = true;
/**
* @var string name of email address, usually the same as the prefix
*/
public $email_address_name;
/**
* @var string prefix of the global meta data for the plugins
*/
public $global_meta_prefix;
/**
* @var string Action hook used to display notices in the plugin
*/
public $notices_hook;
/**
* @var string Action hook fired on plugin page load
*/
public $load_hook;
/**
* @var string URL to purchase a license for the plugin
*/
public $purchase_url;
/**
* @var string URL to view licenses
*/
public $licenses_url;
/**
* @var string URL to access My Account of Delicious Brains
*/
public $account_url = 'https://deliciousbrains.com/my-account/';
/**
* Return the name of the email address.
* This is by default the plugin prefix
*
* @return string
*/
public function get_email_address_name() {
if ( $this->email_address_name ) {
return $this->email_address_name;
}
return $this->prefix;
}
/**
* Return the key for the global meta where all the version info is stored
* for the plugin and addons.
*
* @param string $suffix
*
* @return string
*/
public function get_global_meta_key( $suffix = 'meta' ) {
$prefix = $this->prefix;
if ( $this->global_meta_prefix ) {
$prefix = $this->global_meta_prefix;
}
return $prefix . '_' . $suffix;
}
/**
* Gets a plugin basename for one of our plugins.
* This is made up of the plugin folder and filename.
*
* @param string $slug
*
* @return string eg. 'akismet/akismet.php'
*/
function get_plugin_basename( $slug ) {
$meta_key = $this->get_global_meta_key();
if ( ! isset( $GLOBALS[ $meta_key ][ $slug ]['folder'] ) ) {
$plugin_folder = $slug;
} else {
$plugin_folder = $GLOBALS[ $meta_key ][ $slug ]['folder'];
}
$plugin_basename = sprintf( '%s/%s.php', $plugin_folder, $slug );
return $plugin_basename;
}
/**
* Get the data for a plugin
*
* @param string $slug
*
* @return array|bool
*/
function get_plugin_data( $slug ) {
$plugin_path = WP_PLUGIN_DIR . '/' . $this->get_plugin_basename( $slug );
if ( file_exists( $plugin_path ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
$plugin_data = get_plugin_data( $plugin_path );
if ( ! empty( $plugin_data['Name'] ) ) {
return $plugin_data;
}
}
return false;
}
/**
* Get the name of a plugin
*
* @param string $slug
*
* @return string
*/
function get_plugin_name( $slug ) {
$data = $this->get_plugin_data( $slug );
if ( $data && ! empty( $data['Name'] ) ) {
$name = $data['Name'];
} else {
$name = ucwords( str_replace( '-', ' ', $slug ) );
}
return $name;
}
/**
* Get the installed version of a plugin
*
* @param string $slug
*
* @return int
*/
function get_plugin_version( $slug ) {
$data = $this->get_plugin_data( $slug );
if ( $data && ! empty( $data['Version'] ) ) {
return $data['Version'];
}
return false;
}
}