get("search"); $query = $user->nailPolishes(); if ($search) { $query->where(function($q) use ($search) { $q->where("name", "like", "%{$search}%") ->orWhere("number", "like", "%{$search}%"); }); } $nailPolishes = $query->orderBy("name")->paginate(12); return view("user-nail-polishes.index", compact("nailPolishes", "search")); } /** * Zeigt alle verfügbaren Lacke an, die der User noch nicht hat */ public function available(Request $request) { $user = Auth::user(); $search = $request->get("search"); $query = NailPolish::whereNotIn("id", $user->nailPolishes()->pluck("nail_polishes.id")); if ($search) { $query->search($search); } $nailPolishes = $query->orderBy("name")->paginate(12); return view("user-nail-polishes.available", compact("nailPolishes", "search")); } /** * Fügt einen Lack zur Sammlung des Users hinzu */ public function add(NailPolish $nailPolish) { $user = Auth::user(); // Prüfe, ob der Lack bereits in der Sammlung ist if ($user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) { return back()->with("warning", "Dieser Lack ist bereits in Ihrer Sammlung!"); } $user->nailPolishes()->attach($nailPolish->id); return back()->with("success", "Lack \"{$nailPolish->name}\" wurde zu Ihrer Sammlung hinzugefügt!"); } /** * Entfernt einen Lack aus der Sammlung des Users */ public function remove(NailPolish $nailPolish) { try { $user = Auth::user(); // Prüfe, ob der Lack in der Sammlung ist if (!$user->nailPolishes()->where("nail_polish_id", $nailPolish->id)->exists()) { return back()->with("warning", "Dieser Lack ist nicht in Ihrer Sammlung!"); } $user->nailPolishes()->detach($nailPolish->id); return back()->with("success", "Lack \"{$nailPolish->name}\" wurde aus Ihrer Sammlung entfernt!"); } catch (\Exception $e) { \Log::error("Fehler beim Entfernen des Lackes: " . $e->getMessage()); return back()->with("error", "Fehler beim Entfernen des Lackes. Bitte versuchen Sie es erneut."); } } /** * Zeigt das Formular zum Erstellen eines neuen Lackes */ public function create() { return view("user-nail-polishes.create"); } /** * Speichert einen neuen Lack (wird automatisch zum Hauptkatalog hinzugefügt) */ public function store(Request $request) { $request->validate([ "name" => "required|string|max:255", "number" => "required|string|max:50", "manufacturer_id" => "required_without:new_manufacturer|exists:manufacturers,id", "new_manufacturer" => "required_without:manufacturer_id|string|max:255|unique:manufacturers,name", "image" => "nullable|image|max:10240", // Max 10MB ], [ "name.required" => "Der Name des Lackes ist erforderlich.", "number.required" => "Die Nummer des Lackes ist erforderlich.", "manufacturer_id.required_without" => "Bitte wählen Sie einen Hersteller aus oder erstellen Sie einen neuen.", "new_manufacturer.required_without" => "Bitte wählen Sie einen Hersteller aus oder erstellen Sie einen neuen.", "new_manufacturer.unique" => "Ein Hersteller mit diesem Namen existiert bereits.", "image.image" => "Die Datei muss ein Bild sein.", "image.max" => "Das Bild darf maximal 10MB groß sein.", ]); try { // Hersteller verarbeiten $manufacturerId = null; if ($request->filled('new_manufacturer')) { // Neuen Hersteller erstellen $manufacturer = \App\Models\Manufacturer::create([ 'name' => trim($request->new_manufacturer), ]); $manufacturerId = $manufacturer->id; } else { $manufacturerId = $request->manufacturer_id; } $nailPolish = new NailPolish(); $nailPolish->name = trim($request->name); $nailPolish->number = trim($request->number); $nailPolish->manufacturer_id = $manufacturerId; // Vereinfachte Bildverarbeitung ohne Intervention Image if ($request->hasFile("image") && $request->file("image")->isValid()) { $image = $request->file("image"); // Erstelle einen eindeutigen Dateinamen $filename = "nail_polish_" . time() . "_" . uniqid() . "." . $image->getClientOriginalExtension(); $path = "nail_polishes/" . $filename; // Speichere das Bild direkt ohne Verarbeitung Storage::disk("public")->putFileAs("nail_polishes", $image, $filename); $nailPolish->image_path = $path; \Log::info("Bild erfolgreich gespeichert: " . $path); } $nailPolish->save(); // Füge den Lack automatisch zur Sammlung des Users hinzu $user = Auth::user(); $user->nailPolishes()->attach($nailPolish->id); $successMessage = "Lack \"{$nailPolish->name}\" wurde erfolgreich erstellt und zu Ihrer Sammlung hinzugefügt!"; if ($request->filled('new_manufacturer')) { $successMessage .= " Neuer Hersteller \"{$request->new_manufacturer}\" wurde ebenfalls erstellt."; } return redirect()->route("user-nail-polishes.index") ->with("success", $successMessage); } catch (\Exception $e) { \Log::error("Fehler beim Erstellen des Lackes: " . $e->getMessage()); return back()->with("error", "Fehler beim Erstellen des Lackes: " . $e->getMessage()) ->withInput(); } } /** * Zeigt die Sammlung eines bestimmten Users (für Admin) */ public function showUserCollection(User $user) { $nailPolishes = $user->nailPolishes()->orderBy("name")->paginate(12); return view("user-nail-polishes.show-user", compact("user", "nailPolishes")); } }