diff --git a/app/Models/Product.php b/app/Models/Product.php index 615534a..af178b1 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -60,6 +60,6 @@ class Product extends Model public function getFormattedPriceAttribute(): string { - return '€ '.number_format($this->base_price, 2, ',', '.'); + return '€ '.number_format((float) ($this->base_price ?? 0), 2, ',', '.'); } } diff --git a/app/Services/MakerWorldService.php b/app/Services/MakerWorldService.php index 7cacb03..6f29487 100644 --- a/app/Services/MakerWorldService.php +++ b/app/Services/MakerWorldService.php @@ -217,6 +217,34 @@ class MakerWorldService return Setting::get('makerworld_user'); } + /** + * Safely extract a normalized list of model items from diverse API response formats. + * + * @return array> + */ + public function extractModelsList(mixed $data): array + { + if (! is_array($data)) { + return []; + } + + if (isset($data['data']) && is_array($data['data'])) { + $data = $data['data']; + } + + $list = $data['hits'] ?? $data['designs'] ?? $data['list'] ?? $data['items'] ?? null; + + if (is_array($list)) { + return array_values(array_filter($list, fn ($item) => is_array($item))); + } + + if (array_is_list($data)) { + return array_values(array_filter($data, fn ($item) => is_array($item))); + } + + return []; + } + /** * Fetch user's favorited models from MakerWorld. */ @@ -233,9 +261,7 @@ class MakerWorldService ]); if ($response->successful()) { - $data = $response->json(); - - return $data['hits'] ?? $data['designs'] ?? $data['list'] ?? (is_array($data) ? $data : []); + return $this->extractModelsList($response->json()); } } catch (\Throwable $e) { Log::error('MakerWorld getFavorites error: '.$e->getMessage()); @@ -260,9 +286,7 @@ class MakerWorldService ]); if ($response->successful()) { - $data = $response->json(); - - return $data['hits'] ?? $data['designs'] ?? $data['list'] ?? (is_array($data) ? $data : []); + return $this->extractModelsList($response->json()); } } catch (\Throwable $e) { Log::error('MakerWorld getPublished error: '.$e->getMessage()); @@ -289,7 +313,9 @@ class MakerWorldService foreach ($data['hits'] as $contest) { if (! empty($contest['designs']) && is_array($contest['designs'])) { foreach ($contest['designs'] as $design) { - $allDesigns[$design['id']] = $design; + if (is_array($design) && ! empty($design['id'])) { + $allDesigns[$design['id']] = $design; + } } } } diff --git a/resources/views/admin/makerworld/index.blade.php b/resources/views/admin/makerworld/index.blade.php index 6249a24..6e85117 100644 --- a/resources/views/admin/makerworld/index.blade.php +++ b/resources/views/admin/makerworld/index.blade.php @@ -208,6 +208,7 @@
@foreach($models as $model) + @if(!is_array($model)) @continue @endif @php $mId = $model['id'] ?? 0; $isAlreadyImported = in_array($mId, $importedIds); @@ -366,7 +367,7 @@ - diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 1aa25cf..6f64843 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -94,7 +94,7 @@ @php - $cartItems = session('cart', []); + $cartItems = is_array(session('cart')) ? session('cart') : []; $cartCount = array_sum(array_column($cartItems, 'quantity')); @endphp