diff --git a/classes/Tools/Debugging/System/SystemCompatibilityTool.php b/classes/Tools/Debugging/System/SystemCompatibilityTool.php index fa99bf64..14f9dd56 100644 --- a/classes/Tools/Debugging/System/SystemCompatibilityTool.php +++ b/classes/Tools/Debugging/System/SystemCompatibilityTool.php @@ -482,7 +482,7 @@ private function testUploadClient() { $errors = []; try { - $url = $storageTool->client()->upload('_troubleshooter/sample.txt',ILAB_TOOLS_DIR.'/public/text/sample-upload.txt', StorageToolSettings::privacy()); + $url = $storageTool->client()->upload(StorageToolSettings::prefix() . '_troubleshooter/sample.txt',ILAB_TOOLS_DIR.'/public/text/sample-upload.txt', StorageToolSettings::privacy()); Tracker::trackView("System Test - Test Uploads - Success", "/system-test/uploads/success"); } catch (\Exception $ex) { Tracker::trackView("System Test - Test Uploads - Error", "/system-test/uploads/error"); @@ -519,7 +519,7 @@ private function testPubliclyAccessible() { try { $result = null; - $url = $storageTool->client()->url('_troubleshooter/sample.txt'); + $url = $storageTool->client()->url(StorageToolSettings::prefix() . '_troubleshooter/sample.txt'); $result = ilab_file_get_contents($url); @@ -567,7 +567,7 @@ private function testDeletingFiles() { $errors = []; try { - $storageTool->client()->delete('_troubleshooter/sample.txt'); + $storageTool->client()->delete(StorageToolSettings::prefix() . '_troubleshooter/sample.txt'); Tracker::trackView("System Test - Deleting - Success", "/system-test/delete/success"); } catch (\Exception $ex) { $errors[] = $ex->getMessage(); diff --git a/classes/Tools/Storage/Driver/S3/S3Storage.php b/classes/Tools/Storage/Driver/S3/S3Storage.php index c49b9ce6..2a9e65e6 100644 --- a/classes/Tools/Storage/Driver/S3/S3Storage.php +++ b/classes/Tools/Storage/Driver/S3/S3Storage.php @@ -175,6 +175,10 @@ public function validateSettings($errorCollector = null) { if($this->enabled()) { $client = $this->getClient($errorCollector); + if (empty(apply_filters('media-cloud/storage/verify/settings', true))) { + return true; + } + if (!empty($client)) { $connectError = false; diff --git a/classes/Tools/Storage/StorageToolSettings.php b/classes/Tools/Storage/StorageToolSettings.php index effa22cc..29994787 100644 --- a/classes/Tools/Storage/StorageToolSettings.php +++ b/classes/Tools/Storage/StorageToolSettings.php @@ -17,6 +17,7 @@ namespace MediaCloud\Plugin\Tools\Storage; use MediaCloud\Plugin\Tools\ToolSettings; +use MediaCloud\Plugin\Utilities\Logging\Logger; use function MediaCloud\Plugin\Utilities\arrayPath; use MediaCloud\Plugin\Utilities\Environment; use MediaCloud\Plugin\Utilities\NoticeManager; @@ -176,6 +177,10 @@ public function __construct() { public function __get($name) { if ($name === 'expires') { if (($this->_expires === null) && !empty($this->expireMinutes)) { + if (gettype($this->expireMinutes) === 'string') { + $this->expireMinutes = intval($this->expireMinutes); + } + $this->_expires = gmdate('D, d M Y H:i:s \G\M\T', time() + ($this->expireMinutes * 60)); } diff --git a/classes/Tools/Storage/Tasks/CleanUploadsTask.php b/classes/Tools/Storage/Tasks/CleanUploadsTask.php index bd2c5453..ef3b2a1a 100644 --- a/classes/Tools/Storage/Tasks/CleanUploadsTask.php +++ b/classes/Tools/Storage/Tasks/CleanUploadsTask.php @@ -14,6 +14,9 @@ namespace MediaCloud\Plugin\Tools\Storage\Tasks; use MediaCloud\Plugin\Tasks\AttachmentTask; +use MediaCloud\Plugin\Tools\Storage\StorageTool; +use MediaCloud\Plugin\Tools\Storage\StorageToolSettings; +use MediaCloud\Plugin\Tools\ToolsManager; use MediaCloud\Plugin\Utilities\Logging\Logger; use function MediaCloud\Plugin\Utilities\arrayPath; use function MediaCloud\Plugin\Utilities\postIdExists; @@ -111,7 +114,7 @@ public static function taskOptions() { } public static function warnOption() { - return 'clean-uploads-task-warning-seen'; + return 'clean-uploads-task-warning-seen-'.time(); } public static function warnConfirmationAnswer() { @@ -230,6 +233,11 @@ protected function cleanEmptyDirectories() { * @throws \Exception */ public function performTask($item) { + /** @var StorageTool $storageTool */ + $storageTool = ToolsManager::instance()->tools['storage']; + + add_filter('media-cloud/storage/should-override-attached-file', '__return_false'); + $post_id = $item['id']; if ($post_id == -1) { @@ -246,12 +254,36 @@ public function performTask($item) { $this->updateCurrentPost($post_id); $file = get_attached_file($post_id, true); - $meta = wp_get_attachment_metadata($post_id, true); + if (strpos($file, 'http://') !== false || strpos($file, 'https://') !== false) { + Logger::info("File is URL", [], __METHOD__, __LINE__); + + $idx = strpos($file, 'https://'); + if ($idx === false) { + $idx = strpos($file, 'http://'); + } + $startPath = substr($file, 0, $idx); + $fileUrl = substr($file, $idx); - $baseDir = pathinfo($file, PATHINFO_DIRNAME); + $path = ltrim(parse_url($fileUrl, PHP_URL_PATH), '/'); + $parts = explode('/', $path); + $possibleBucket = array_shift($parts); + + if($possibleBucket === $storageTool->client()->bucket()) { + $file = $startPath . implode('/', $parts); + Logger::info("Parsed file is bucket, new file is $file", [], __METHOD__, __LINE__); + } else { + $file = $startPath . $path; + Logger::info("Parsed file is NOT current bucket, new file is $file", [], __METHOD__, __LINE__); + } + } $filesToDelete = [$file]; + + $meta = wp_get_attachment_metadata($post_id, true); + + $baseDir = pathinfo($file, PATHINFO_DIRNAME); + if (isset($meta['sizes'])) { foreach($meta['sizes'] as $size => $sizeData) { if (empty($sizeData['file'])) { diff --git a/classes/Tools/Tasks/TasksTool.php b/classes/Tools/Tasks/TasksTool.php index 3b718db5..1f8a4ec9 100644 --- a/classes/Tools/Tasks/TasksTool.php +++ b/classes/Tools/Tasks/TasksTool.php @@ -44,7 +44,9 @@ public function setup() { add_action('init', function() { $role = get_role('administrator'); - $role->add_cap('mcloud_heartbeat', true); + if ($role) { + $role->add_cap('mcloud_heartbeat', true); + } }); if (is_admin()) { diff --git a/classes/Tools/ToolsManager.php b/classes/Tools/ToolsManager.php index b7385646..040dec40 100644 --- a/classes/Tools/ToolsManager.php +++ b/classes/Tools/ToolsManager.php @@ -316,7 +316,7 @@ public static function Boot() return; } static::$booted = true; - Environment::Boot(); + // Environment::Boot(); if ( !is_multisite() && ($media_cloud_licensing->is_plan__premium_only( 'multisite_basic', true ) || $media_cloud_licensing->is_plan__premium_only( 'multisite_pro', true ) || $media_cloud_licensing->is_plan__premium_only( 'multisite_unlimited', true )) ) { add_action( 'admin_notices', function () { diff --git a/classes/Tools/Vision/VisionDriver.php b/classes/Tools/Vision/VisionDriver.php index 6b6ff9e9..1fdf0fa7 100644 --- a/classes/Tools/Vision/VisionDriver.php +++ b/classes/Tools/Vision/VisionDriver.php @@ -18,7 +18,7 @@ if (!defined('ABSPATH')) { header('Location: /'); die; } -abstract class VisionDriver { +abstract class VisionDriver extends \stdClass { /** @var null|VisionToolSettings */ protected $settings = null; diff --git a/classes/Utilities/Environment.php b/classes/Utilities/Environment.php index 0f794b4c..00aca721 100644 --- a/classes/Utilities/Environment.php +++ b/classes/Utilities/Environment.php @@ -13,6 +13,8 @@ namespace MediaCloud\Plugin\Utilities; +use MediaCloud\Plugin\Utilities\Logging\Logger; + if (!defined( 'ABSPATH')) { header( 'Location: /'); die; } @@ -23,6 +25,7 @@ final class Environment { private static $booted = false; private static $networkMode = false; + private static $siteOptions = []; /** * Sets up the environment @@ -33,7 +36,20 @@ public static function Boot() { if ($media_cloud_licensing->is_plan('pro')) { static::$networkMode = get_site_option('mcloud-network-mode'); if(!static::$networkMode) { - static::$networkMode = static::Option('mcloud-network-mode', null, false); + static::$networkMode = static::Option('mcloud-network-mode', null, false, false); + } + } + + global $wpdb; + $options = $wpdb->get_results($wpdb->prepare("select option_name, option_value from {$wpdb->options} where option_name like %s", 'mcloud%')); + foreach($options as $option) { + static::$siteOptions[$option->option_name] = maybe_unserialize($option->option_value); + } + + if (is_multisite()) { + $options = $wpdb->get_results($wpdb->prepare("select meta_key, meta_value from {$wpdb->sitemeta} where meta_key like %s and (site_id = 1 OR site_id = %d) order by site_id asc", 'mcloud%', get_current_blog_id())); + foreach($options as $option) { + static::$siteOptions[$option->meta_key] = maybe_unserialize($option->meta_value); } } @@ -76,7 +92,7 @@ public static function UpdateNetworkMode($enabled) { * * @return array|false|mixed|string|null */ - public static function Option($optionName = null, $envVariableName = null, $default = false) { + public static function Option($optionName = null, $envVariableName = null, $default = false, $useCache = true) { if (empty($optionName) && empty($envVariableName)) { return $default; } @@ -111,12 +127,20 @@ public static function Option($optionName = null, $envVariableName = null, $defa return $default; } + if ($useCache) { + if (array_key_exists($optionName, static::$siteOptions)) { + return static::$siteOptions[$optionName]; + } + } + if (static::$networkMode) { $val = get_site_option($optionName, $default); } else { $val = get_option($optionName, $default); } + static::$siteOptions[$optionName] = $val; + return $val; } @@ -132,6 +156,8 @@ public static function UpdateOption($optionName, $value) { } else { update_option($optionName, $value); } + + static::$siteOptions[$optionName] = $value; } /** @@ -158,6 +184,8 @@ public static function DeleteOption($optionName) { } else { delete_option($optionName); } + + unset(static::$siteOptions[$optionName]); } /** diff --git a/composer.json b/composer.json index 3f9c18e3..e9f8a9e5 100644 --- a/composer.json +++ b/composer.json @@ -14,11 +14,11 @@ ], "config": { "platform": { - "php": "7.1" + "php": "7.4" } }, "require" : { - "php": ">=7.1" + "php": ">=7.4" }, "autoload": { "psr-4": { diff --git a/config/storage.config.php b/config/storage.config.php index f58718e0..1bbc9393 100644 --- a/config/storage.config.php +++ b/config/storage.config.php @@ -114,7 +114,7 @@ ] ], 'wasabi' => [ - 'name' => 'Wasabi', + 'name' => 'Wasabi (Deprecated)', 'class' => "\\MediaCloud\\Plugin\\Tools\\Storage\\Driver\\S3\\WasabiStorage", 'config' => '/storage/wasabi.config.php', 'help' => [ diff --git a/config/wizard.config.php b/config/wizard.config.php index 855459bf..4fb09309 100644 --- a/config/wizard.config.php +++ b/config/wizard.config.php @@ -28,7 +28,7 @@ ->option('cloudflare', 'Cloudflare R2', 'wizard.cloud-storage.providers.cloudflare.description', 'wizard-icon-cloudflare.svg', 'cloud-storage-cloudflare') ->option('do', 'DigitalOcean Spaces', 'wizard.cloud-storage.providers.do.description', 'wizard-icon-do.svg', 'cloud-storage-do') ->option('dreamhost', 'DreamHost Cloud Storage', 'wizard.cloud-storage.providers.dreamhost.description', 'wizard-icon-dreamhost.svg', 'cloud-storage-dreamhost') - ->option('wasabi', 'Wasabi', 'wizard.cloud-storage.providers.wasabi.description', 'wizard-icon-wasabi.png', 'cloud-storage-wasabi') +// ->option('wasabi', 'Wasabi', 'wizard.cloud-storage.providers.wasabi.description', 'wizard-icon-wasabi.png', 'cloud-storage-wasabi') ->option('backblaze-s3', 'Backblaze', 'wizard.cloud-storage.providers.backblaze.description', 'wizard-icon-backblaze.svg', 'cloud-storage-backblaze-s3') ->option('minio', 'Minio', 'wizard.cloud-storage.providers.minio.description', 'wizard-icon-minio.png', 'cloud-storage-minio') ->option('other-s3', 'S3 Compatible', 'wizard.cloud-storage.providers.other-s3.description', 'wizard-icon-other-s3.svg', 'cloud-storage-other-s3') diff --git a/ilab-media-tools.php b/ilab-media-tools.php index 077c1191..5e51e4b0 100644 --- a/ilab-media-tools.php +++ b/ilab-media-tools.php @@ -5,7 +5,7 @@ Plugin URI: https://github.com/interfacelab/ilab-media-tools Description: Automatically upload media to Amazon S3 and integrate with Imgix, a real-time image processing CDN. Boosts site performance and simplifies workflows. Author: interfacelab -Version: 4.5.21 +Version: 4.5.24 Requires PHP: 7.4 Author URI: http://interfacelab.io */ @@ -114,7 +114,7 @@ } // Version Defines -define( 'MEDIA_CLOUD_VERSION', '4.5.21' ); +define( 'MEDIA_CLOUD_VERSION', '4.5.24' ); define( 'MEDIA_CLOUD_INFO_VERSION', '4.0.2' ); define( 'MCLOUD_IS_BETA', false ); // Debugging @@ -222,6 +222,7 @@ function ( $user, $install ) { } add_action( 'plugins_loaded', function () { + \MediaCloud\Plugin\Utilities\Environment::Boot(); \MediaCloud\Plugin\Tools\ToolsManager::Boot(); } ); register_activation_hook( __FILE__, [ "\\MediaCloud\\Plugin\\Tools\\ToolsManager", 'activate' ] ); diff --git a/lib/mcloud-aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php index a6cf7e4e..d5b4fbf8 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/ClientSideMonitoring/ConfigurationProvider.php @@ -87,7 +87,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['csm']) && $config['csm'] instanceof CacheInterface) { diff --git a/lib/mcloud-aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php index 7c791365..eb5773db 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/DefaultsMode/ConfigurationProvider.php @@ -82,7 +82,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['defaultsMode']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php index c1ed87d4..d02c667b 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseDualstackEndpoint/ConfigurationProvider.php @@ -80,7 +80,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback($region); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['use_dual_stack_endpoint']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php index c57983e6..811a7f2b 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/Endpoint/UseFipsEndpoint/ConfigurationProvider.php @@ -79,7 +79,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback($config['region']); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['use_fips_endpoint']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php index aeb9a484..97392a40 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/EndpointDiscovery/ConfigurationProvider.php @@ -83,7 +83,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback($config); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['endpoint_discovery']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/Retry/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/Retry/ConfigurationProvider.php index 1f87827a..95fe91e1 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/Retry/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/Retry/ConfigurationProvider.php @@ -85,7 +85,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['retries']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php index f36e3491..c2fc71dd 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/S3/RegionalEndpoint/ConfigurationProvider.php @@ -80,7 +80,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['s3_us_east_1_regional_endpoint']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php index 41876bd3..f5f557de 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/S3/UseArnRegion/ConfigurationProvider.php @@ -80,7 +80,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['use_arn_region']) diff --git a/lib/mcloud-aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php b/lib/mcloud-aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php index f4d3a6e6..e1ca36ce 100644 --- a/lib/mcloud-aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php +++ b/lib/mcloud-aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php @@ -82,7 +82,7 @@ public static function defaultProvider(array $config = []) $configProviders[] = self::fallback(); $memo = self::memoize( - call_user_func_array('self::chain', $configProviders) + call_user_func_array([self::class, 'chain'], $configProviders) ); if (isset($config['sts_regional_endpoints']) diff --git a/lib/mcloud-guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/lib/mcloud-guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index 7458cc89..f341fa05 100644 --- a/lib/mcloud-guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/lib/mcloud-guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -15,7 +15,7 @@ * * @property resource $_mh Internal use only. Lazy loaded multi-handle. */ -class CurlMultiHandler +class CurlMultiHandler extends \stdClass { /** @var CurlFactoryInterface */ private $factory; diff --git a/lib/mcloud-imgix/imgix-php/src/MediaCloud/Vendor/Imgix/UrlBuilder.php b/lib/mcloud-imgix/imgix-php/src/MediaCloud/Vendor/Imgix/UrlBuilder.php index 1916fec8..380b3000 100644 --- a/lib/mcloud-imgix/imgix-php/src/MediaCloud/Vendor/Imgix/UrlBuilder.php +++ b/lib/mcloud-imgix/imgix-php/src/MediaCloud/Vendor/Imgix/UrlBuilder.php @@ -3,7 +3,8 @@ namespace MediaCloud\Vendor\Imgix; use MediaCloud\Vendor\Imgix\Validator; -class UrlBuilder { + +class UrlBuilder extends \stdClass { private $currentVersion = "3.3.1"; private $domain; diff --git a/lib/mcloud-nesbot/carbon/src/Carbon/Traits/Creator.php b/lib/mcloud-nesbot/carbon/src/Carbon/Traits/Creator.php index 702e02ac..31343c2b 100644 --- a/lib/mcloud-nesbot/carbon/src/Carbon/Traits/Creator.php +++ b/lib/mcloud-nesbot/carbon/src/Carbon/Traits/Creator.php @@ -924,9 +924,11 @@ public static function make($var) * * @return void */ - private static function setLastErrors(array $lastErrors) + private static function setLastErrors($lastErrors) { - static::$lastErrors = $lastErrors; + if (is_array($lastErrors)) { + static::$lastErrors = $lastErrors; + } } /** diff --git a/readme.txt b/readme.txt index f4445bce..04d9793c 100644 --- a/readme.txt +++ b/readme.txt @@ -2,10 +2,10 @@ Contributors: mediacloud, interfacelab, freemius Tags: offload, amazon, s3, cloudflare, imgix, uploads, video, video encoding, google cloud storage, digital ocean spaces, wasabi, media, cdn, rekognition, cloudfront, images, crop, image editing, image editor, optimize, image optimization, media library, offload, offload s3, smush, imagify, shortpixel Requires at least: 4.9 -Tested up to: 6.1 +Tested up to: 6.3 License: GPLv3 or later License URI: http://www.gnu.org/licenses/gpl-3.0.html -Stable tag: 4.5.21 +Stable tag: 4.5.24 Requires PHP: 7.4 Automatically store media on Amazon S3, Cloudflare R2, Google Cloud Storage, DigitalOcean Spaces + others. Serve CSS/JS assets through CDNs. Integrate with Imgix. @@ -24,7 +24,7 @@ Media Cloud also provides advanced image editing tools that provide improved cro **NOTE**: This plugin requires PHP 7.1 or higher -= Upload to S3, Cloudflare R2, Minio, Google Cloud Storage, Wasabi, Digital Ocean Spaces, DreamHost Object Storage and others = += Upload to S3, Cloudflare R2, Minio, Google Cloud Storage, Digital Ocean Spaces, DreamHost Object Storage and others = Automatically copy media uploads to the cloud and serve them directly from your cloud storage provider, CloudFront or any other CDN. = Video Encoding with Mux = @@ -48,7 +48,7 @@ Media Cloud by ILAB ships with the most advanced image cropping tool available f = Compatible With Leading Image Optimizers = Compatible with Short Pixel, EWWW, Smush and Imagify image optimization plugins! -* Upload to any of a variety of cloud storage providers (Amazon S3, Cloudflare R2, Google Cloud Storage, Minio, Wasabi, Backblaze, DigitalOcean Spaces or any other S3 compatible service) +* Upload to any of a variety of cloud storage providers (Amazon S3, Cloudflare R2, Google Cloud Storage, Minio, Backblaze, DigitalOcean Spaces or any other S3 compatible service) * Host your media directly from your cloud storage provider or specify a CDN * Integrate with Imgix media hosting * Use Amazon Rekognition to automatically tag and categorize images @@ -105,6 +105,20 @@ Imgix is a content delivery network with a twist. In addition to distributing y == Changelog == += 4.5.24 - 09/27/2023 = + +* Fix Clean Uploads task to deal with crusty databases that have URLs in the _wp_attached_file meta field. +* Added `media-cloud/storage/verify/settings` filter to enable skipping cloud storage settings verification. Only use this + if you are using a strict IAM policy that prevents Media Cloud from verifying your settings. +* System compatibility test now takes upload prefix into account when testing cloud storage +* Deprecate Wasabi. Wasabi is not a suitable cloud storage provider for Media Cloud's purpose. If you are using Wasabi currently, + nothing will change. If you are not using Wasabi, you will not be able to add it as a cloud storage provider. + += 4.5.23 - 09/07/2023 = + +* Massive performance improvement for multisite. +* Some fixes for PHP 8.2. Still don't recommend using 8.2 with WordPress. 8.1 and 8.0 work fine though. + = 4.5.21 - 07/21/2023 = * IMPORTANT: This includes an important security fix for a third party lib. Please update ASAP. diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index 6d3407db..580fa960 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70100)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 70400)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.'; } if ($issues) {