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", "image" => "nullable|image|max:10240", // Max 10MB ], [ "name.required" => "Der Name des Lackes ist erforderlich.", "number.required" => "Die Nummer des Lackes ist erforderlich.", "image.image" => "Die Datei muss ein Bild sein.", "image.max" => "Das Bild darf maximal 10MB groß sein.", ]); try { $nailPolish = new NailPolish(); $nailPolish->name = trim($request->name); $nailPolish->number = trim($request->number); // 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); return redirect()->route("user-nail-polishes.index") ->with("success", "Lack \"{$nailPolish->name}\" wurde erfolgreich erstellt und zu Ihrer Sammlung hinzugefügt!"); } 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")); } }'; file_put_contents('app/Http/Controllers/UserNailPolishController.php', $controllerContent); echo " ✅ Controller mit vereinfachtem Upload erstellt\n"; // 2. Storage-Verzeichnisse erstellen echo "2. 📁 Storage-Verzeichnisse erstellen...\n"; $directories = [ 'storage/app/public', 'storage/app/public/nail_polishes' ]; foreach ($directories as $dir) { if (!is_dir($dir)) { mkdir($dir, 0755, true); echo " ✅ Verzeichnis erstellt: $dir\n"; } else { echo " ℹ️ Verzeichnis existiert bereits: $dir\n"; } } // 3. Berechtigungen setzen echo "3. 🔐 Berechtigungen setzen...\n"; system('chmod -R 755 storage/'); system('chown -R www-data:www-data storage/ 2>/dev/null || echo " ⚠️ chown fehlgeschlagen"'); echo " ✅ Berechtigungen gesetzt\n"; // 4. Storage Link erstellen echo "4. 🔗 Storage Link erstellen...\n"; if (file_exists('public/storage')) { if (is_dir('public/storage')) { system('rm -rf public/storage'); } } system('ln -sf ../storage/app/public public/storage'); echo " ✅ Storage Link erstellt\n"; // 5. Laravel Cache leeren echo "5. 🧹 Laravel Cache leeren...\n"; system('php artisan cache:clear 2>/dev/null || echo " ⚠️ cache:clear übersprungen"'); system('php artisan config:clear 2>/dev/null || echo " ⚠️ config:clear übersprungen"'); system('php artisan view:clear 2>/dev/null || echo " ⚠️ view:clear übersprungen"'); echo " ✅ Cache geleert\n"; echo "\n✅ Vereinfachtes Bild-Upload-System erstellt!\n"; echo "🔗 Testen Sie jetzt: https://neonail.vogt.de.com/create-nail-polish\n"; echo "📝 Das System speichert Bilder jetzt direkt ohne Verarbeitung\n"; echo "📋 Falls Upload immer noch fehlschlägt:\n"; echo "- Führen Sie php debug-image-upload.php aus\n"; echo "- Prüfen Sie die Laravel-Logs\n"; echo "- Testen Sie mit einem kleinen Bild (< 1MB)\n"; ?>