take(5)->get(); $recentNailPolishes = NailPolish::latest()->take(5)->get(); $recentManufacturers = Manufacturer::latest()->take(5)->get(); return view("admin.dashboard", compact("totalUsers", "totalNailPolishes", "totalManufacturers", "recentUsers", "recentNailPolishes", "recentManufacturers")); } /** * Liste aller Benutzer */ public function users(Request $request) { $search = $request->get("search"); $users = User::when($search, function($query) use ($search) { return $query->where("name", "like", "%{$search}%") ->orWhere("email", "like", "%{$search}%"); })->orderBy("name")->paginate(20); return view("admin.users.index", compact("users", "search")); } /** * Formular zum Erstellen eines neuen Benutzers */ public function createUser() { return view("admin.users.create"); } /** * Neuen Benutzer speichern */ public function storeUser(Request $request) { $request->validate([ "name" => "required|string|max:255", "email" => "required|string|email|max:255|unique:users", "password" => "required|string|min:8|confirmed", ]); // Passwort für E-Mail speichern (wird nach dem Speichern gelöscht) $plainPassword = $request->password; // User erstellen $user = User::create([ "name" => $request->name, "email" => $request->email, "password" => Hash::make($request->password), "is_admin" => $request->has("is_admin"), ]); // Willkommens-E-Mail senden try { Mail::send("emails.welcome-user", [ "user" => $user, "password" => $plainPassword ], function($message) use ($user) { $message->to($user->email, $user->name) ->subject("🎨 Willkommen bei der NeoNail DB - Ihre Login-Daten") ->from(config("mail.from.address"), config("mail.from.name")); }); // Admin-Bestätigung senden Mail::raw("Hallo Admin! Ein neuer User wurde erfolgreich erstellt und eine Willkommens-E-Mail gesendet. 📋 User-Details: - Name: {$user->name} - E-Mail: {$user->email} - Admin-Status: " . ($user->isAdmin() ? "Ja" : "Nein") . " - Erstellt: " . now() . " Die Willkommens-E-Mail enthält: - Login-Daten (Website, E-Mail, Passwort) - Aufforderung zum Passwort-Ändern - Feature-Übersicht - Direkte Links zur Anwendung Viele Grüße, NeoNail DB System", function($message) { $message->to("oliver@vogt.de.com", "Admin") ->subject("✅ NeoNail DB - Neuer User erstellt") ->from(config("mail.from.address"), config("mail.from.name")); }); $successMessage = "Benutzer erfolgreich erstellt! Willkommens-E-Mail wurde gesendet."; } catch (\Exception $e) { // User wurde erstellt, aber E-Mail fehlgeschlagen \Log::error("Fehler beim Senden der Willkommens-E-Mail: " . $e->getMessage()); $successMessage = "Benutzer erfolgreich erstellt! E-Mail konnte nicht gesendet werden."; } return redirect()->route("admin.users.index") ->with("success", $successMessage); } /** * Formular zum Bearbeiten eines Benutzers */ public function editUser(User $user) { return view("admin.users.edit", compact("user")); } /** * Benutzer aktualisieren */ public function updateUser(Request $request, User $user) { $request->validate([ "name" => "required|string|max:255", "email" => "required|string|email|max:255|unique:users,email," . $user->id, "password" => "nullable|string|min:8|confirmed", ]); $user->name = $request->name; $user->email = $request->email; $user->is_admin = $request->has("is_admin"); if ($request->filled("password")) { $user->password = Hash::make($request->password); } $user->save(); return redirect()->route("admin.users.index") ->with("success", "Benutzer erfolgreich aktualisiert!"); } /** * Benutzer löschen */ public function destroyUser(User $user) { $userName = $user->name; $userEmail = $user->email; $user->delete(); // Admin-Benachrichtigung über gelöschten User try { Mail::raw("Hallo Admin! Ein User wurde erfolgreich gelöscht. 📋 Gelöschter User: - Name: {$userName} - E-Mail: {$userEmail} - Gelöscht: " . now() . " Viele Grüße, NeoNail DB System", function($message) { $message->to("oliver@vogt.de.com", "Admin") ->subject("🗑️ NeoNail DB - User gelöscht") ->from(config("mail.from.address"), config("mail.from.name")); }); } catch (\Exception $e) { \Log::error("Fehler beim Senden der Lösch-Benachrichtigung: " . $e->getMessage()); } return redirect()->route("admin.users.index") ->with("success", "Benutzer erfolgreich gelöscht!"); } /** * Statistiken anzeigen */ public function statistics() { $totalUsers = User::count(); $totalNailPolishes = NailPolish::count(); $usersWithCollections = User::has("nailPolishes")->count(); $averageCollectionSize = User::withCount("nailPolishes")->avg("nail_polishes_count"); $topUsers = User::withCount("nailPolishes") ->orderBy("nail_polishes_count", "desc") ->take(10) ->get(); return view("admin.statistics", compact( "totalUsers", "totalNailPolishes", "usersWithCollections", "averageCollectionSize", "topUsers" )); } }