filter(fn ($item) => $item->release !== null); $this->viewData = array_merge($this->viewData, [ 'results' => $results, 'meta_title' => 'My Download Basket', 'meta_keywords' => 'search,add,to,cart,download,basket,nzb,description,details', 'meta_description' => 'Manage Your Download Basket', ]); return view('cart.index', $this->viewData); } /** * @throws \Exception */ public function store(Request $request): RedirectResponse|JsonResponse { $guids = collect(explode(',', (string) $request->input('id'))) ->map(static fn (string $guid): string => trim($guid)) ->filter() ->unique() ->values(); $releaseIds = Release::query() ->whereIn('guid', $guids) ->pluck('id') ->map(static fn ($id): int => (int) $id) ->all(); if ($releaseIds === []) { return $request->ajax() || $request->wantsJson() ? response()->json(['success' => false, 'message' => 'No releases found'], 404) : redirect()->to('/cart/index'); } $existingReleaseIds = UsersRelease::query() ->where('users_id', $this->userdata->id) ->whereIn('releases_id', $releaseIds) ->pluck('releases_id') ->map(static fn ($id): int => (int) $id) ->all(); $missingReleaseIds = array_values(array_diff($releaseIds, $existingReleaseIds)); $addedCount = UsersRelease::addCartForReleases((int) $this->userdata->id, $missingReleaseIds); if ($request->ajax() || $request->wantsJson()) { return response()->json([ 'success' => true, 'message' => $addedCount > 0 ? "{$addedCount} item(s) added to cart" : 'Items already in cart', 'cartCount' => UsersRelease::where('users_id', $this->userdata->id)->count(), ]); } return redirect()->to('/cart/index'); } /** * @param array $id * * @throws \Exception */ public function destroy(array|string $id): RedirectResponse { $ids = null; if (! empty($id) && ! \is_array($id)) { $ids = explode(',', $id); } elseif (\is_array($id)) { $ids = $id; } if (! empty($ids) && UsersRelease::delCartByGuid($ids, $this->userdata->id)) { return redirect()->to('/cart/index'); } if (! $id) { return redirect()->to('/cart/index'); } return redirect()->to('/cart/index'); } }