diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a414878c..97f3018fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ 1. [](#new) * Added a new `svg_image()` twig function to make it easier to 'include' SVG source in Twig + * Added a helper `Utils::fullPath()` to get the full path to a file be it stream, relative, etc. # v1.7.0-rc.15 ## 07/22/2020 diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index 0f6839d78..ef2e16d8b 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -130,6 +130,28 @@ abstract class Utils return rtrim($uri->rootUrl($domain), '/') . '/' . ($resource ?? ''); } + /** + * Helper method to find the full path to a file, be it a stream, a relative path, or + * already a full path + * + * @param $path + * @return string + */ + public static function fullPath($path) + { + $locator = Grav::instance()['locator']; + + if ($locator->isStream($path)) { + $path = $locator->findResource($path, true); + } elseif (!Utils::startsWith($path, GRAV_ROOT)) { + $base_url = Grav::instance()['base_url']; + $path = GRAV_ROOT . '/' . ltrim(Utils::replaceFirstOccurrence($base_url, '', $path), '/'); + } + + return $path; + } + + /** * Check if the $haystack string starts with the substring $needle *