File "MediaRepository.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/vendor/spatie/laravel-medialibrary/src/MediaCollections/MediaRepository.php
File size: 3.58 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Spatie\MediaLibrary\MediaCollections;
use Closure;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection as DbCollection;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class MediaRepository
{
public function __construct(
protected Media $model
) {
}
/**
* Get all media in the collection.
*
* @param array|callable $filter
*
*/
public function getCollection(
HasMedia $model,
string $collectionName,
array|callable $filter = []
): Collection {
return $this->applyFilterToMediaCollection($model->loadMedia($collectionName), $filter);
}
/**
* Apply given filters on media.
*
* @param Collection $media
* @param array|callable $filter
*
* @return Collection
*/
protected function applyFilterToMediaCollection(
Collection $media,
array|callable $filter
): Collection {
if (is_array($filter)) {
$filter = $this->getDefaultFilterFunction($filter);
}
return $media->filter($filter);
}
public function all(): DbCollection
{
return $this->query()->get();
}
public function getByModelType(string $modelType): DbCollection
{
return $this->query()->where('model_type', $modelType)->get();
}
public function getByIds(array $ids): DbCollection
{
return $this->query()->whereIn($this->model->getKeyName(), $ids)->get();
}
public function getByIdGreaterThan(int $startingFromId, bool $excludeStartingId = false, string $modelType = ''): DbCollection
{
return $this->query()
->where($this->model->getKeyName(), $excludeStartingId ? '>' : '>=', $startingFromId)
->when($modelType !== '', fn (Builder $q) => $q->where('model_type', $modelType))
->get();
}
public function getByModelTypeAndCollectionName(string $modelType, string $collectionName): DbCollection
{
return $this->query()
->where('model_type', $modelType)
->where('collection_name', $collectionName)
->get();
}
public function getByCollectionName(string $collectionName): DbCollection
{
return $this->query()
->where('collection_name', $collectionName)
->get();
}
public function getOrphans(): DbCollection
{
return $this->orphansQuery()
->get();
}
public function getOrphansByCollectionName(string $collectionName): DbCollection
{
return $this->orphansQuery()
->where('collection_name', $collectionName)
->get();
}
protected function query(): Builder
{
return $this->model->newQuery();
}
protected function orphansQuery(): Builder
{
return $this->query()
->whereDoesntHave(
'model',
fn (Builder $q) => $q->hasMacro('withTrashed') ? $q->withTrashed() : $q,
);
}
protected function getDefaultFilterFunction(array $filters): Closure
{
return function (Media $media) use ($filters) {
foreach ($filters as $property => $value) {
if (! Arr::has($media->custom_properties, $property)) {
return false;
}
if (Arr::get($media->custom_properties, $property) !== $value) {
return false;
}
}
return true;
};
}
}