186 lines
6.9 KiB
PHP
Executable File
186 lines
6.9 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\NailPolish;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class UserNailPolishController extends Controller
|
|
{
|
|
/**
|
|
* Zeigt die Sammlung des aktuellen Benutzers an
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$user = Auth::user();
|
|
$search = $request->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"));
|
|
}
|
|
} |