From 554bde31f99a31b84d8aa1304634ad1a16477e7b Mon Sep 17 00:00:00 2001 From: Joe Forshaw Date: Fri, 29 Mar 2024 12:30:48 +0000 Subject: [PATCH] Added support for volume subpaths (#79) * Added support for volume subpaths * 4.0.2 release --- CHANGELOG.md | 15 ++++++--------- composer.json | 2 +- src/AssetsPlatform/AssetsPlatform.php | 11 ++++++++--- src/AssetsPlatform/ImageTransforms.php | 15 +++++++++++---- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55456ed..597416b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,20 @@ # Release Notes for Servd Assets and Helpers -## 4.0.4 - 2024-03-13 +## 4.0.2 - 2024-03-29 + +### Added + +- Support for Craft 5 volume subpaths ### Updated - Moved image do-not-upscale logic over to asset platform - -## 4.0.3 - 2024-03-12 +- Merged recent v3.x plugin changes ### Fixed - Fixed a bug when purging static cache URLs with no defined path -## 4.0.2 - 2024-03-11 - -### Updated - -- Merged recent v3.x plugin changes - ## 4.0.1 - 2024-03-08 ### Fixed diff --git a/composer.json b/composer.json index cdb6cd0..4631cd2 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "servd/craft-asset-storage", "description": "Servd Asset Storage and Helpers integration for Craft CMS", - "version": "4.0.4", + "version": "4.0.2", "type": "craft-plugin", "keywords": [ "cms", diff --git a/src/AssetsPlatform/AssetsPlatform.php b/src/AssetsPlatform/AssetsPlatform.php index 4abdf1e..16163f3 100644 --- a/src/AssetsPlatform/AssetsPlatform.php +++ b/src/AssetsPlatform/AssetsPlatform.php @@ -287,9 +287,13 @@ public function getFileUrl(Asset $asset) { $settings = Plugin::$plugin->getSettings(); - $fs = $asset->getVolume()->getFs(); + $volume = $asset->getVolume(); + $fs = $volume->getFs(); + $normalizedCustomSubfolder = App::parseEnv($fs->customSubfolder); + $normalizedSubpath = trim(App::parseEnv($volume->getSubpath()) , "/"); + $normalizedSubpath = strlen($normalizedSubpath) > 0 ? $normalizedSubpath . '/' : ''; //Special handling for videos $assetIsVideo = AssetsHelper::getFileKindByExtension($asset->filename) === Asset::KIND_VIDEO @@ -298,6 +302,7 @@ public function getFileUrl(Asset $asset) return 'https://servd-' . $settings->getProjectSlug() . '.b-cdn.net/' . $settings->getAssetsEnvironment() . '/' . (strlen(trim($normalizedCustomSubfolder, "/")) > 0 ? (trim($normalizedCustomSubfolder, "/") . '/') : '') . + $normalizedSubpath . $asset->getPath(); } @@ -308,7 +313,7 @@ public function getFileUrl(Asset $asset) "environment" => $settings->getAssetsEnvironment(), "projectSlug" => $settings->getProjectSlug(), "subfolder" => trim($normalizedCustomSubfolder, "/"), - "filePath" => $asset->getPath(), + "filePath" => $normalizedSubpath . $asset->getPath(), ]; $finalUrl = $customPattern; foreach ($variables as $key => $value) { @@ -317,7 +322,7 @@ public function getFileUrl(Asset $asset) //Apply rawurlencode to match AssetsHelper::generateUrl behaviour $urlParts = parse_url($finalUrl); $finalUrl = $urlParts['scheme'] . '://' . $urlParts['host'] . implode('/', array_map('rawurlencode', explode('/', $urlParts['path']))); - + } else { $finalUrl = AssetsHelper::generateUrl($asset); } diff --git a/src/AssetsPlatform/ImageTransforms.php b/src/AssetsPlatform/ImageTransforms.php index 6fb2cde..5a9c16a 100644 --- a/src/AssetsPlatform/ImageTransforms.php +++ b/src/AssetsPlatform/ImageTransforms.php @@ -26,7 +26,8 @@ public function transformUrl(Asset $asset, TransformOptions $transform) { $settings = Plugin::$plugin->getSettings(); - $fs = $asset->getVolume()->getFs(); + $volume = $asset->getVolume(); + $fs = $volume->getFs(); if (get_class($fs) !== Fs::class) { return null; @@ -50,6 +51,8 @@ public function transformUrl(Asset $asset, TransformOptions $transform) $params['s'] = $signingKey; $normalizedCustomSubfolder = App::parseEnv($fs->customSubfolder); + $normalizedSubpath = trim(App::parseEnv($volume->getSubpath()) , "/"); + $normalizedSubpath = strlen($normalizedSubpath) > 0 ? $normalizedSubpath . '/' : ''; // Use a custom URL template if one has been provided $customPattern = App::parseEnv($fs->optimiseUrlPattern); @@ -58,7 +61,7 @@ public function transformUrl(Asset $asset, TransformOptions $transform) "environment" => $settings->getAssetsEnvironment(), "projectSlug" => $settings->getProjectSlug(), "subfolder" => trim($normalizedCustomSubfolder, "/"), - "filePath" => $this->encodeFilenameInFilePath($asset->getPath()), + "filePath" => $this->encodeFilenameInFilePath($normalizedSubpath . $asset->getPath()), "params" => '?' . http_build_query($params), ]; $finalUrl = $customPattern; @@ -106,10 +109,14 @@ public function getFullPathForAssetAndTransform(Asset $asset, $params) return; } + $volume = $asset->getVolume(); /** @var \servd\AssetStorage\AssetsPlatform\Fs */ - $fs = $asset->getVolume()->getFs(); + $fs = $volume->getFs(); - $filePath = $this->encodeFilenameInFilePath($asset->getPath()); + $normalizedSubpath = trim(App::parseEnv($volume->getSubpath()) , "/"); + $normalizedSubpath = strlen($normalizedSubpath) > 0 ? $normalizedSubpath . '/' : ''; + + $filePath = $this->encodeFilenameInFilePath($normalizedSubpath . $asset->getPath()); $base = rtrim($fs->_subfolder(), '/') . '/'; $base = ltrim($base, '/');