File: /var/www/limestate-admin/app/Repositories/ElasticRepository.php
<?php
declare(strict_types=1);
namespace App\Repositories;
use App\Collections\AttachmentThumbCollection;
use App\Models\Attachment\AttachmentThumb;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
class ElasticRepository
{
public static function getAllAttachments(Model $entity): Collection
{
/** @var Collection $attachments */
$attachments = $entity->attachment;
if (!empty($entity->plan_id ?? null) && !empty($entity->plan)) {
$attachments = $attachments->add($entity->plan);
}
return $attachments;
}
public static function fillGallery(Collection $attachments, array &$data, ?int $planId = null, bool $skipPlan = false): void
{
$attachmentsIds = $attachments->map(fn($attachment) => $attachment->id)->toArray();
$attachmentsThumbs = [];
if (!empty($attachmentsIds)) {
$attachmentsThumbsByAttachmentId = [];
/** @var AttachmentThumbCollection $attachmentsThumbs */
$attachmentsThumbs = AttachmentThumb::query()->whereIn('attachment_id', $attachmentsIds)->get();
foreach ($attachmentsThumbs as $attachmentThumb) {
$attachmentsThumbsByAttachmentId[$attachmentThumb->attachment_id][$attachmentThumb->type] = $attachmentThumb;
}
$attachmentsThumbs = $attachmentsThumbsByAttachmentId;
}
foreach ($attachments as $attachment) {
if ($skipPlan && $attachment->id == $planId) {
continue;
}
$url = $attachment?->url();
if (empty($url)) {
continue;
}
/** @var AttachmentThumb $attachmentsThumb */
$attachmentsThumb = $attachmentsThumbs[$attachment->id] ?? null;
if (isset($planId) && $attachment->id == $planId) {
$data['plan'] = $url;
$data['plan_thumb'] = empty($attachmentsThumb['medium_large']) ? null : $attachmentsThumb['medium_large']->url() ?? '';
} else {
$data['gallery'][] = ['url' => $url];
if (empty($attachmentsThumb)) {
$data['gallery_thumbs'][] = [];
$data['full_thumbs'][] = [];
} else {
$data['gallery_thumbs'][] = ['url' => $attachmentsThumb['medium_large']?->url() ?? ''];
$data['full_thumbs'][] = [
'thumbnail' => $attachmentsThumb['thumbnail']?->url() ?? '',
'medium' => $attachmentsThumb['medium']?->url() ?? '',
'medium_large' => $attachmentsThumb['medium_large']?->url() ?? '',
'large' => $attachmentsThumb['large']?->url() ?? '',
'origin' => $url,
];
}
}
}
}
}