InfluxOW/laravel_ddd_ecommerce

View on GitHub
app/Components/Mediable/Classes/ResponsiveImage.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Components\Mediable\Classes;

use App\Components\Mediable\Services\Media\UrlGenerator;
use App\Domains\Common\Utils\PathUtils;
use DateTimeInterface;
use Spatie\MediaLibrary\ResponsiveImages\ResponsiveImage as BaseResponsiveImage;
use Spatie\MediaLibrary\Support\UrlGenerator\UrlGeneratorFactory;

final class ResponsiveImage extends BaseResponsiveImage
{
    public function temporaryUrl(DateTimeInterface $expiration): string
    {
        return $this->getUrlGenerator()->getTemporaryUrlForPath($this->getPathRelativeToRoot(), $expiration);
    }

    public function getPathRelativeToRoot(): string
    {
        $urlGenerator = $this->getUrlGenerator();
        /** @var string $path */
        $path = parse_url($urlGenerator->getResponsiveImagesDirectoryUrl(), PHP_URL_PATH);

        return PathUtils::join([trim($path, '/'), rawurldecode($this->fileName)]);
    }

    private function getUrlGenerator(): UrlGenerator
    {
        $conversionName = $this->generatedFor() === 'media_library_original' ? '' : $this->generatedFor();
        /** @var UrlGenerator $urlGenerator */
        $urlGenerator = UrlGeneratorFactory::createForMedia($this->media, $conversionName);

        return $urlGenerator;
    }
}