File "PathGeneratorFactory.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/vendor/spatie/laravel-medialibrary/src/Support/PathGenerator/PathGeneratorFactory.php
File size: 1.98 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Spatie\MediaLibrary\Support\PathGenerator;
use Illuminate\Database\Eloquent\Relations\Relation;
use Spatie\MediaLibrary\MediaCollections\Exceptions\InvalidPathGenerator;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class PathGeneratorFactory
{
public static function create(Media $media): PathGenerator
{
$pathGeneratorClass = static::getPathGeneratorClass($media);
static::guardAgainstInvalidPathGenerator($pathGeneratorClass);
return app($pathGeneratorClass);
}
protected static function getPathGeneratorClass(Media $media)
{
$defaultPathGeneratorClass = config('media-library.path_generator');
foreach (config('media-library.custom_path_generators', []) as $modelClass => $customPathGeneratorClass) {
if (static::mediaBelongToModelClass($media, $modelClass)) {
return $customPathGeneratorClass;
}
}
return $defaultPathGeneratorClass;
}
protected static function mediaBelongToModelClass(Media $media, string $modelClass): bool
{
// model doesn't have morphMap, so morph type and class are equal
if (is_a($media->model_type, $modelClass, true)) {
return true;
}
// config is set via morphMap alias
if ($media->model_type === $modelClass) {
return true;
}
// config is set via morphMap class name
if (is_a((string)Relation::getMorphedModel($media->model_type), $modelClass, true)) {
return true;
}
return false;
}
protected static function guardAgainstInvalidPathGenerator(string $pathGeneratorClass): void
{
if (! class_exists($pathGeneratorClass)) {
throw InvalidPathGenerator::doesntExist($pathGeneratorClass);
}
if (! is_subclass_of($pathGeneratorClass, PathGenerator::class)) {
throw InvalidPathGenerator::doesNotImplementPathGenerator($pathGeneratorClass);
}
}
}